1 // VISU VISUGUI : GUI of VISU component
3 // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
24 // File : VisuGUI_BuildProgressDlg.cxx
25 // Author : Oleg UVAROV
28 #include "VisuGUI_BuildProgressDlg.h"
30 #include "VisuGUI_Tools.h"
32 #include "SUIT_FileDlg.h"
33 #include "SUIT_MessageBox.h"
34 #include "SUIT_ResourceMgr.h"
36 #include <vtkTimerLog.h>
38 #include <qcheckbox.h>
39 #include <qgroupbox.h>
42 #include <qlcdnumber.h>
43 #include <qlineedit.h>
44 #include <qpushbutton.h>
50 VisuGUI_BuildProgressDlg::VisuGUI_BuildProgressDlg( QWidget* theParent ):
52 "VisuGUI_BuildProgressBar",
54 WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose),
55 myIsRaiseColor( false )
57 setCaption( tr( "DLG_BUILD_PROGRESS_TITLE" ) );
59 SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr();
61 QVBoxLayout* aTopLayout = new QVBoxLayout( this );
62 aTopLayout->setSpacing( 6 );
63 aTopLayout->setMargin( 6 );
64 aTopLayout->setAutoAdd( true );
67 mySettingsBox = new QGroupBox( tr( "IMPORT_SETTINGS" ), this );
68 mySettingsBox->setColumnLayout( 0, Qt::Vertical );
69 mySettingsBox->layout()->setSpacing( 0 );
70 mySettingsBox->layout()->setMargin( 0 );
72 QGridLayout* aSettingsLayout = new QGridLayout( mySettingsBox->layout() );
73 aSettingsLayout->setSpacing( 6 );
74 aSettingsLayout->setMargin( 11 );
76 QLabel* aFileNameLabel = new QLabel( tr( "FILE_NAME" ), mySettingsBox );
77 myFileNameLineEdit = new QLineEdit( mySettingsBox );
78 myFileNameLineEdit->setMinimumWidth( 250 );
79 myFileNameLineEdit->setReadOnly( true );
81 QPushButton* aFileNameButton = new QPushButton( mySettingsBox );
82 aFileNameButton->setAutoDefault( false );
83 aFileNameButton->setPixmap( aResourceMgr->loadPixmap( "VISU", tr( "ICON_LOAD_TEXTURE" ) ) );
84 connect( aFileNameButton, SIGNAL( clicked() ), this, SLOT( onBrowseFile() ) );
86 myBuildAllCheckBox = new QCheckBox( tr( "BUILD_ALL" ), mySettingsBox );
87 myBuildAllCheckBox->setChecked( aResourceMgr->booleanValue( "VISU", "full_med_loading", false ) );
88 connect( myBuildAllCheckBox, SIGNAL( clicked() ), this, SLOT( onBuildCheckBoxClicked() ) );
90 myBuildAtOnceCheckBox = new QCheckBox( tr( "BUILD_AT_ONCE" ), mySettingsBox );
91 myBuildAtOnceCheckBox->setChecked( aResourceMgr->booleanValue( "VISU", "build_at_once", false ) );
92 connect( myBuildAtOnceCheckBox, SIGNAL( clicked() ), this, SLOT( onBuildCheckBoxClicked() ) );
94 myCloseCheckBox = new QCheckBox( tr( "CLOSE_AT_FINISH" ), mySettingsBox );
95 myCloseCheckBox->setChecked( aResourceMgr->booleanValue( "VISU", "close_at_finish", true ) );
97 aSettingsLayout->addWidget( aFileNameLabel, 0, 0 );
98 aSettingsLayout->addMultiCellWidget( myFileNameLineEdit, 1, 1, 0, 1 );
99 //aSettingsLayout->addWidget( aFileNameButton, 1, 2 );
100 aSettingsLayout->addWidget( myBuildAllCheckBox, 2, 0 );
101 aSettingsLayout->addWidget( myBuildAtOnceCheckBox, 3, 0 );
102 aSettingsLayout->addWidget( myCloseCheckBox, 4, 0 );
105 myProgressBox = new QGroupBox( tr( "IMPORT_PROGRESS" ), this );
106 myProgressBox->setColumnLayout( 0, Qt::Vertical );
107 myProgressBox->layout()->setSpacing( 0 );
108 myProgressBox->layout()->setMargin( 0 );
110 QGridLayout* aProgressLayout = new QGridLayout( myProgressBox->layout() );
111 aProgressLayout->setSpacing( 6 );
112 aProgressLayout->setMargin( 11 );
114 myBuildEntitiesCheckBox = new QCheckBox( tr( "BUILD_ENTITIES" ), myProgressBox );
115 myBuildEntitiesCheckBox->setChecked( true );
116 myBuildEntitiesCheckBox->setEnabled( false );
117 myBuildEntitiesButton = new QPushButton( myProgressBox );
118 myBuildEntitiesButton->setEnabled( false );
119 myBuildEntitiesButton->setFixedSize( 30, 30 );
120 myBuildEntitiesButton->setPaletteBackgroundColor( Qt::red );
121 connect( myBuildEntitiesCheckBox, SIGNAL( clicked() ), this, SLOT( onBuildCheckBoxClicked() ) );
123 myBuildFieldsCheckBox = new QCheckBox( tr( "BUILD_FIELDS" ), myProgressBox );
124 myBuildFieldsCheckBox->setChecked( aResourceMgr->booleanValue( "VISU", "build_fields", true ) );
125 myBuildFieldsButton = new QPushButton( myProgressBox );
126 myBuildFieldsButton->setEnabled( false );
127 myBuildFieldsButton->setFixedSize( 30, 30 );
128 myBuildFieldsButton->setPaletteBackgroundColor( Qt::red );
129 connect( myBuildFieldsCheckBox, SIGNAL( clicked() ), this, SLOT( onBuildCheckBoxClicked() ) );
131 myBuildMinMaxCheckBox = new QCheckBox( tr( "BUILD_MINMAX" ), myProgressBox );
132 myBuildMinMaxCheckBox->setChecked( aResourceMgr->booleanValue( "VISU", "build_min_max", true ) );
133 myBuildMinMaxButton = new QPushButton( myProgressBox );
134 myBuildMinMaxButton->setEnabled( false );
135 myBuildMinMaxButton->setFixedSize( 30, 30 );
136 myBuildMinMaxButton->setPaletteBackgroundColor( Qt::red );
137 connect( myBuildMinMaxCheckBox, SIGNAL( clicked() ), this, SLOT( onBuildCheckBoxClicked() ) );
139 myBuildGroupsCheckBox = new QCheckBox( tr( "BUILD_GROUPS" ), myProgressBox );
140 myBuildGroupsCheckBox->setChecked( aResourceMgr->booleanValue( "VISU", "build_groups", true ) );
141 myBuildGroupsButton = new QPushButton( myProgressBox );
142 myBuildGroupsButton->setEnabled( false );
143 myBuildGroupsButton->setFixedSize( 30, 30 );
144 myBuildGroupsButton->setPaletteBackgroundColor( Qt::red );
145 connect( myBuildGroupsCheckBox, SIGNAL( clicked() ), this, SLOT( onBuildCheckBoxClicked() ) );
147 aProgressLayout->addWidget( myBuildEntitiesCheckBox, 0, 0 );
148 aProgressLayout->addWidget( myBuildEntitiesButton, 0, 1 );
149 aProgressLayout->addWidget( myBuildFieldsCheckBox, 1, 0 );
150 aProgressLayout->addWidget( myBuildFieldsButton, 1, 1 );
151 aProgressLayout->addWidget( myBuildMinMaxCheckBox, 2, 0 );
152 aProgressLayout->addWidget( myBuildMinMaxButton, 2, 1 );
153 aProgressLayout->addWidget( myBuildGroupsCheckBox, 3, 0 );
154 aProgressLayout->addWidget( myBuildGroupsButton, 3, 1 );
157 myTimeBox = new QGroupBox( tr( "IMPORT_TIME" ), this );
158 myTimeBox->setColumnLayout( 0, Qt::Vertical );
159 myTimeBox->layout()->setSpacing( 0 );
160 myTimeBox->layout()->setMargin( 0 );
162 QGridLayout* aTimeLayout = new QGridLayout( myTimeBox->layout() );
163 aTimeLayout->setSpacing( 6 );
164 aTimeLayout->setMargin( 11 );
166 QLabel* aTimeLabel = new QLabel( tr( "TIME" ), myTimeBox );
168 myTimeLCDNumber = new QLCDNumber( myTimeBox );
169 myTimeLCDNumber->setSegmentStyle( QLCDNumber::Filled );
170 myTimeLCDNumber->setPaletteBackgroundColor( Qt::black );
171 myTimeLCDNumber->setPaletteForegroundColor( Qt::white );
172 myTimeLCDNumber->setNumDigits( 8 );
173 myTimeLCDNumber->display( myTime.toString( "hh:mm:ss.zzz" ) );
175 aTimeLayout->addWidget( aTimeLabel, 0, 0 );
176 aTimeLayout->addWidget( myTimeLCDNumber, 0, 1 );
179 QGroupBox* CommonGroup = new QGroupBox( this );
180 CommonGroup->setColumnLayout(0, Qt::Vertical );
181 CommonGroup->layout()->setSpacing( 0 );
182 CommonGroup->layout()->setMargin( 0 );
183 QGridLayout* CommonGroupLayout = new QGridLayout( CommonGroup->layout() );
184 CommonGroupLayout->setAlignment( Qt::AlignTop );
185 CommonGroupLayout->setSpacing( 6 );
186 CommonGroupLayout->setMargin( 11 );
188 myStartButton = new QPushButton( tr( "START" ), CommonGroup );
189 myStartButton->setAutoDefault( true );
190 myStartButton->setDefault( true );
191 CommonGroupLayout->addWidget( myStartButton, 0, 0 );
192 CommonGroupLayout->addItem( new QSpacerItem( 5, 5, QSizePolicy::Expanding, QSizePolicy::Minimum ), 0, 1 );
194 QPushButton* aCloseButton = new QPushButton( tr( "CLOSE" ), CommonGroup );
195 aCloseButton->setAutoDefault( true );
196 CommonGroupLayout->addWidget( aCloseButton, 0, 2 );
198 connect( myStartButton, SIGNAL( clicked() ), this, SLOT( onStart() ) );
199 connect( aCloseButton, SIGNAL( clicked() ), this, SLOT( onClose() ) );
201 myTimer = new QTimer( this );
202 connect( myTimer, SIGNAL( timeout() ), this, SLOT( onTimer() ) );
205 VisuGUI_BuildProgressDlg::~VisuGUI_BuildProgressDlg()
209 void VisuGUI_BuildProgressDlg::show()
211 if( !myFileName.isNull() || onBrowseFile() )
215 void VisuGUI_BuildProgressDlg::onStart()
217 if( myFileName.isNull() )
220 myResult = myGenerator->CreateResult( myFileName );
222 if (CORBA::is_nil(myResult.in())) {
223 SUIT_MessageBox::warn1(this,
225 tr("ERR_ERROR_IN_THE_FILE"),
229 myResult->SetBuildFields( myBuildFieldsCheckBox->isChecked(), myBuildMinMaxCheckBox->isChecked() );
230 myResult->SetBuildGroups( myBuildGroupsCheckBox->isChecked() );
233 myFileNameLineEdit->setReadOnly( true );
235 myBuildAllCheckBox->setNoChange();
236 myBuildAtOnceCheckBox->setNoChange();
237 myBuildEntitiesCheckBox->setNoChange();
238 myBuildFieldsCheckBox->setNoChange();
239 myBuildMinMaxCheckBox->setNoChange();
240 myBuildGroupsCheckBox->setNoChange();
243 myStartButton->setEnabled( false );
245 bool aBuildAtOnce = myBuildAtOnceCheckBox->isChecked();
248 QApplication::setOverrideCursor( Qt::waitCursor );
249 myCurrentTime = vtkTimerLog::GetCurrentTime();
252 myTime.setHMS( 0, 0, 0 );
253 myTimer->start( 100 );
255 bool aBuildAll = myBuildAllCheckBox->isChecked();
256 myResult->Build( aBuildAll, aBuildAtOnce );
260 void VisuGUI_BuildProgressDlg::onClose()
265 bool VisuGUI_BuildProgressDlg::onBrowseFile()
267 QString aRootDir = QString( getenv( "VISU_ROOT_DIR") );
270 aFilter.append( tr( "FLT_MED_FILES" ) );
271 aFilter.append( tr( "FLT_ALL_FILES" ) );
273 QFileInfo aFileInfo = SUIT_FileDlg::getFileName( this, "", aFilter, tr( "IMPORT_FROM_FILE" ), true );
274 QString aFileName = aFileInfo.filePath();
276 if( aFileName.isNull() )
279 myFileName = aFileName;
280 myFileNameLineEdit->setText( aFileName.section( '/', -1 ) );
285 void VisuGUI_BuildProgressDlg::onTimer()
288 bool aBuildAtOnce = myBuildAtOnceCheckBox->isChecked();
292 myTime = myTime.addMSecs( 100 );
293 if( myTime.minute() > 9 && myTimeLCDNumber->numDigits() < 9 )
294 myTimeLCDNumber->setNumDigits( 9 );
295 myTimeLCDNumber->display( myTime.toString( "m:ss.zzz" ) );
297 bool isEntitiesDone = myResult->IsEntitiesDone();
298 bool isFieldsDone = myResult->IsFieldsDone();
299 bool isMinMaxDone = myResult->IsMinMaxDone();
300 bool isGroupsDone = myResult->IsGroupsDone();
302 updateButton( myBuildEntitiesButton, isEntitiesDone );
303 updateButton( myBuildFieldsButton, isFieldsDone );
304 updateButton( myBuildMinMaxButton, isMinMaxDone );
305 updateButton( myBuildGroupsButton, isGroupsDone );
308 if( myResult->IsDone() )
314 QApplication::restoreOverrideCursor();
317 int mSecs = ( int )( 1000 * ( vtkTimerLog::GetCurrentTime() - myCurrentTime ) );
318 aTime = aTime.addMSecs( mSecs );
319 if( aTime.minute() > 9 )
320 myTimeLCDNumber->setNumDigits( 9 );
321 myTimeLCDNumber->display( aTime.toString( "m:ss.zzz" ) );
324 if( myCloseCheckBox->isChecked() )
327 SUIT_MessageBox::warn1( this, tr( "INF_VISU" ), tr( "IMPORT_DONE" ), tr( "BUT_OK" ) );
335 void VisuGUI_BuildProgressDlg::updateButton( QPushButton* theButton, bool theIsDone )
337 QColor aCurrentColor = theButton->paletteBackgroundColor();
338 if( aCurrentColor == Qt::gray || aCurrentColor == Qt::green )
341 QColor aNewColor = Qt::green;
346 aCurrentColor.getRgb( &r, &g, &b );
348 myIsRaiseColor = true;
350 myIsRaiseColor = false;
352 int gNew = g + ( myIsRaiseColor ? 1 : -1 ) * 51;
354 aNewColor.setRgb( 255, gNew, 0 );
357 theButton->setPaletteBackgroundColor( aNewColor );
360 void VisuGUI_BuildProgressDlg::done( int r )
362 QApplication::restoreOverrideCursor();
367 void VisuGUI_BuildProgressDlg::onBuildCheckBoxClicked()
369 QCheckBox* aCheckBox = ( QCheckBox* )sender();
373 bool anIsChecked = aCheckBox->isChecked();
375 QColor aColor = anIsChecked ? Qt::red : Qt::gray;
377 if( aCheckBox == myBuildAllCheckBox )
379 if( anIsChecked && !myBuildAtOnceCheckBox->isChecked() )
380 myBuildAtOnceCheckBox->animateClick();
382 else if( aCheckBox == myBuildAtOnceCheckBox )
384 if( !anIsChecked && myBuildAllCheckBox->isChecked() )
385 myBuildAllCheckBox->animateClick();
387 else if( aCheckBox == myBuildFieldsCheckBox )
389 myBuildFieldsButton->setPaletteBackgroundColor( aColor );
390 if( !anIsChecked && myBuildMinMaxCheckBox->isChecked() )
391 myBuildMinMaxCheckBox->animateClick();
393 else if( aCheckBox == myBuildMinMaxCheckBox )
395 myBuildMinMaxButton->setPaletteBackgroundColor( aColor );
396 if( anIsChecked && !myBuildFieldsCheckBox->isChecked() )
397 myBuildFieldsCheckBox->animateClick();
399 else if( aCheckBox == myBuildGroupsCheckBox )
400 myBuildGroupsButton->setPaletteBackgroundColor( aColor );
404 void VisuGUI_BuildProgressDlg::setFileName( const QString& theFileName )
406 if ( !theFileName.isNull() )
408 myFileName = theFileName;
409 myFileNameLineEdit->setText( myFileName.section( '/', -1 ) );