28 #include "../canvas/MapDisplay.h" 
   34 #include "ui_TimeSliderWidgetForm.h" 
   44 #include <QGraphicsEffect> 
   46 #include <QGraphicsView> 
   48 #include <QParallelAnimationGroup> 
   49 #include <QPropertyAnimation> 
   52 #include <QTextStream> 
   53 #include <QContextMenuEvent> 
   54 #include <QMessageBox> 
   55 #include <QInputDialog> 
   56 #include <QDateTimeEdit> 
   57 #include <QColorDialog> 
   63     m_erasePerfectly(false),
 
   64     m_maxSliderValue(1000000000),
 
   65     m_ui(new Ui::TimeSliderWidgetForm),
 
   70   setFocusPolicy(Qt::StrongFocus);
 
   71   setMouseTracking(
true);
 
   80   m_ui->m_TemporalHorizontalSlider->setMinimum(0);
 
   83   m_ui->m_durationSpinBox->setMinimum(100);
 
   84   m_ui->m_durationSpinBox->setMaximum(100000000);
 
   85   m_ui->m_durationSpinBox->setValue(10000);
 
   86   m_ui->m_durationSpinBox->setSingleStep(10000);
 
   88   m_ui->m_opacitySpinBox->setMinimum(0);
 
   89   m_ui->m_opacitySpinBox->setMaximum(255);
 
   90   m_ui->m_opacitySpinBox->setValue(255);
 
   91   m_ui->m_opacitySpinBox->setSingleStep(5);
 
  104   m_ui->m_settingsToolButton->setIcon(QIcon::fromTheme(
"preferences-system"));
 
  105   m_ui->m_playToolButton->setIcon(QIcon::fromTheme(
"media-playback-start"));
 
  106   m_ui->m_stopToolButton->setIcon(QIcon::fromTheme(
"media-playback-stop"));
 
  121   connect(
m_ui->m_dateTimeEdit, SIGNAL(dateTimeChanged(
const QDateTime&) ), 
this, SLOT(
onDateTimeEditChanged(
const QDateTime&)));
 
  127   connect(
m_ui->m_TemporalHorizontalSlider, SIGNAL(sliderMoved (
int)), 
this, SLOT(
onSliderMoved(
int)));
 
  136   setAttribute(Qt::WA_DeleteOnClose, 
true);
 
  144   m_ui->m_forwardRadioButton->setCheckable(
true);
 
  159   installEventFilter(
this);
 
  160   m_ui->m_forwardColorPushButton->installEventFilter(
this);
 
  161   m_ui->m_backwardColorPushButton->installEventFilter(
this);
 
  162   m_ui->m_dateTimeEdit->installEventFilter(
this);
 
  163   m_ui->m_initialAnimationDateTimeEdit->installEventFilter(
this);
 
  164   m_ui->m_finalAnimationDateTimeEdit->installEventFilter(
this);
 
  166   m_ui->m_dateTimeEdit->setDisplayFormat(
"dd/MMM/yyyy hh:mm:ss");
 
  167   m_ui->m_initialAnimationDateTimeEdit->setDisplayFormat(
"dd/MMM/yyyy hh:mm:ss");
 
  168   m_ui->m_finalAnimationDateTimeEdit->setDisplayFormat(
"dd/MMM/yyyy hh:mm:ss");
 
  182     m_ui->m_durationSpinBox->setEnabled(
false);
 
  183     m_ui->m_settingsToolButton->setEnabled(
false);
 
  184     m_ui->m_playToolButton->setEnabled(
false);
 
  185     m_ui->m_stopToolButton->setEnabled(
false);
 
  186     m_ui->m_dateTimeEdit->setEnabled(
false);
 
  191     m_ui->m_durationSpinBox->setEnabled(
true);
 
  192     m_ui->m_settingsToolButton->setEnabled(
true);
 
  193     m_ui->m_playToolButton->setEnabled(
true);
 
  194     m_ui->m_stopToolButton->setEnabled(
true);
 
  196       m_ui->m_dateTimeEdit->setEnabled(
true);
 
  198       m_ui->m_dateTimeEdit->setEnabled(
false);
 
  210     QList<QGraphicsItem*>::iterator it = list.begin(); 
 
  222   m_parallelAnimation->stop(); 
 
  223   m_parallelAnimation->clear();
 
  224   delete m_parallelAnimation;
 
  225   delete m_animationScene;
 
  227   bool b = m_animationView->testAttribute(Qt::WA_DeleteOnClose);
 
  228   m_animationView->close();
 
  230     delete m_animationView;
 
  235   const QMimeData* mdata = e->mimeData();
 
  236   QList<QUrl> urls = mdata->urls();
 
  239     QByteArray ba = mdata->data(
"application/x-terralib;value=\"DraggedItems\"");
 
  243       std::vector<te::qt::widgets::AbstractTreeItem*>* ditems = (std::vector<AbstractTreeItem*>*)s.toULongLong();
 
  244       std::vector<te::qt::widgets::AbstractTreeItem*>::iterator it;
 
  245       for(it = ditems->begin(); it != ditems->end(); ++it)
 
  248         std::string ltype = ati->
getLayer()->getType();
 
  249         if(ltype == 
"DATASETLAYER")
 
  255           std::map<std::string, std::string> ci = ds->getConnectionInfo();
 
  256           std::map<std::string, std::string>::iterator it = ci.find(
"URI");
 
  259             std::string uri(it->second);
 
  260             if(uri.find(
"kml") != std::string::npos)
 
  264                 e->setDropAction(Qt::LinkAction); 
 
  266                 e->setAccepted(
true);
 
  274       e->setAccepted(
false);
 
  278     QString path = urls.begin()->path();
 
  279     size_t pos = path.indexOf(
"/");
 
  283     QStringList nameFilter;
 
  284     nameFilter.append(
"*.ctl");
 
  285     QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
 
  286     if(files.empty() == 
false)
 
  288       QString file(path + 
"/" + files.first());
 
  289       FILE* fp = fopen(file.toStdString().c_str(), 
"r");
 
  291       int c = fread(buf, 
sizeof(
char), 2000, fp);
 
  295       if(s.contains(
"undef", Qt::CaseInsensitive))
 
  296         e->setAccepted(
true);
 
  298         e->setAccepted(
false);
 
  303       nameFilter.append(
"S1123*.jpg");
 
  304       QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
 
  305       if(files.empty() == 
false && files.first().length() == 26)
 
  306         e->setAccepted(
true);
 
  310         nameFilter.append(
"S1118*.jpg");
 
  311         QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
 
  312         if(files.empty() == 
false && files.first().length() == 26)
 
  313           e->setAccepted(
true);
 
  315           e->setAccepted(
false);
 
  323   m_dropModifiers = e->keyboardModifiers();
 
  324   const QMimeData* mdata = e->mimeData();
 
  325   m_dropUrls = mdata->urls();
 
  326   m_dropBA = mdata->data(
"application/x-terralib;value=\"DraggedItems\"");
 
  327   QTimer::singleShot(10, 
this, SLOT(dropAction()));
 
  333   int state = m_parallelAnimation->state();
 
  334   if(state == QAbstractAnimation::Running)
 
  335     onPlayToolButtonnClicked(); 
 
  337   if(m_dropModifiers == Qt::NoModifier)
 
  339     onStopToolButtonnClicked();
 
  341     m_ui->m_opacityComboBox->clear();
 
  342     m_ui->m_trajectoryColorComboBox->clear();
 
  343     m_ui->m_TemporalHorizontalSlider->setValue(0);
 
  344     m_parallelAnimation->setCurrentTime(0);
 
  345     m_ui->m_settingsToolButton->setEnabled(
false);
 
  346     m_ui->m_playToolButton->setEnabled(
false);
 
  347     m_ui->m_stopToolButton->setEnabled(
false);
 
  348     m_ui->m_durationSpinBox->setEnabled(
false);
 
  349     m_ui->m_dateTimeEdit->setEnabled(
false);
 
  350     showPropertySection(
false);
 
  352     QList<QGraphicsItem*> list = m_animationScene->items();
 
  353     QList<QGraphicsItem*>::iterator it;
 
  354     for(it = list.begin(); it != list.end(); ++it)
 
  357       m_animationScene->removeItem(ai);
 
  358       m_parallelAnimation->removeAnimation(ai->
m_animation);
 
  365   if(m_dropUrls.empty())
 
  367     if(m_dropBA.count() != 0)
 
  370       std::vector<te::qt::widgets::AbstractTreeItem*>* ditems = (std::vector<AbstractTreeItem*>*)s.toULongLong();
 
  371       std::vector<te::qt::widgets::AbstractTreeItem*>::iterator it;
 
  372       for(it = ditems->begin(); it != ditems->end(); ++it)
 
  375         std::string ltype = ati->
getLayer()->getType();
 
  376         if(ltype == 
"DATASETLAYER")
 
  382           std::map<std::string, std::string> ci = ds->getConnectionInfo();
 
  383           std::map<std::string, std::string>::iterator it = ci.find(
"URI");
 
  387             QString uri(it->second.c_str());
 
  388             if(dsetname == 
"40: locations" || dsetname == 
"41: locations")
 
  390               QPair<QString, QString> p(uri, dsetname);
 
  393                 QMessageBox::information(
this, dsetname + 
" alredy exists", 
"This item is already being animated!");
 
  395                 openTrajectory(uri, dsetname);
 
  404     QString path = m_dropUrls.first().path();
 
  407     QPair<QString, QString> p(path, 
"");
 
  410       QMessageBox::information(
this, 
"animation alredy exists", 
"This item is already being animated!");
 
  412       addTemporalImages(path);
 
  415   if(state == QAbstractAnimation::Running || m_dropModifiers == Qt::NoModifier)
 
  416     onPlayToolButtonnClicked();
 
  421   QList<QPair<QString, QString> >::iterator it;
 
  422   for(it = m_itemList.begin(); it != m_itemList.end(); ++it)
 
  427   m_itemList.append(item);
 
  434   std::map<std::string, std::string> connInfo;
 
  435   connInfo[
"URI"] = file.toStdString(); 
 
  438   dsinfo.
