void RenderWindow::slotUpdateProgressAndStatus(const QString &text, const QString &progressText,
    double progress, cProgressText::enumProgressType progressType)
{
  ui->statusbar->showMessage(text, 0);
  QProgressBar *progressBar = NULL;
  bool isQueue = this->sender() && this->sender()->objectName() == "Queue";
  switch (progressType)
  {
    case cProgressText::progress_IMAGE:
      if (isQueue) progressBar = gMainInterface->progressBarQueueImage;
      else progressBar = gMainInterface->progressBar;
      break;
    case cProgressText::progress_ANIMATION:
      if (isQueue) progressBar = gMainInterface->progressBarQueueAnimation;
      else progressBar = gMainInterface->progressBarAnimation;
      break;
    case cProgressText::progress_QUEUE:
      // nothing to be done, no progress bar for queue in GUI
      break;
  }

  if (progressBar)
  {
    if (!progressBar->isVisible())
    {
      progressBar->setVisible(true);
    }
    progressBar->setValue(progress * 1000.0);
    progressBar->setTextVisible(true);
    progressBar->setFormat(progressText);
  }
}
void RenderWindow::slotUpdateProgressHide(cProgressText::enumProgressType progressType)
{
	QProgressBar *progressBar = NULL;
	switch (progressType)
	{
		case cProgressText::progress_IMAGE: progressBar = gMainInterface->progressBar; break;
		case cProgressText::progress_ANIMATION:
			progressBar = gMainInterface->progressBarAnimation;
			break;
		case cProgressText::progress_QUEUE:
			// nothing to be done, no progress bar for queue in GUI
			break;
	}

	if (progressBar)
	{
		if (progressBar->isVisible()) progressBar->setVisible(false);
	}
}
void
Progress::timerEvent(QTimerEvent * event)
{
    if (event->timerId() != timer.timerId() || noAnimations())
        return;

    //Update the registered progressbars.
    Items::iterator iter;
    QProgressBar *pb;
    bool mkProper = false;
    animationUpdate = true;
    for (iter = items.begin(); iter != items.end(); iter++)
    {
        QWidget *w = const_cast<QWidget*>(iter.key().data());
        if (!w) // not a progressbar - shouldn't be in items, btw...
            { mkProper = true; continue; }

        pb = qobject_cast<QProgressBar*>(w);
        if (!pb)
            continue; // not a progressbar - shouldn't be in items, btw...

        if (pb->maximum() != 0 || pb->minimum() != 0 || pb->paintingActive() || !pb->isVisible())
        {
            pb->setAttribute(Qt::WA_OpaquePaintEvent, false);
            continue; // no paint necessary
        }

        pb->setAttribute(Qt::WA_OpaquePaintEvent);

        ++iter.value();

        // dump pb geometry
        int x,y,l,t, *step = &iter.value()._step;
        if ( pb->orientation() == Qt::Vertical ) // swapped values
            pb->rect().getRect(&y,&x,&t,&l);
        else
            pb->rect().getRect(&x,&y,&l,&t);

        if (*step > l/_speed)
            *step = l/36-(int)(l/_speed);
        else if (*step == -1)
            *step = l/36-1;

        int s = qMin(qMax(l / 10, 16), qMin(t, 20));
        int ss = (3*s)/4;
        int n = l/s;
        if ( pb->orientation() == Qt::Vertical)
            { x = pb->rect().bottom(); x -= (l - n*s)/2 + ss; /*s = -s;*/ }
        else
            { x += (l - n*s)/2; /*s = qAbs(s);*/ }

        x += qMax((int)(_speed*qAbs(*step)*n*s/l) - s, 0);
        if ( pb->orientation() == Qt::Vertical )
            pb->repaint(y,x-s,s,3*s);
        else
            pb->repaint(x-s,y,3*s,s);
    }
    animationUpdate = false;
    if (mkProper)
        _release(NULL);
}