Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #include <Qt/cmtkQtProgress.h>
00033
00034 #include <qapplication.h>
00035 #include <qprogressbar.h>
00036
00037 namespace
00038 cmtk
00039 {
00040
00043
00044 QtProgress::QtProgress
00045 ( QWidget *const parentWindow )
00046 {
00047 ParentWindow = parentWindow;
00048 ProgressBar = NULL;
00049 ProgressDialog = NULL;
00050 this->m_ProgressWidgetMode = PROGRESS_DIALOG;
00051 }
00052
00053 void
00054 QtProgress
00055 ::BeginVirtual( const double start, const double end, const double increment, const std::string& taskName )
00056 {
00057 this->Superclass::BeginVirtual( start, end, increment, taskName );
00058
00059 if ( this->IsTopLevel() )
00060 {
00061 if ( ProgressBar )
00062 {
00063 ProgressBar->setRange( 0, 100 );
00064 ProgressBar->show();
00065 }
00066
00067 if ( ! ProgressDialog )
00068 ProgressDialog = new QProgressDialog( taskName.c_str(), "Cancel", 0, 100, ParentWindow, Qt::Dialog );
00069
00070 ProgressDialog->setWindowModality(Qt::WindowModal);
00071 ProgressDialog->setModal( true );
00072 ProgressDialog->setMinimumDuration( 100 );
00073 ProgressDialog->show();
00074 ProgressDialog->setRange( 0, 100 );
00075
00076 qApp->processEvents();
00077 }
00078
00079 Progress::SetProgressInstance( this );
00080 }
00081
00082 Progress::ResultEnum
00083 QtProgress::UpdateProgress()
00084 {
00085 const int percent = static_cast<int>( 100 * this->GetFractionComplete() );
00086 if ( ProgressBar )
00087 ProgressBar->setValue( percent );
00088 if ( ProgressDialog )
00089 ProgressDialog->setValue( percent );
00090
00091 qApp->processEvents();
00092
00093 Progress::ResultEnum result = Progress::OK;
00094 if ( ProgressDialog )
00095 if ( ProgressDialog->wasCanceled() )
00096 result = Progress::INTERRUPT;
00097
00098 return result;
00099 }
00100
00101 void
00102 QtProgress::DoneVirtual()
00103 {
00104 if ( this->IsTopLevel() )
00105 {
00106 if ( ProgressBar )
00107 ProgressBar->reset();
00108
00109 if ( ProgressDialog )
00110 ProgressDialog->hide();
00111 }
00112 }
00113
00114 }