setId(file.toStdString());
 
  455   if(leao == 
"40: locations")
 
  459     addTrajectory(leao, 
"c:/lixo/helicopteroT2.png", tjDS40);
 
  462   else if(leao == 
"41: locations")
 
  466     addTrajectory(leao, 
"c:/lixo/cachorro_correndo_31.gif", tjDS41);
 
  475   m_animationScene->addItem(ti);
 
  477   animation->setEasingCurve(QEasingCurve::Linear);
 
  483   if(title == 
"40: locations") 
 
  495   size_t size = dset->
size();
 
  507       std::auto_ptr<te::dt::DateTime> time = dset->
getTime();
 
  510       if(tiraRepetido == *tinstant)
 
  512       tiraRepetido = *tinstant;
 
  516       std::auto_ptr<te::gm::Geometry> geom = dset->
getGeometry();
 
  523   m_parallelAnimation->addAnimation(animation);
 
  524   calculateSpatialExtent();
 
  525   calculateTemporalExtent();
 
  527   setDuration(m_duration);
 
  528   setDirection(m_direction);
 
  530   int state = m_parallelAnimation->state();
 
  531   if(state == QAbstractAnimation::Running)
 
  533     onPlayToolButtonnClicked();
 
  534     m_parallelAnimation->setCurrentTime(m_currentTime);
 
  536   if(m_animationScene->items().isEmpty() == 
false)
 
  538     m_ui->m_durationSpinBox->setEnabled(
true);
 
  539     m_ui->m_settingsToolButton->setEnabled(
true);
 
  540     m_ui->m_playToolButton->setEnabled(
true);
 
  541     m_ui->m_stopToolButton->setEnabled(
true);
 
  542     if(m_parallelAnimation->state() == QAbstractAnimation::Paused)
 
  543       m_ui->m_dateTimeEdit->setEnabled(
true);
 
  545       m_ui->m_dateTimeEdit->setEnabled(
false);
 
  549   m_ui->m_trajectoryColorComboBox->addItem(title);
 
  550   int count = m_ui->m_trajectoryColorComboBox->count();
 
  551   m_ui->m_trajectoryColorComboBox->setCurrentIndex(count-1);
 
  552   onTrajectoryColorComboBoxActivated(count-1);
 
  554   m_ui->m_opacityComboBox->addItem(title);
 
  555   count = m_ui->m_opacityComboBox->count();
 
  556   m_ui->m_opacityComboBox->setCurrentIndex(count-1);
 
  557   onOpacityComboBoxActivated(count-1);
 
  562   if(m_animationScene->items().isEmpty())
 
  563     m_ui->m_durationSpinBox->setValue(m_duration);
 
  565   int state = m_parallelAnimation->state();
 
  566   m_currentTime = m_parallelAnimation->currentTime();
 
  567   if(state == QAbstractAnimation::Running)
 
  568     onPlayToolButtonnClicked();
 
  573     QMessageBox::information(
this, 
"Error", 
"Load error");
 
  574     m_itemList.pop_back();
 
  578   calculateSpatialExtent();
 
  579   calculateTemporalExtent();
 
  581   setDuration(m_duration);
 
  582   setDirection(m_direction);
 
  583   if(state == QAbstractAnimation::Running)
 
  585     onPlayToolButtonnClicked();
 
  586     m_parallelAnimation->setCurrentTime(m_currentTime);
 
  588   if(m_animationScene->items().isEmpty() == 
false)
 
  590     m_ui->m_durationSpinBox->setEnabled(
true);
 
  591     m_ui->m_settingsToolButton->setEnabled(
true);
 
  592     m_ui->m_playToolButton->setEnabled(
true);
 
  593     m_ui->m_stopToolButton->setEnabled(
true);
 
  594     if(m_parallelAnimation->state() == QAbstractAnimation::Paused)
 
  595       m_ui->m_dateTimeEdit->setEnabled(
true);
 
  597       m_ui->m_dateTimeEdit->setEnabled(
false);
 
  602   m_ui->m_opacityComboBox->addItem(dir.dirName());
 
  603   int count = m_ui->m_opacityComboBox->count();
 
  604   m_ui->m_opacityComboBox->setCurrentIndex(count-1);
 
  605   onOpacityComboBoxActivated(count-1);
 
  610   PixmapItem* pi = getTemporalImageCtlParameters(path);
 
  614   m_animationScene->addItem(pi);
 
  617   animation->setEasingCurve(QEasingCurve::Linear);
 
  618   m_parallelAnimation->addAnimation(animation);
 
  620   QString suffix = 
"." + pi->
m_suffix;
 
  621   QStringList nameFilter;
 
  622   nameFilter.append(
"*" + suffix);
 
  624   QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
 
  625   size_t count = files.count();
 
  634   for(
size_t i = 0; i < count; ++i)
 
  636     QString f = files[i];
 
  648   for(
size_t i = 0; i < count; ++i)
 
  651       pos -= QPointF(w, h);
 
  653       pos += QPointF(w, h);
 
  666   QList<QGraphicsItem*> list = m_animationScene->items();
 
  667   QList<QGraphicsItem*>::iterator it;
 
  669   for(it = list.begin(); it != list.end(); ++it)
 
  677       m_spatialExtent.Union(e);
 
  682   QRect rect(m_spatialExtent.m_llx, m_spatialExtent.m_lly, m_spatialExtent.getWidth(), m_spatialExtent.getHeight());
 
  683   m_animationScene->setSceneRect(rect);
 
  684   m_animationView->setSceneRect(rect);
 
  691   QList<QGraphicsItem*> list = m_animationScene->items();
 
  692   QList<QGraphicsItem*>::iterator it = list.begin();
 
  701   while(it != list.end())
 
  705     if(initial < t_initial)
 
  716   m_temporalAnimationExtent = tp;
 
  718   for(it = list.begin(); it != list.end(); ++it)
 
  729   m_ui->m_dateTimeEdit->setMinimumDateTime(minimum);
 
  730   m_ui->m_dateTimeEdit->setMaximumDateTime(maximum);
 
  736   QVector<te::dt::TimePeriod> 
times;
 
  737   QVector<te::gm::Envelope> envelopes;
 
  738   QList<QGraphicsItem*> list = m_animationScene->items();
 
  739   QList<QGraphicsItem*>::iterator it;
 
  740   for(it = list.begin(); it != list.end(); ++it)
 
  747   if(m_parallelAnimation->state() == QAbstractAnimation::Stopped)
 
  748     m_parallelAnimation->clear();
 
  751     int cur = m_parallelAnimation->currentTime();
 
  752     m_parallelAnimation->stop();
 
  753     m_parallelAnimation->clear();
 
  754     m_parallelAnimation->setCurrentTime(cur);
 
  757   for(it = list.begin(), i = 0 ; it != list.end(); ++it, ++i)
 
  765     m_parallelAnimation->addAnimation(a);
 
  774   boost::posix_time::ptime iTime = m_temporalAnimationExtent.getInitialTimeInstant().getTimeInstant();
 
  775   boost::posix_time::ptime fTime = m_temporalAnimationExtent.getFinalTimeInstant().getTimeInstant();
 
  776   boost::posix_time::time_duration diff = fTime - iTime;
 
  777   double totalSeconds = diff.total_seconds();
 
  779   diff = pTime - iTime;
 
  780   double seconds = diff.total_seconds();
 
  782   double t = seconds / totalSeconds;
 
  790   double t = m_parallelAnimation->currentTime();
 
  791   double trel = t / (double)m_duration;
 
  794   boost::posix_time::ptime iTime = m_temporalAnimationExtent.getInitialTimeInstant().
getTimeInstant();
 
  795   boost::posix_time::ptime fTime = m_temporalAnimationExtent.getFinalTimeInstant().getTimeInstant();
 
  796   boost::posix_time::time_duration diff = fTime - iTime;
 
  797   double totalSeconds = diff.total_seconds();
 
  799   int secs = qRound(totalSeconds * trel);
 
  800   boost::posix_time::time_duration td = boost::posix_time::seconds(secs);
 
  801   boost::posix_time::ptime time = iTime + td;
 
  812   if(m_ui->m_dateTimeEdit->isEnabled() == 
false)
 
  813     t = getTimeInstant();
 
  816     QDateTime d = m_ui->m_dateTimeEdit->dateTime();
 
  821   QList<QGraphicsItem*> list = m_animationScene->items();
 
  822   QList<QGraphicsItem*>::iterator it;
 
  824   if(m_animationScene->m_numberOfPixmaps) 
 
  827     for(it = list.begin(); it != list.end(); ++it)
 
  830       if(ai->pixmap().isNull())
 
  835         if(t < tini || t > tfim)
 
  840         drawPixmapItem(pi, drect, painter);
 
  845   if(m_animationScene->m_numberOfTrajectories) 
 
  848     QPixmap* pixt = ((
AnimationScene*)(m_animationScene))->m_trajectoryPixmap;
 
  849     painter->drawPixmap(0, 0, *pixt);
 
  852     for(it = list.begin(); it != list.end(); ++it)
 
  855       if(ai->pixmap().isNull() == 
false)
 
  860         if(t < tini || t > tfim)
 
  865         QRect r = ai->pixmap().rect();
 
  867         QRect dr = m_display->rect();
 
  885   m_direction = direction;
 
  886   m_parallelAnimation->setDirection(m_direction);
 
  888   unsigned int count = m_parallelAnimation->animationCount();
 
  889   for(
unsigned int i = 0; i < count; ++i)
 
  891     QPropertyAnimation* a = (QPropertyAnimation*)m_parallelAnimation->animationAt(i);
 
  900     m_animationScene->setDuration(duration);
 
  905   m_animationScene->createNewPixmap();
 
  910   m_animationScene->createNewPixmap();
 
  911   m_animationScene->setMatrix();
 
  912   m_animationScene->draw(m_currentTime);
 
  917   m_animationScene->setAutomaticPan(title);
 
  922   if(obj == m_ui->m_forwardColorPushButton)
 
  924     if(e->type() == QEvent::Paint)
 
  926       QPainter painter(m_ui->m_forwardColorPushButton);
 
  927       QBrush brush(m_ui->m_forwardColorPushButton->palette().color(QPalette::Window));
 
  928       painter.fillRect(m_ui->m_forwardColorPushButton->rect(), brush);
 
  931     else if(e->type() == QEvent::MouseButtonPress)
 
  933       QColor cor = QColorDialog::getColor(m_ui->m_forwardColorPushButton->palette().color(QPalette::Window), 
this, 
"Forward Color", QColorDialog::ShowAlphaChannel);
 
  934       if(cor.isValid() == 
false)
 
  936       else if(cor == m_ui->m_forwardColorPushButton->palette().color(QPalette::Window))
 
  939       m_ui->m_forwardColorPushButton->setPalette(QPalette(cor));
 
  941       QString titlecb = m_ui->m_trajectoryColorComboBox->currentText();
 
  943       QList<QGraphicsItem*> list = m_animationScene->items();
 
  944       QList<QGraphicsItem*>::iterator it;
 
  947       for(it = list.begin(); it != list.end(); ++it)
 
  960   else if(obj == m_ui->m_backwardColorPushButton)
 
  962     if(e->type() == QEvent::Paint)
 
  964       QPainter painter(m_ui->m_backwardColorPushButton);
 
  965       QBrush brush(m_ui->m_backwardColorPushButton->palette().color(QPalette::Window));
 
  966       painter.fillRect(m_ui->m_backwardColorPushButton->rect(), brush);
 
  969     else if(e->type() == QEvent::MouseButtonPress)
 
  971       QColor cor = QColorDialog::getColor(m_ui->m_backwardColorPushButton->palette().color(QPalette::Window), 
this, 
"Forward Color", QColorDialog::ShowAlphaChannel);
 
  972       if(cor.isValid() == 
false)
 
  974       else if(cor == m_ui->m_backwardColorPushButton->palette().color(QPalette::Window))
 
  977       m_ui->m_backwardColorPushButton->setPalette(QPalette(cor));
 
  979       QString titlecb = m_ui->m_trajectoryColorComboBox->currentText();
 
  981       QList<QGraphicsItem*> list = m_animationScene->items();
 
  982       QList<QGraphicsItem*>::iterator it;
 
  985       for(it = list.begin(); it != list.end(); ++it)
 
  999   if(e->type() == QEvent::Close)
 
 1004       onStopToolButtonnClicked();
 
 1005       m_display->update();
 
 1011     else if(obj == m_animationView)
 
 1017   else if(e->type() == QEvent::Show)
 
 1022   else if(e->type() == QEvent::Enter)
 
 1026       if(graphicsEffect())
 
 1027         graphicsEffect()->setEnabled(
false);
 
 1031   else if(e->type() == QEvent::Leave)
 
 1035       if(graphicsEffect())
 
 1036         graphicsEffect()->setEnabled(
true);
 
 1040   else if(e->type() == QEvent::MouseButtonRelease)
 
 1042     if(obj == m_ui->m_dateTimeEdit)
 
 1044       QDateTime d = m_ui->m_dateTimeEdit->dateTime();
 
 1045       if(d == m_oldQDateTime)
 
 1047         d = fixDateTimeEdit(m_ui->m_dateTimeEdit, d);
 
 1048         m_ui->m_dateTimeEdit->setDateTime(d);
 
 1053     else if(obj == m_ui->m_initialAnimationDateTimeEdit)
 
 1055       QDateTime d = m_ui->m_initialAnimationDateTimeEdit->dateTime();
 
 1056       if(d == m_oldIQDateTime)
 
 1058         d = fixDateTimeEdit(m_ui->m_initialAnimationDateTimeEdit, d);
 
 1059         m_ui->m_initialAnimationDateTimeEdit->setDateTime(d);
 
 1061       m_oldIQDateTime = d;
 
 1064     else if(obj == m_ui->m_finalAnimationDateTimeEdit)
 
 1066       QDateTime d = m_ui->m_finalAnimationDateTimeEdit->dateTime();
 
 1067       if(d == m_oldFQDateTime)
 
 1069         d = fixDateTimeEdit(m_ui->m_finalAnimationDateTimeEdit, d);
 
 1070         m_ui->m_finalAnimationDateTimeEdit->setDateTime(d);
 
 1072       m_oldFQDateTime = d;
 
 1077   return QWidget::eventFilter(obj, e);
 
 1082   if(m_ui->m_propertyWidget->isHidden())
 
 1084     showPropertySection(
true);
 
 1088     showPropertySection(
false);
 
 1093   int state = m_parallelAnimation->state();
 
 1094   if(state == QAbstractAnimation::Running)
 
 1096     m_ui->m_playToolButton->setIcon(QIcon::fromTheme(
"media-playback-start"));
 
 1097     m_parallelAnimation->pause();
 
 1098     m_ui->m_dateTimeEdit->setEnabled(
true);
 
 1102     m_ui->m_playToolButton->setIcon(QIcon::fromTheme(
"media-playback-pause"));
 
 1103     if(m_parallelAnimation->direction() == QAbstractAnimation::Forward)
 
 1105       if(m_ui->m_TemporalHorizontalSlider->value() == m_maxSliderValue)
 
 1107         m_parallelAnimation->setCurrentTime(0);
 
 1108         m_ui->m_TemporalHorizontalSlider->setValue(0);
 
 1113       if(m_ui->m_TemporalHorizontalSlider->value() == 0)
 
 1115         m_parallelAnimation->setCurrentTime(m_duration);
 
 1116         m_ui->m_TemporalHorizontalSlider->setValue(m_maxSliderValue);
 
 1119     m_ui->m_dateTimeEdit->setEnabled(
false);
 
 1126   int state = m_parallelAnimation->state();
 
 1127   m_parallelAnimation->stop();
 
 1128   m_ui->m_dateTimeEdit->setEnabled(
false);
 
 1129   m_ui->m_playToolButton->setIcon(QIcon::fromTheme(
"media-playback-start"));
 
 1136       m_comingBack = 
false;
 
 1140   if(m_finished == 
false)
 
 1142     if(m_parallelAnimation->direction() == QAbstractAnimation::Forward)
 
 1144       m_ui->m_TemporalHorizontalSlider->setValue(0);
 
 1145       m_parallelAnimation->setCurrentTime(0);
 
 1149       m_ui->m_TemporalHorizontalSlider->setValue(m_maxSliderValue);
 
 1150       m_parallelAnimation->setCurrentTime(m_parallelAnimation->duration());
 
 1153     m_display->update();
 
 1160   int state = m_parallelAnimation->state();
 
 1161   if(state == QAbstractAnimation::Running)
 
 1163     m_parallelAnimation->pause();
 
 1166     m_display->update();
 
 1167     m_parallelAnimation->resume();
 
 1173     m_display->update();
 
 1179   int state = m_parallelAnimation->state();
 
 1180   if(state == QAbstractAnimation::Running)
 
 1183     calculateSpatialExtent();
 
 1186     m_display->update();
 
 1187     m_parallelAnimation->start();
 
 1192     calculateSpatialExtent();
 
 1195     m_display->update();
 
 1201   int state = m_parallelAnimation->state();
 
 1202   if(state == QAbstractAnimation::Stopped)
 
 1205     m_parallelAnimation->start();
 
 1207   else if(state == QAbstractAnimation::Paused)
 
 1209     m_parallelAnimation->resume();
 
 1215   int oldCurTime = m_parallelAnimation->currentTime();
 
 1217   if(m_parallelAnimation->state() == QAbstractAnimation::Stopped)
 
 1219     onStopToolButtonnClicked();
 
 1223   double v = (double)value / (
double)m_maxSliderValue;
 
 1225   int curTime = qRound(v * (
double)m_parallelAnimation->duration());
 
 1229   else if(curTime == m_parallelAnimation->duration())
 
 1230     curTime = m_parallelAnimation->duration() - 1;
 
 1233   if(m_goAndBack == 
true)
 
 1235     if(m_comingBack == 
false && m_direction == QAbstractAnimation::Forward && curTime < oldCurTime)
 
 1237     else if(m_comingBack == 
false && m_direction == QAbstractAnimation::Backward && curTime > oldCurTime)
 
 1239     else if(m_comingBack == 
true && m_direction == QAbstractAnimation::Forward && curTime < oldCurTime)
 
 1241     else if(m_comingBack == 
true && m_direction == QAbstractAnimation::Backward && curTime > oldCurTime)
 
 1246     if(m_direction == QAbstractAnimation::Forward && curTime < oldCurTime)
 
 1248     else if(m_direction == QAbstractAnimation::Backward && curTime > oldCurTime)
 
 1252   m_parallelAnimation->setCurrentTime(curTime);
 
 1254     this->erase(curTime);
 
 1256   m_currentTime = curTime;
 
 1257   if(m_parallelAnimation->state() == QAbstractAnimation::Paused)
 
 1258     m_display->update();
 
 1263   QDateTime qdatetime(qdate, qtime);
 
 1264   m_ui->m_dateTimeEdit->setDateTime(qdatetime);
 
 1269   QAbstractAnimation::Direction direction = m_parallelAnimation->direction();
 
 1270   if(direction == QAbstractAnimation::Forward)
 
 1271     direction = QAbstractAnimation::Backward;
 
 1273     direction = QAbstractAnimation::Forward;
 
 1274   setDirection(direction);
 
 1283     m_comingBack = !m_comingBack;
 
 1297       if(m_comingBack == 
false)
 
 1298         onStopToolButtonnClicked();
 
 1308       onStopToolButtonnClicked();
 
 1314   m_currentTime = m_parallelAnimation->currentTime();
 
 1315   int v = qRound((
double)m_maxSliderValue * (
double)m_currentTime/(
double)m_duration);
 
 1317   m_ui->m_TemporalHorizontalSlider->setValue(v);
 
 1319   updateTimeTextEdit();
 
 1324   if(m_ui->m_dateTimeEdit->isEnabled() == 
false && m_animationScene->items().isEmpty() == 
false)
 
 1329     QDateTime qdatetime(qdate, qtime);
 
 1330     m_ui->m_dateTimeEdit->setDateTime(qdatetime);
 
 1336   emit deleteTimeSliderWidget();
 
 1341   QString title = QInputDialog::getText(
this, 
"Add Item", 
"title");
 
 1349   if(title == 
"eta5km"|| title == 
"hidro")
 
 1350     path = 
"C:/lixo/FORECAST/" + title;
 
 1352     path = 
"C:/lixo/TemporalImages/" + title;
 
 1354   addTemporalImages(path);
 
 1564   QList<QGraphicsItem*> list = m_animationScene->items();
 
 1565   QList<QGraphicsItem*>::iterator it;
 
 1567   for(it = list.begin(); it != list.end(); ++it)
 
 1571     int r = QMessageBox::question(
this, 
"Remove Item", 
"Remove " + title, QMessageBox::Ok, QMessageBox::No);
 
 1572     if(r == QMessageBox::Ok)
 
 1574       removeComboItem(ai);
 
 1575       if(list.count() == 1)
 
 1577         onStopToolButtonnClicked();
 
 1578         m_animationScene->removeItem(ai);
 
 1579         m_parallelAnimation->removeAnimation(ai->
m_animation);
 
 1582         m_ui->m_TemporalHorizontalSlider->setValue(0);
 
 1583         m_parallelAnimation->setCurrentTime(0);
 
 1584         m_ui->m_settingsToolButton->setEnabled(
false);
 
 1585         m_ui->m_playToolButton->setEnabled(
false);
 
 1586         m_ui->m_stopToolButton->setEnabled(
false);
 
 1587         m_ui->m_durationSpinBox->setEnabled(
false);
 
 1588         m_ui->m_dateTimeEdit->setEnabled(
false);
 
 1589         showPropertySection(
false);
 
 1590         m_display->update();
 
 1595       bool running = 
false;
 
 1596       int state = m_parallelAnimation->state();
 
 1597       if(state == QAbstractAnimation::Running)
 
 1600         onPlayToolButtonnClicked();
 
 1603       m_currentTime = m_parallelAnimation->currentTime();
 
 1604       m_animationScene->removeItem(ai);
 
 1605       m_parallelAnimation->removeAnimation(ai->
m_animation);
 
 1606       if(ai->pixmap().isNull() == 
false)
 
 1608         if(m_animationScene->m_numberOfTrajectories)
 
 1610           m_animationScene->m_trajectoryPixmap->fill(Qt::transparent);
 
 1617       calculateSpatialExtent();
 
 1618       calculateTemporalExtent();
 
 1620       setDuration(m_duration);
 
 1621       setDirection(m_direction);
 
 1625         onPlayToolButtonnClicked();
 
 1626         m_parallelAnimation->setCurrentTime(m_currentTime);
 
 1637   int state = m_parallelAnimation->state();
 
 1638   if(state == QAbstractAnimation::Running)
 
 1639     onPlayToolButtonnClicked();
 
 1641   QList<QGraphicsItem*> list = m_animationScene->items();
 
 1642   int i = list.indexOf(item);
 
 1646   QList<QGraphicsItem*>::iterator it = list.begin();
 
 1647   while(it != list.end())
 
 1650     m_animationScene->removeItem(ai);
 
 1653   while(list.isEmpty() == 
false)
 
 1656     m_animationScene->addItem(ai);
 
 1659   onPlayToolButtonnClicked();
 
 1664   int state = m_parallelAnimation->state();
 
 1665   if(state == QAbstractAnimation::Running)
 
 1666     onPlayToolButtonnClicked();
 
 1668   QList<QGraphicsItem*> list = m_animationScene->items();
 
 1669   int i = list.indexOf(item);
 
 1673   QList<QGraphicsItem*>::iterator it = list.begin();
 
 1674   while(it != list.end())
 
 1677     m_animationScene->removeItem(ai);
 
 1680   while(list.isEmpty() == 
false)
 
 1683     m_animationScene->addItem(ai);
 
 1686   onPlayToolButtonnClicked();
 
 1691   QList<QGraphicsItem*> list = m_animationScene->items();
 
 1692   QList<QGraphicsItem*>::iterator it;
 
 1694   for(it = list.begin(); it != list.end(); ++it)
 
 1698     int r = QMessageBox::question(
this, 
"Put To Front", 
"Animation Item: " + title, QMessageBox::Ok, QMessageBox::No);
 
 1699     if(r == QMessageBox::Ok)
 
 1709   QList<QGraphicsItem*> list = m_animationScene->items();
 
 1710   QList<QGraphicsItem*>::iterator it;
 
 1712   for(it = list.begin(); it != list.end(); ++it)
 
 1716     int r = QMessageBox::question(
this, 
"Put To Back", 
"Animation Item: " + title, QMessageBox::Ok, QMessageBox::No);
 
 1717     if(r == QMessageBox::Ok)
 
 1727   QList<QGraphicsItem*> list = m_animationScene->items();
 
 1728   QList<QGraphicsItem*>::iterator it;
 
 1729   for(it = list.begin(); it != list.end(); ++it)
 
 1732     if(ai->pixmap().isNull() == 
false)
 
 1736   if(m_erasePerfectly)
 
 1738     m_parallelAnimation->setCurrentTime(curTime);
 
 1742     m_parallelAnimation->setCurrentTime(curTime);
 
 1744   m_currentTime = curTime;
 
 1749   if(val == m_duration)
 
 1752   m_currentTime = m_parallelAnimation->currentTime();
 
 1753   double f = double(m_currentTime) / (double)m_duration;
 
 1755   int step = m_ui->m_durationSpinBox->singleStep();
 
 1760   if(v == 0 || v == m_duration + step || v == m_duration - step)
 
 1766       else if(v > step*10)
 
 1769         v = m_duration + step;
 
 1772     else if(step == 1000)
 
 1777         v = m_duration - step;
 
 1779       else if(v > step*10)
 
 1782         v = m_duration + step;
 
 1785     else if(step == 10000)
 
 1790         v = m_duration - step;
 
 1792       else if(v > step*10)
 
 1795         v = m_duration + step;
 
 1798     else if(step == 100000)
 
 1803         v = m_duration - step;
 
 1805       else if(v > step*10)
 
 1808         v = m_duration + step;
 
 1811     else if(step == 1000000)
 
 1816         v = m_duration - step;
 
 1818       else if(v > step*10)
 
 1821         v = m_duration + step;
 
 1825     m_duration = (v / step) * step;
 
 1826     m_ui->m_durationSpinBox->setValue(m_duration);
 
 1827     m_ui->m_durationSpinBox->setSingleStep(step);
 
 1832   bool running = 
false;
 
 1833   if(m_parallelAnimation->state() == QAbstractAnimation::Running)
 
 1836     onPlayToolButtonnClicked();
 
 1839   m_currentTime = qRound(f * (
double)m_duration);
 
 1840   m_animationScene->m_trajectoryPixmap->fill(Qt::transparent);
 
 1841   setDuration(m_duration);
 
 1842   m_parallelAnimation->setCurrentTime(m_currentTime);
 
 1845     onPlayToolButtonnClicked();
 
 1850   if(m_ui->m_dateTimeEdit->isEnabled() == 
false)
 
 1854   int oldCurTime = m_parallelAnimation->currentTime();
 
 1857   unsigned long totalSecs =  m_temporalAnimationExtent.getTimePeriod().length().total_seconds();
 
 1859   te::dt::Date date(t.date().year(), t.date().month(), t.date().day());
 
 1864   unsigned long secs =  tp.
getTimePeriod().length().total_seconds();
 
 1866   double v = (double)secs / (
double)totalSecs;
 
 1867   int curTime = qRound(v * (
double)m_parallelAnimation->duration());
 
 1871   else if(curTime == m_parallelAnimation->duration())
 
 1872     curTime = m_parallelAnimation->duration() - 1;
 
 1875   if(m_goAndBack == 
true)
 
 1877     if(m_comingBack == 
false && m_direction == QAbstractAnimation::Forward && curTime < oldCurTime)
 
 1879     else if(m_comingBack == 
false && m_direction == QAbstractAnimation::Backward && curTime > oldCurTime)
 
 1881     else if(m_comingBack == 
true && m_direction == QAbstractAnimation::Forward && curTime < oldCurTime)
 
 1883     else if(m_comingBack == 
true && m_direction == QAbstractAnimation::Backward && curTime > oldCurTime)
 
 1888     if(m_direction == QAbstractAnimation::Forward && curTime < oldCurTime)
 
 1890     else if(m_direction == QAbstractAnimation::Backward && curTime > oldCurTime)
 
 1894   m_currentTime = curTime;
 
 1895   m_parallelAnimation->setCurrentTime(curTime);
 
 1897     this->erase(curTime);
 
 1899   if(m_parallelAnimation->state() == QAbstractAnimation::Paused)
 
 1900     m_display->update();
 
 1906   QDateTimeEdit::Section section = dte->currentSection();
 
 1907   if(section == QDateTimeEdit::SecondSection)
 
 1909     int sec = t.time().second();
 
 1915   else if(section == QDateTimeEdit::MinuteSection)
 
 1917     int min = t.time().minute();
 
 1923   else if(section == QDateTimeEdit::HourSection)
 
 1925     int hour = t.time().hour();
 
 1927       t = t.addSecs(-3600);
 
 1929       t = t.addSecs(3600);
 
 1931   else if(section == QDateTimeEdit::DaySection)
 
 1933     int day = t.date().day();
 
 1939   else if(section == QDateTimeEdit::MonthSection)
 
 1941     int month = t.date().month();
 
 1943       t = t.addMonths(-1);
 
 1957   if(dwrect.intersects(rec))
 
 1959     QRect r = pi->
m_matrix.mapRect(rec).toRect();
 
 1963       painter->drawImage(r, *ima);
 
 1966       QSize size = ima->size();
 
 1967       int width = size.width();
 
 1968       int height = size.height();
 
 1970       if(ima->format() == QImage::Format_ARGB32)
 
 1972         for(
int i = 0; i < height; ++i)
 
 1974           unsigned char* u = ima->scanLine(i);
 
 1975           for(
int j = 0; j < width; ++j)
 
 1977             QRgb* v = (QRgb*)(u + (j << 2));
 
 1979               *v =  qRgba(qRed(*v), qGreen(*v), qBlue(*v) , pi->
m_opacity);
 
 1982         painter->drawImage(r, *ima);
 
 1986         QImage img(size, QImage::Format_ARGB32);
 
 1987         for(
int i = 0; i < height; ++i)
 
 1989           unsigned char* u = ima->scanLine(i);
 
 1990           unsigned char* uu = img.scanLine(i);
 
 1992           for(
int j = 0; j < width; ++j)
 
 1994             QRgb* v = (QRgb*)(u + (j << 2));
 
 1995             QRgb* uv = (QRgb*)(uu + (j << 2));
 
 1997               *uv =  qRgba(qRed(*v), qGreen(*v), qBlue(*v) , pi->
m_opacity);
 
 2000         painter->drawImage(r, img);
 
 2010     painter->drawPixmap(pos, t->pixmap());
 
 2013     QSize size = t->pixmap().size();
 
 2014     int width = size.width();
 
 2015     int height = size.height();
 
 2016     QImage ima = t->pixmap().toImage();
 
 2018     if(ima.format() == QImage::Format_ARGB32)
 
 2020       for(
int i = 0; i < height; ++i)
 
 2022         unsigned char* u = ima.scanLine(i);
 
 2023         for(
int j = 0; j < width; ++j)
 
 2025           QRgb* v = (QRgb*)(u + (j << 2));
 
 2027             *v =  qRgba(255, 255, 255 , 0);
 
 2029             *v =  qRgba(qRed(*v), qGreen(*v), qBlue(*v) , t->
m_opacity);
 
 2032       painter->drawImage(pos, ima);
 
 2036       QImage img(size, QImage::Format_ARGB32);
 
 2037       for(
int i = 0; i < height; ++i)
 
 2039         unsigned char* u = ima.scanLine(i);
 
 2040         unsigned char* uu = img.scanLine(i);
 
 2042         for(
int j = 0; j < width; ++j)
 
 2044           QRgb* v = (QRgb*)(u + (j << 2));
 
 2045           QRgb* uv = (QRgb*)(uu + (j << 2));
 
 2047             *uv =  qRgba(255, 255, 255 , 0);
 
 2049             *uv =  qRgba(qRed(*v), qGreen(*v), qBlue(*v) , t->
m_opacity);
 
 2052       painter->drawImage(pos, img);
 
 2059   QString titlecb = m_ui->m_opacityComboBox->currentText();
 
 2061   QList<QGraphicsItem*> list = m_animationScene->items();
 
 2062   QList<QGraphicsItem*>::iterator it;
 
 2064   for(it = list.begin(); it != list.end(); ++it)
 
 2068     if(title.contains(titlecb))
 
 2071       m_display->update();
 
 2082   QDateTime qdatetimei(qdatei, qtimei);
 
 2083   m_ui->m_initialAnimationDateTimeEdit->setDateTime(qdatetimei);
 
 2088   QDateTime qdatetimef(qdatef, qtimef);
 
 2089   m_ui->m_finalAnimationDateTimeEdit->setDateTime(qdatetimef);
 
 2095   m_ui->m_initialAnimationDateTimeEdit->setMinimumDateTime(minimum);
 
 2101   m_ui->m_finalAnimationDateTimeEdit->setMaximumDateTime(maximum);
 
 2103   if(m_direction == QAbstractAnimation::Forward)
 
 2105     if(m_ui->m_forwardRadioButton->isChecked() == 
false)
 
 2106       m_ui->m_forwardRadioButton->toggle();
 
 2110     m_ui->m_loopCheckBox->setChecked(
true);
 
 2112     m_ui->m_goAndBackCheckBox->setChecked(
true);
 
 2188   QDateTime t = m_ui->m_initialAnimationDateTimeEdit->dateTime();
 
 2189   te::dt::Date date(t.date().year(), t.date().month(), t.date().day());
 
 2204   QDateTime t = m_ui->m_finalAnimationDateTimeEdit->dateTime();
 
 2205   te::dt::Date date(t.date().year(), t.date().month(), t.date().day());
 
 2268   QDateTime qdatetime(qdate, qtime);
 
 2269   m_ui->m_initialAnimationDateTimeEdit->setDateTime(qdatetime);
 
 2277   QDateTime qdatetime(qdate, qtime);
 
 2278   m_ui->m_finalAnimationDateTimeEdit->setDateTime(qdatetime);
 
 2283   if(b==
false && m_ui->m_propertyWidget->isHidden())
 
 2285   if(b==
true && m_ui->m_propertyWidget->isHidden()==
false)
 
 2288   int h = m_ui->m_propertyWidget->height();
 
 2292     m_ui->m_propertyWidget->hide();
 
 2293     resize(width(), height()-h);
 
 2297     m_ui->m_propertyWidget->show();
 
 2298     resize(width(), height()+h);
 
 2307   QDateTime qdatetimei(qdatei, qtimei);
 
 2308   QDateTime qdi = m_ui->m_initialAnimationDateTimeEdit->dateTime();
 
 2309   if(qdatetimei != qdi)
 
 2315   QDateTime qdatetimef(qdatef, qtimef);
 
 2316   QDateTime qdf = m_ui->m_finalAnimationDateTimeEdit->dateTime();
 
 2317   if(qdatetimef != qdf)
 
 2320   if(m_ui->m_forwardRadioButton->isChecked() && m_direction != QAbstractAnimation::Forward)
 
 2322   if(m_ui->m_forwardRadioButton->isChecked() == 
false && m_direction != QAbstractAnimation::Backward)
 
 2324   if(m_ui->m_loopCheckBox->isChecked() != m_loop)
 
 2326   if(m_ui->m_goAndBackCheckBox->isChecked() != m_goAndBack)
 
 2334   if(m_direction == QAbstractAnimation::Forward)
 
 2337       m_comingBack = 
false;
 
 2345   if(m_direction == QAbstractAnimation::Backward)
 
 2348       m_comingBack = 
false;
 
 2402   if(m_goAndBack != b)
 
 2407       m_comingBack = 
false;
 
 2418   if(ti > tf || ti == tf)
 
 2420     QMessageBox::warning(
this, 
"Time Extent Error", 
"Initial time can not be larger than the end time!", QMessageBox::Ok);
 
 2427   QDateTime qdatetimei(qdatei, qtimei);
 
 2428   QDateTime qdi = m_ui->m_initialAnimationDateTimeEdit->dateTime();
 
 2430   t = m_temporalAnimationExtent.getFinalTimeInstant();
 
 2433   QDateTime qdatetimef(qdatef, qtimef);
 
 2434   QDateTime qdf = m_ui->m_finalAnimationDateTimeEdit->dateTime();
 
 2435   if(qdatetimei == qdi && qdatetimef == qdf)
 
 2438   m_currentTime = m_parallelAnimation->currentTime();
 
 2439   int state = m_parallelAnimation->state();
 
 2440   if(state == QAbstractAnimation::Running)
 
 2441     onPlayToolButtonnClicked();
 
 2443   QDateTime dt = m_ui->m_dateTimeEdit->dateTime();
 
 2453   m_ui->m_dateTimeEdit->setMinimumDateTime(minimum);
 
 2454   m_ui->m_dateTimeEdit->setMaximumDateTime(maximum);
 
 2457   calculateSpatialExtent();
 
 2459   setDuration(m_duration);
 
 2460   setDirection(m_direction);
 
 2462   if(state == QAbstractAnimation::Running)
 
 2464     onPlayToolButtonnClicked();
 
 2465     m_parallelAnimation->setCurrentTime(m_currentTime);
 
 2466     m_parallelAnimation->start();
 
 2470     m_parallelAnimation->setCurrentTime(m_currentTime);
 
 2471     m_parallelAnimation->start();
 
 2472     if(state == QAbstractAnimation::Paused)
 
 2473       m_parallelAnimation->pause();   
 
 2476   if(tp == m_temporalAnimationExtent)
 
 2477     onDateTimeEditChanged(dt);
 
 2482   QString titlecb = m_ui->m_trajectoryColorComboBox->currentText();
 
 2484   QList<QGraphicsItem*> list = m_animationScene->items();
 
 2485   QList<QGraphicsItem*>::iterator it;
 
 2488   for(it = list.begin(); it != list.end(); ++it)
 
 2492     if(title == titlecb)
 
 2498   m_ui->m_forwardColorPushButton->setPalette(QPalette(ti->
m_forwardColor));
 
 2499   m_ui->m_forwardColorPushButton->update();
 
 2500   m_ui->m_backwardColorPushButton->setPalette(QPalette(ti->
m_backwardColor));
 
 2501   m_ui->m_backwardColorPushButton->update();
 
 2507   QString titlecb = m_ui->m_opacityComboBox->currentText();
 
 2509   QList<QGraphicsItem*> list = m_animationScene->items();
 
 2510   QList<QGraphicsItem*>::iterator it;
 
 2512   for(it = list.begin(); it != list.end(); ++it)
 
 2516     if(title.contains(titlecb))
 
 2519       m_ui->m_opacitySpinBox->setValue(op);
 
 2530   int index = m_ui->m_opacityComboBox->findText(title);
 
 2531   m_ui->m_opacityComboBox->removeItem(index);
 
 2532   onOpacityComboBoxActivated(m_ui->m_opacityComboBox->currentIndex());
 
 2534   index = m_ui->m_trajectoryColorComboBox->findText(title);
 
 2535   m_ui->m_trajectoryColorComboBox->removeItem(index);
 
 2536   onTrajectoryColorComboBoxActivated(m_ui->m_trajectoryColorComboBox->currentIndex());
 
 2541   QString file(fileName);
 
 2542   int ind = file.indexOf(
"_");
 
 2543   if(file.indexOf(
"_", ind+1) != -1)
 
 2544     ind = file.indexOf(
"_", ind+1);
 
 2545   file.remove(0, ind+1);
 
 2546   QString ano(file), mes(file), dia(file), hour(file), min(file);
 
 2547   ano.remove(4, ano.length()-4);
 
 2549   mes.remove(2, mes.length()-2);
 
 2551   dia.remove(2, dia.length()-2);
 
 2553   hour.remove(2, hour.length()-2);
 
 2555   min.remove(2, min.length()-2);
 
 2557   te::dt::Date date(ano.toInt(), mes.toInt(), dia.toInt());
 
 2564   if(m_animationScene->items().isEmpty())
 
 2565     m_ui->m_durationSpinBox->setValue(m_duration);
 
 2567   int state = m_parallelAnimation->state();
 
 2568   m_currentTime = m_parallelAnimation->currentTime();
 
 2569   if(state == QAbstractAnimation::Running)
 
 2570     onPlayToolButtonnClicked();
 
 2573   calculateSpatialExtent();
 
 2574   calculateTemporalExtent();
 
 2576   setDuration(m_duration);
 
 2577   setDirection(m_direction);
 
 2578   if(state == QAbstractAnimation::Running)
 
 2580     onPlayToolButtonnClicked();
 
 2581     m_parallelAnimation->setCurrentTime(m_currentTime);
 
 2583   if(m_animationScene->items().isEmpty() == 
false)
 
 2585     m_ui->m_durationSpinBox->setEnabled(
true);
 
 2586     m_ui->m_settingsToolButton->setEnabled(
true);
 
 2587     m_ui->m_playToolButton->setEnabled(
true);
 
 2588     m_ui->m_stopToolButton->setEnabled(
true);
 
 2589     if(m_parallelAnimation->state() == QAbstractAnimation::Paused)
 
 2590       m_ui->m_dateTimeEdit->setEnabled(
true);
 
 2592       m_ui->m_dateTimeEdit->setEnabled(
false);
 
 2596   m_ui->m_opacityComboBox->addItem(
"eta5km");
 
 2597   int count = m_ui->m_opacityComboBox->count();
 
 2598   m_ui->m_opacityComboBox->setCurrentIndex(count-1);
 
 2599   onOpacityComboBoxActivated(count-1);
 
 2604   if(m_animationScene->items().isEmpty())
 
 2605     m_ui->m_durationSpinBox->setValue(m_duration);
 
 2607   int state = m_parallelAnimation->state();
 
 2608   m_currentTime = m_parallelAnimation->currentTime();
 
 2609   if(state == QAbstractAnimation::Running)
 
 2610     onPlayToolButtonnClicked();
 
 2613   calculateSpatialExtent();
 
 2614   calculateTemporalExtent();
 
 2616   setDuration(m_duration);
 
 2617   setDirection(m_direction);
 
 2618   if(state == QAbstractAnimation::Running)
 
 2620     onPlayToolButtonnClicked();
 
 2621     m_parallelAnimation->setCurrentTime(m_currentTime);
 
 2623   if(m_animationScene->items().isEmpty() == 
false)
 
 2625     m_ui->m_durationSpinBox->setEnabled(
true);
 
 2626     m_ui->m_settingsToolButton->setEnabled(
true);
 
 2627     m_ui->m_playToolButton->setEnabled(
true);
 
 2628     m_ui->m_stopToolButton->setEnabled(
true);
 
 2629     if(m_parallelAnimation->state() == QAbstractAnimation::Paused)
 
 2630       m_ui->m_dateTimeEdit->setEnabled(
true);
 
 2632       m_ui->m_dateTimeEdit->setEnabled(
false);
 
 2636   m_ui->m_opacityComboBox->addItem(
"hidro");
 
 2637   int count = m_ui->m_opacityComboBox->count();
 
 2638   m_ui->m_opacityComboBox->setCurrentIndex(count-1);
 
 2639   onOpacityComboBoxActivated(count-1);
 
 2645   QString title = m_ui->m_trajectoryColorComboBox->currentText();
 
 2646   setAutomaticPan(title);
 
 2652   QString file(path + 
"/racc.ctl");
 
 2653   FILE* fp = fopen(file.toStdString().c_str(), 
"r");
 
 2657   fread(buf, 2000, 
sizeof(
char), fp);
 
 2659   QString ss(QString(buf).simplified());
 
 2662   if(!(ss.contains(
"undef ", Qt::CaseInsensitive) && ss.contains(
"title", Qt::CaseInsensitive) && 
 
 2663     ss.contains(
"xdef", Qt::CaseInsensitive) && ss.contains(
"ydef", Qt::CaseInsensitive) && 
 
 2664     ss.contains(
"linear", Qt::CaseInsensitive) && ss.contains(
"zdef", Qt::CaseInsensitive)))
 
 2675   size_t pos = ss.indexOf(
"UNDEF ", Qt::CaseInsensitive) + strlen(
"UNDEF "); 
 
 2677   pos = ss.indexOf(
"TITLE", Qt::CaseInsensitive);
 
 2679   pi->
m_undef = atoi(s.toStdString().c_str());
 
 2683   pos = ss.indexOf(
"XDEF ", Qt::CaseInsensitive) + strlen(
"XDEF ");
 
 2685   pos = ss.indexOf(
" ");
 
 2687   pi->
m_ncols = atoi(s.toStdString().c_str());
 
 2690   pos = ss.indexOf(
"LINEAR ", Qt::CaseInsensitive) + strlen(
"LINEAR ");
 
 2692   pos = ss.indexOf(
" ");
 
 2694   double llx = atof(s.toStdString().c_str()) - 360.;
 
 2696   pos = ss.indexOf(
"YDEF ", Qt::CaseInsensitive);
 
 2698   double resX = atof(s.toStdString().c_str());
 
 2702   pos = ss.indexOf(
"YDEF ", Qt::CaseInsensitive) + strlen(
"YDEF ");
 
 2704   pos = ss.indexOf(
" ");
 
 2706   pi->
m_nlines = atoi(s.toStdString().c_str());
 
 2709   pos = ss.indexOf(
"LINEAR ", Qt::CaseInsensitive) + strlen(
"LINEAR ");
 
 2711   pos = ss.indexOf(
" ");
 
 2713   double lly = atof(s.toStdString().c_str());
 
 2715   pos = ss.indexOf(
"ZDEF ", Qt::CaseInsensitive);
 
 2717   double resY = atof(s.toStdString().c_str());
 
 2720   double w = (double)pi->
m_ncols * resX;
 
 2721   double h = (
double)pi->
m_nlines * resY;
 
 2729   std::vector<std::pair<int, QColor> > tab;
 
 2731   tab.push_back(std::pair<int, QColor>(i+=3, QColor(2, 1, 201, 255)));
 
 2732   tab.push_back(std::pair<int, QColor>(i+=3, QColor(1, 71, 254, 255)));
 
 2733   tab.push_back(std::pair<int, QColor>(i+=3, QColor(3, 148, 250, 255)));
 
 2734   tab.push_back(std::pair<int, QColor>(i+=3, QColor(5, 200, 251, 255)));
 
 2735   tab.push_back(std::pair<int, QColor>(i+=3, QColor(2, 254, 233, 255)));
 
 2736   tab.push_back(std::pair<int, QColor>(i+=3, QColor(1, 254, 151, 255)));
 
 2737   tab.push_back(std::pair<int, QColor>(i+=3, QColor(2, 254, 4, 255)));
 
 2738   tab.push_back(std::pair<int, QColor>(i+=3, QColor(99, 254, 2, 255)));
 
 2739   tab.push_back(std::pair<int, QColor>(i+=3, QColor(200, 255, 1, 255)));
 
 2740   tab.push_back(std::pair<int, QColor>(i+=3, QColor(237, 255, 0, 255)));
 
 2741   tab.push_back(std::pair<int, QColor>(i+=3, QColor(251, 232, 2, 255)));
 
 2742   tab.push_back(std::pair<int, QColor>(i+=3, QColor(254, 199, 2, 255)));
 
 2743   tab.push_back(std::pair<int, QColor>(i+=3, QColor(252, 179, 2, 255)));
 
 2744   tab.push_back(std::pair<int, QColor>(i+=3, QColor(254, 147, 4, 255)));
 
 2745   tab.push_back(std::pair<int, QColor>(i+=3, QColor(253, 99, 2, 255)));
 
 2746   tab.push_back(std::pair<int, QColor>(i+=3, QColor(254, 1, 2, 255)));
 
 2747   tab.push_back(std::pair<int, QColor>(i+=3, QColor(254, 0, 49, 255)));
 
 2748   tab.push_back(std::pair<int, QColor>(i+=3, QColor(255, 5, 1, 255)));
 
 2756   QString file(path + 
"/Prec5km.ctl");
 
 2757   FILE* fp = fopen(file.toStdString().c_str(), 
"r");
 
 2761   fread(buf, 2000, 
sizeof(
char), fp);
 
 2763   QString ss(QString(buf).simplified());
 
 2766   if(!(ss.contains(
"undef ", Qt::CaseInsensitive) && ss.contains(
"xdef", Qt::CaseInsensitive) 
 
 2767     && ss.contains(
"ydef", Qt::CaseInsensitive) && ss.contains(
"linear", Qt::CaseInsensitive)
 
 2768     && ss.contains(
"zdef", Qt::CaseInsensitive)))
 
 2779   size_t pos = ss.indexOf(
"undef ", Qt::CaseInsensitive) + strlen(
"undef "); 
 
 2781   pos = ss.indexOf(
"xdef", Qt::CaseInsensitive);
 
 2783   pi->
m_undef = atof(s.toStdString().c_str());
 
 2787   pos = ss.indexOf(
"xdef ", Qt::CaseInsensitive) + strlen(
"xdef ");
 
 2789   pos = ss.indexOf(
" ");
 
 2791   pi->
m_ncols = atoi(s.toStdString().c_str());
 
 2794   pos = ss.indexOf(
"linear ", Qt::CaseInsensitive) + strlen(
"linear ");
 
 2796   pos = ss.indexOf(
" ");
 
 2798   double llx = atof(s.toStdString().c_str());
 
 2800   pos = ss.indexOf(
"ydef ", Qt::CaseInsensitive);
 
 2802   double resX = atof(s.toStdString().c_str());
 
 2806   pos = ss.indexOf(
"ydef ", Qt::CaseInsensitive) + strlen(
"ydef ");
 
 2808   pos = ss.indexOf(
" ");
 
 2810   pi->
m_nlines = atoi(s.toStdString().c_str());
 
 2813   pos = ss.indexOf(
"linear ", Qt::CaseInsensitive) + strlen(
"linear ");
 
 2815   pos = ss.indexOf(
" ");
 
 2817   double lly = atof(s.toStdString().c_str());
 
 2819   pos = ss.indexOf(
"zdef ", Qt::CaseInsensitive);
 
 2821   double resY = atof(s.toStdString().c_str());
 
 2824   double w = (double)pi->
m_ncols * resX;
 
 2825   double h = (
double)pi->
m_nlines * resY;
 
 2833   std::vector<std::pair<int, QColor> > tab;
 
 2835   tab.push_back(std::pair<int, QColor>(i+=1, QColor(2, 1, 201, 255)));
 
 2836   tab.push_back(std::pair<int, QColor>(i+=1, QColor(2, 18, 213, 255)));
 
 2837   tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 24, 220, 255)));
 
 2838   tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 36, 227, 255)));
 
 2839   tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 54, 240, 255)));
 
 2840   tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 71, 254, 255)));
 
 2841   tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 90, 252, 255)));
 
 2842   tab.push_back(std::pair<int, QColor>(i+=1, QColor(3, 106, 251, 255)));
 
 2843   tab.push_back(std::pair<int, QColor>(i+=1, QColor(3, 130, 253, 255)));
 
 2844   tab.push_back(std::pair<int, QColor>(i+=1, QColor(3, 148, 250, 255)));
 
 2845   tab.push_back(std::pair<int, QColor>(i+=1, QColor(3, 160, 250, 255)));
 
 2846   tab.push_back(std::pair<int, QColor>(i+=1, QColor(4, 174, 250, 255)));
 
 2847   tab.push_back(std::pair<int, QColor>(i+=1, QColor(4, 186, 250, 255)));
 
 2848   tab.push_back(std::pair<int, QColor>(i+=1, QColor(5, 200, 251, 255)));
 
 2849   tab.push_back(std::pair<int, QColor>(i+=1, QColor(5, 214, 246, 255)));
 
 2850   tab.push_back(std::pair<int, QColor>(i+=1, QColor(3, 227, 241, 255)));
 
 2851   tab.push_back(std::pair<int, QColor>(i+=1, QColor(3, 240, 237, 255)));
 
 2852   tab.push_back(std::pair<int, QColor>(i+=1, QColor(2, 254, 233, 255)));
 
 2853   tab.push_back(std::pair<int, QColor>(i+=1, QColor(2, 254, 212, 255)));
 
 2854   tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 254, 190, 255)));
 
 2855   tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 254, 170, 255)));
 
 2856   tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 254, 160, 255)));
 
 2857   tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 254, 151, 255)));
 
 2858   tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 254, 105, 255)));
 
 2859   tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 254, 72, 255)));
 
 2860   tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 254, 37, 255)));
 
 2861   tab.push_back(std::pair<int, QColor>(i+=1, QColor(2, 254, 4, 255)));
 
 2862   tab.push_back(std::pair<int, QColor>(i+=1, QColor(25, 254, 4, 255)));
 
 2863   tab.push_back(std::pair<int, QColor>(i+=1, QColor(56, 254, 3, 255)));
 
 2864   tab.push_back(std::pair<int, QColor>(i+=1, QColor(71, 254, 3, 255)));
 
 2865   tab.push_back(std::pair<int, QColor>(i+=1, QColor(99, 254, 2, 255)));
 
 2866   tab.push_back(std::pair<int, QColor>(i+=1, QColor(125, 254, 2, 255)));
 
 2867   tab.push_back(std::pair<int, QColor>(i+=1, QColor(150, 254, 2, 255)));
 
 2868   tab.push_back(std::pair<int, QColor>(i+=1, QColor(175, 254, 2, 255)));
 
 2869   tab.push_back(std::pair<int, QColor>(i+=1, QColor(200, 255, 1, 255)));
 
 2870   tab.push_back(std::pair<int, QColor>(i+=1, QColor(209, 255, 1, 255)));
 
 2871   tab.push_back(std::pair<int, QColor>(i+=1, QColor(218, 255, 1, 255)));
 
 2872   tab.push_back(std::pair<int, QColor>(i+=1, QColor(229, 255, 1, 255)));
 
 2873   tab.push_back(std::pair<int, QColor>(i+=1, QColor(237, 255, 0, 255)));
 
 2874   tab.push_back(std::pair<int, QColor>(i+=1, QColor(240, 248, 0, 255)));
 
 2875   tab.push_back(std::pair<int, QColor>(i+=1, QColor(244, 241, 0, 255)));
 
 2876   tab.push_back(std::pair<int, QColor>(i+=1, QColor(250, 237, 0, 255)));
 
 2877   tab.push_back(std::pair<int, QColor>(i+=1, QColor(251, 232, 2, 255)));
 
 2878   tab.push_back(std::pair<int, QColor>(i+=1, QColor(251, 226, 2, 255)));
 
 2879   tab.push_back(std::pair<int, QColor>(i+=1, QColor(252, 215, 2, 255)));
 
 2880   tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 208, 2, 255)));
 
 2881   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 199, 2, 255)));
 
 2882   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 194, 2, 255)));
 
 2883   tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 190, 2, 255)));
 
 2884   tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 184, 2, 255)));
 
 2885   tab.push_back(std::pair<int, QColor>(i+=1, QColor(252, 179, 2, 255)));
 
 2886   tab.push_back(std::pair<int, QColor>(i+=1, QColor(252, 172, 2, 255)));
 
 2887   tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 164, 2, 255)));
 
 2888   tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 155, 2, 255)));
 
 2889   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 147, 4, 255)));
 
 2890   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 136, 4, 255)));
 
 2891   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 125, 3, 255)));
 
 2892   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 112, 3, 255)));
 
 2893   tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 99, 2, 255)));
 
 2894   tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 75, 2, 255)));
 
 2895   tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 50, 2, 255)));
 
 2896   tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 25, 2, 255)));
 
 2897   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 1, 2, 255)));
 
 2898   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 1, 12, 255)));
 
 2899   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 1, 25, 255)));
 
 2900   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 1, 37, 255)));
 
 2901   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 0, 49, 255)));
 
 2902   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 2, 37, 255)));
 
 2903   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 3, 25, 255)));
 
 2904   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 4, 12, 255)));
 
 2905   tab.push_back(std::pair<int, QColor>(i+=1, QColor(255, 5, 1, 255)));
 
 2912   QString path = pi->
m_dir.absolutePath() + 
"/";
 
 2915   QString baseName = fi.baseName();
 
 2918   if(pi->
m_suffix == 
".bin" && baseName == 
"racc")
 
 2920     size_t nchars = pi->
m_ncols * 2;
 
 2921     uchar* buf = 
new uchar[nchars];
 
 2922     FILE* fp = fopen(file.toStdString().c_str(), 
"rb");
 
 2924     ima->fill(Qt::transparent);
 
 2928     for(
size_t j = 0; j < pi->
m_nlines; ++j)
 
 2930       uchar* u = ima->scanLine(j);
 
 2931       fread(buf, nchars, 
sizeof(
char), fp);
 
 2932       for(
size_t i = 0; i < pi->
m_ncols; i++)
 
 2934         uc[0] = *(buf + (i<<1));
 
 2935         uc[1] = *(buf + (1+(i<<1)));
 
 2936         ushort b = *(ushort*)uc;
 
 2940           QRgb* v = (QRgb*)(u + (i << 2));
 
 2941           *v = qRgba(pi->
m_lut[b].red(), pi->
m_lut[b].green(), pi->
m_lut[b].blue(), 255);
 
 2948   else if(pi->
m_suffix == 
".bin" && baseName.contains(
"Prec5km"))
 
 2950     QString auxFile(file);
 
 2951     size_t pos = auxFile.indexOf(baseName);
 
 2952     auxFile.remove(0, pos);
 
 2953     pos = auxFile.indexOf(
"_");
 
 2954     size_t pp = auxFile.indexOf(
".bin");
 
 2955     int offset = atoi(auxFile.mid(pos+1, pp-pos+1).toStdString().c_str());
 
 2958     auxFile.remove(pos, auxFile.length()-pos);
 
 2959     auxFile = path + auxFile + pi->
m_suffix;
 
 2961     size_t nchars = pi->
m_ncols * 4;
 
 2962     uchar* buf = 
new uchar[nchars];
 
 2963     FILE* fp = fopen(auxFile.toStdString().c_str(), 
"rb");
 
 2964     fseek(fp, offset, SEEK_SET);
 
 2965     fseek(fp, 4, SEEK_CUR); 
 
 2967     ima->fill(Qt::transparent);
 
 2971     for(
size_t j = 0; j < pi->
m_nlines; ++j)
 
 2973       uchar* u = ima->scanLine(pi->
m_nlines-1-j); 
 
 2974       fread(buf, nchars, 
sizeof(
char), fp);
 
 2976       for(
size_t i = 0; i < pi->
m_ncols; i++)
 
 2978         uc[0] = *(buf + (i<<2));
 
 2979         uc[1] = *(buf + (1+(i<<2)));
 
 2980         uc[2] = *(buf + (2+(i<<2)));
 
 2981         uc[3] = *(buf + (3+(i<<2)));
 
 2982         float b = *(
float*)uc;
 
 2985           uchar a = (uchar) (b * 10000. + .5);
 
 2986           QRgb* v = (QRgb*)(u + (i << 2));
 
 2987           *v = qRgba(pi->
m_lut[a].red(), pi->
m_lut[a].green(), pi->
m_lut[a].blue(), 255);
 
 2995     ima = 
new QImage(file);
 
 3004   QString d = dir.dirName();
 
 3005   QStringList nameFilter;
 
 3006   nameFilter.append(
"*.ctl");
 
 3007   QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
 
 3008   QString ctlFile = files.first();
 
 3010   if(ctlFile == 
"racc.ctl")
 
 3011     pi = getHidroMetadata(path);
 
 3012   else if(ctlFile == 
"Prec5km.ctl")
 
 3013     pi = getEtaMetadata(path);
 
 3017     nameFilter.append(
"S11*.jpg");
 
 3018     QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
 
 3019     if(files.empty() == 
false && files.first().length() == 26)
 
 3020       pi = getGoesMetadata(path);
 
 3022       pi = getTemporalImageMetadata(path);
 
 3030   PixmapItem* pi = getHidroCtlParameters(path);
 
 3034   m_animationScene->addItem(pi);
 
 3037   animation->setEasingCurve(QEasingCurve::Linear);
 
 3038   m_parallelAnimation->addAnimation(animation);
 
 3040   QStringList nameFilter;
 
 3041   nameFilter.append(
"*.bin");
 
 3043   QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
 
 3044   size_t count = files.count();
 
 3053   for(
size_t i = 0; i < count; ++i)
 
 3055     QString f = files[i];
 
 3056     t = getHidroTime(f);
 
 3069   for(
size_t i = 0; i < count; ++i)
 
 3072       pos -= QPointF(dw, dh);
 
 3074       pos += QPointF(dw, dh);
 
 3089   m_animationScene->addItem(pi);
 
 3092   animation->setEasingCurve(QEasingCurve::Linear);
 
 3093   m_parallelAnimation->addAnimation(animation);
 
 3095   QStringList nameFilter;
 
 3096   nameFilter.append(
"*.bin");
 
 3098   QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
 
 3099   size_t count = files.count();
 
 3105   tf = 
te::dt::TimeInstant(tf.getTimeInstant() + boost::posix_time::seconds(60*60*24*3 - 3600));
 
 3111   for(
size_t i = 0; i < count; ++i)
 
 3113     QString f = files[i];
 
 3114     QFileInfo fi(path + 
"/" + f);
 
 3115     QString baseName = fi.baseName();
 
 3119       tnext = getEtaTime(files[i+1]);
 
 3124     while((t < tnext || t == tnext) && n <= 72)
 
 3129       fname = path + 
"/" + baseName + 
"_" + sn + 
"." + fi.suffix();
 
 3134   size_t tsize = pi->
m_files.count();
 
 3143   for(
size_t i = 0; i < tsize; ++i)
 
 3146       pos -= QPointF(dw, dh);
 
 3148       pos += QPointF(dw, dh);
 
 3159   QString file(fileName);
 
 3160   int ind = file.indexOf(
"racc.") + strlen(
"racc.");
 
 3161   file.remove(0, ind);
 
 3162   QString ano = 
"20" + file.mid(0, 2);
 
 3163   QString mes = file.mid(2, 2);
 
 3164   QString dia = file.mid(4, 2);
 
 3165   QString hour = file.mid(7, 2);
 
 3166   QString min = file.mid(9, 2);
 
 3168   te::dt::Date date(ano.toInt(), mes.toInt(), dia.toInt());
 
 3175   QString file(fileName);
 
 3176   int ind = file.indexOf(
"Prec5km") + strlen(
"Prec5km");
 
 3177   file.remove(0, ind);
 
 3178   QString ano = file.mid(0, 4);
 
 3179   QString mes = file.mid(4, 2);
 
 3180   QString dia = file.mid(6, 2);
 
 3181   QString hour = file.mid(8, 2);
 
 3183   te::dt::Date date(ano.toInt(), mes.toInt(), dia.toInt());
 
 3190   PixmapItem* pi = getTemporalImageCtlParameters(path);
 
 3194   m_animationScene->addItem(pi);
 
 3197   animation->setEasingCurve(QEasingCurve::Linear);
 
 3198   m_parallelAnimation->addAnimation(animation);
 
 3200   QString suffix = 
"." + pi->
m_suffix;
 
 3201   QStringList nameFilter;
 
 3202   nameFilter.append(
"*" + suffix);
 
 3204   QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
 
 3205   size_t count = files.count();
 
 3214   for(
size_t i = 0; i < count; ++i)
 
 3216     QString f = files[i];
 
 3218     t = getTemporalImageTime(f);
 
 3228   for(
size_t i = 0; i < count; ++i)
 
 3231       pos -= QPointF(w, h);
 
 3233       pos += QPointF(w, h);
 
 3243   QString file(path + 
"/image.ctl");
 
 3244   FILE* fp = fopen(file.toStdString().c_str(), 
"r");
 
 3248   fread(buf, 2000, 
sizeof(
char), fp);
 
 3250   QString ss(QString(buf).simplified());
 
 3253   if(!(ss.contains(
"suffix ", Qt::CaseInsensitive) && ss.contains(
"undef", Qt::CaseInsensitive) && 
 
 3254     ss.contains(
"srid", Qt::CaseInsensitive) && ss.contains(
"llx", Qt::CaseInsensitive) && 
 
 3255     ss.contains(
"lly", Qt::CaseInsensitive) && ss.contains(
"urx", Qt::CaseInsensitive) && 
 
 3256     ss.contains(
"ury", Qt::CaseInsensitive)))
 
 3264   size_t pos = ss.indexOf(
"suffix ", Qt::CaseInsensitive) + strlen(
"suffix "); 
 
 3266   pos = ss.indexOf(
" undef", Qt::CaseInsensitive);
 
 3272   pos = ss.indexOf(
"undef ", Qt::CaseInsensitive) + strlen(
"undef ");
 
 3274   pos = ss.indexOf(
" srid", Qt::CaseInsensitive);
 
 3276   pi->
m_undef = atof(s.toStdString().c_str());
 
 3280   pos = ss.indexOf(
"srid ", Qt::CaseInsensitive) + strlen(
"srid ");
 
 3282   pos = ss.indexOf(
" llx", Qt::CaseInsensitive);
 
 3284   pi->
m_SRID = atoi(s.toStdString().c_str());
 
 3288   pos = ss.indexOf(
"llx ", Qt::CaseInsensitive) + strlen(
"llx ");
 
 3290   pos = ss.indexOf(
" lly", Qt::CaseInsensitive);
 
 3292   double llx = atof(s.toStdString().c_str());
 
 3296   pos = ss.indexOf(
"lly ", Qt::CaseInsensitive) + strlen(
"lly ");
 
 3298   pos = ss.indexOf(
" urx", Qt::CaseInsensitive);
 
 3300   double lly = atof(s.toStdString().c_str());
 
 3304   pos = ss.indexOf(
"urx ", Qt::CaseInsensitive) + strlen(
"urx ");
 
 3306   pos = ss.indexOf(
" ury", Qt::CaseInsensitive);
 
 3308   double urx = atof(s.toStdString().c_str());
 
 3312   pos = ss.indexOf(
"ury ", Qt::CaseInsensitive) + strlen(
"ury ");
 
 3314   double ury = atof(ss.toStdString().c_str());
 
 3316   double w = urx - llx;
 
 3317   double h = ury - lly;
 
 3325   QString file(fileName);
 
 3326   int ind = file.indexOf(
"_") + strlen(
"_");
 
 3327   file.remove(0, ind);
 
 3328   QString ano = file.mid(0, 4);
 
 3329   QString mes = file.mid(5, 2);
 
 3330   QString dia = file.mid(8, 2);
 
 3331   QString hour = file.mid(11, 2);
 
 3332   QString min = file.mid(14, 2);
 
 3333   QString sec = file.mid(17, 2);
 
 3335   te::dt::Date date(ano.toInt(), mes.toInt(), dia.toInt());
 
TEDATAACCESSEXPORT DataSourcePtr GetDataSource(const std::string &datasourceId, const bool opened=true)
Search for a data source with the informed id in the DataSourceManager. 
 
const std::string & getDataSetName() const 
 
boost::shared_ptr< DataSource > DataSourcePtr
 
void setConnInfo(const std::map< std::string, std::string > &conninfo)
 
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. 
 
const std::map< std::string, std::string > & getConnInfo() const 
 
boost::gregorian::greg_day getDay() const 
It returns the gregorian day - from 1 to 31. 
 
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. 
 
void setType(const std::string &dsType)
 
static void initialize()
It returns the spatial extent of the observations of a coverage series. 
 
double m_llx
Lower left corner x-coordinate. 
 
LineString is a curve with linear interpolation between points. 
 
Date getDate() const 
It returns the date associated to time instant. 
 
static DataSourceManager & getInstance()
It returns a reference to the singleton instance. 
 
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. 
 
const std::string & getDataSourceId() const 
 
#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. 
 
void setId(const std::string &id)
 
std::auto_ptr< te::gm::Geometry > getGeometry() const 
 
double m_lly
Lower left corner y-coordinate. 
 
A class that contains infos about a DataSet that contains observations of one or more trajectories...
 
A class to represent a trajectory data set. 
 
const std::string & getId() const 
 
A class to represent time period. 
 
const boost::posix_time::time_period & getTimePeriod() const 
Assignment operator. 
 
A class to represent time duration with nano-second/micro-second resolution. 
 
TimeDuration getTime() const 
It returns the time duration associated to time instant. 
 
const std::string & getType() const 
 
A class that represents a data source component. 
 
This file contains include headers for the TerraLib ST module. 
 
DateTimeType
The subtype of date and time type. 
 
A layer with reference to a dataset. 
 
void setPointN(std::size_t i, const Point &p)
It sets the value of the specified point to this new one. 
 
const te::gm::Envelope & getSpatialExtent() const 
It returns the spatial extent of the trajectory observations. 
 
static std::auto_ptr< ObservationDataSet > getDataSet(const ObservationDataSetInfo &info, te::common::TraverseType travType=te::common::FORWARDONLY)
It returns a ObservationDataSet, that is, a DataSet that contains observations. 
 
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. 
 
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. 
 
te::dt::DateTimePeriod * getTemporalExtent() const 
It returns the temporal extent of the trajectory observations. 
 
static void finalize()
It finalize the STDataLoader.