1 // VISU VISUGUI : GUI of VISU component
3 // Copyright (C) 2003 CEA/DEN, EDF R&D
7 // File : VisuGUI_StreamLinesDlg.cxx
8 // Author : Vitaly SMETANNIKOV
11 #include "VisuGUI_StreamLinesDlg.h"
14 #include <qgroupbox.h>
15 #include <qcolordialog.h>
16 #include "QAD_Application.h"
17 #include "QAD_Desktop.h"
18 #include "QAD_Config.h"
20 #include "SALOME_Selection.h"
23 extern VisuGUI *visuGUI;
25 VisuGUI_StreamLinesDlg::VisuGUI_StreamLinesDlg()
26 : QDialog( QAD_Application::getDesktop(), "VisuGUI_StreamLinesDlg", false, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu )
28 setCaption("Stream lines Preferences");
29 setSizeGripEnabled( TRUE );
31 QGridLayout* TopLayout = new QGridLayout( this );
32 TopLayout->setSpacing( 6 );
33 TopLayout->setMargin( 11 );
36 QGroupBox* aSourceBox = new QGroupBox(tr("Source"), this);
37 aSourceBox->setColumnLayout(0, Qt::Vertical);
38 QGridLayout* aSrcLayout = new QGridLayout( aSourceBox->layout() );
39 aSrcLayout->setSpacing( 6 );
40 aSrcLayout->setMargin( 0 );
42 myUseSrcChk = new QCheckBox(tr("Use source presentation"), aSourceBox);
43 aSrcLayout->addMultiCellWidget(myUseSrcChk, 0, 0, 0, 1);
45 mySrcCombo = new QComboBox(aSourceBox);
46 mySrcCombo->setEnabled(myUseSrcChk->isChecked());
49 QAD_Study* aActiveStudy = VisuGUI::GetActiveStudy();
50 SALOME_Selection* aSel = SALOME_Selection::Selection( aActiveStudy->getSelection() );
51 if( aSel->IObjectCount() > 0 ) {
52 Handle(SALOME_InteractiveObject) aIO = aSel->firstIObject();
54 SALOMEDS::SObject_var aSObject = VisuGUI::GetStudyDocument()->FindObjectID(aIO->getEntry());
55 SALOMEDS::SComponent_var aComp = aSObject->GetFatherComponent();
56 SALOMEDS::ChildIterator_var aIter = VisuGUI::GetStudyDocument()->NewChildIterator( aComp );
58 for (aIter->InitEx(true); aIter->More(); aIter->Next() ) {
59 SALOMEDS::SObject_var aChildSObj = aIter->Value();
60 CORBA::Object_var aChildObject = VISU::SObjectToObject( aChildSObj );
61 if(!CORBA::is_nil( aChildObject ) ) {
62 VISU::Prs3d_var aPrsObj = VISU::Prs3d::_narrow( aChildObject );
63 if( !CORBA::is_nil( aPrsObj ) ) {
64 if (aPrsObj->GetType() != VISU::TSTREAMLINES) {
65 SALOMEDS::GenericAttribute_var anAttr;
66 if ( aChildSObj->FindAttribute(anAttr, "AttributeName") ) {
67 SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow(anAttr);
68 mySrcCombo->insertItem(QString(aName->Value()));
69 myPrsList.append(aPrsObj);
78 connect(myUseSrcChk, SIGNAL(toggled(bool)), mySrcCombo, SLOT(setEnabled(bool)));
79 aSrcLayout->addMultiCellWidget(mySrcCombo, 1, 1, 0, 1);
81 QLabel* aPercentLbl = new QLabel( tr( "Used points (0..1)" ), aSourceBox);
82 aSrcLayout->addWidget(aPercentLbl, 2, 0);
84 myPntPercent = new QAD_SpinBoxDbl( aSourceBox, 0, 1, 0.1);
85 aSrcLayout->addWidget(myPntPercent, 2, 1);
87 TopLayout->addMultiCellWidget(aSourceBox, 0, 0, 0, 1);
90 QLabel* aStepLenLbl = new QLabel( tr( "Step Length" ), this);
91 TopLayout->addWidget(aStepLenLbl, 1, 0);
92 myStepLen = new QAD_SpinBoxDbl( this, DBL_MIN, DBL_MAX, 0.1);
93 myStepLen->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
94 TopLayout->addWidget(myStepLen, 1, 1);
96 QLabel* aIntegStepLenLbl = new QLabel( tr( "Integration Step" ), this);
97 TopLayout->addWidget(aIntegStepLenLbl, 2, 0);
98 myIntegStepLen = new QAD_SpinBoxDbl( this, DBL_MIN, DBL_MAX, 0.1);
99 myIntegStepLen->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
100 TopLayout->addWidget(myIntegStepLen, 2, 1);
102 QLabel* aPropagationLbl = new QLabel( tr( "Propagation Time" ), this);
103 TopLayout->addWidget(aPropagationLbl, 3, 0);
104 myPropTime = new QAD_SpinBoxDbl( this, DBL_MIN, DBL_MAX, 1);
105 myPropTime->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
106 TopLayout->addWidget(myPropTime, 3, 1);
108 connect(myPropTime, SIGNAL(valueChanged(double)), this, SLOT(PropagationTimeChanged(double)));
110 QLabel* aDirLbl = new QLabel( tr( "Direction" ), this);
111 TopLayout->addWidget(aDirLbl, 4, 0);
112 myDirCombo = new QComboBox(this);
113 myDirCombo->insertItem("Forward");
114 myDirCombo->insertItem("Backward");
115 myDirCombo->insertItem("Both");
116 TopLayout->addWidget(myDirCombo, 4, 1);
118 myUseScalar = new QCheckBox( tr( "Magnitude coloring" ), this, "UseMagn" );
119 connect( myUseScalar, SIGNAL( clicked() ), this, SLOT( enableSetColor() ) );
120 TopLayout->addWidget(myUseScalar, 5, 0);
122 SelColor = new QPushButton( tr( "Use Color" ), this, "SelColor" );
123 connect( SelColor, SIGNAL( clicked() ), this, SLOT( setVColor() ) );
124 TopLayout->addWidget( SelColor, 5, 1);
126 QGroupBox* aGroupButtons = new QGroupBox( this, "GroupButtons" );
127 aGroupButtons->setColumnLayout(0, Qt::Vertical );
128 aGroupButtons->layout()->setSpacing( 0 );
129 aGroupButtons->layout()->setMargin( 0 );
131 QGridLayout* aGroupButtonsLayout = new QGridLayout( aGroupButtons->layout() );
132 aGroupButtonsLayout->setAlignment( Qt::AlignTop );
133 aGroupButtonsLayout->setSpacing( 6 );
134 aGroupButtonsLayout->setMargin( 11 );
136 QPushButton* aOkBtn = new QPushButton( tr( "&OK" ), aGroupButtons, "buttonOk" );
137 aOkBtn->setAutoDefault( TRUE );
138 aOkBtn->setDefault( TRUE );
139 aGroupButtonsLayout->addWidget( aOkBtn, 0, 0 );
140 aGroupButtonsLayout->addItem( new QSpacerItem( 5, 5, QSizePolicy::Expanding, QSizePolicy::Minimum ), 0, 1 );
142 QPushButton* aCancelBtn = new QPushButton( tr( "&Cancel" ) , aGroupButtons, "buttonCancel" );
143 aCancelBtn->setAutoDefault( TRUE );
144 aGroupButtonsLayout->addWidget( aCancelBtn, 0, 2 );
145 connect( aOkBtn, SIGNAL( clicked() ), this, SLOT( accept() ) );
146 connect( aCancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) );
147 TopLayout->addMultiCellWidget( aGroupButtons, 6, 6, 0, 1 );
153 void VisuGUI_StreamLinesDlg::initFromPrsObject(VISU::StreamLines_i* thePrs) {
154 myStepLen->setValue(thePrs->GetStepLength());
155 myIntegStepLen->setValue(thePrs->GetIntegrationStep());
156 myPropTime->setValue(thePrs->GetPropagationTime());
157 switch (thePrs->GetDirection()) {
158 case VISU::StreamLines::FORWARD:
159 myDirCombo->setCurrentItem(0);
161 case VISU::StreamLines::BACKWARD:
162 myDirCombo->setCurrentItem(1);
164 case VISU::StreamLines::BOTH:
165 myDirCombo->setCurrentItem(2);
167 myUseScalar->setChecked(thePrs->isColored());
168 myPntPercent->setValue(thePrs->GetUsedPoints());
170 myUseSrcChk->setChecked(false);
171 QString aSrcEntry = thePrs->GetSourceEntry();
172 if (!aSrcEntry.isEmpty()) {
173 for (int i = 0; i < myPrsList.count(); i++) {
174 VISU::Prs3d_i* aPrs = dynamic_cast<VISU::Prs3d_i*>(VISU::GetServant(myPrsList[i]));
175 if (aSrcEntry == aPrs->GetEntry()) {
176 myUseSrcChk->setChecked(true);
177 mySrcCombo->setCurrentItem(i);
183 SALOMEDS::Color anOldColor = thePrs->GetColor();
184 QColor aColor = QColor(int(255*anOldColor.R),int(255*anOldColor.G),int(255*anOldColor.B));
188 myIntegStepLen->setMaxValue(thePrs->GetMaxIntegrationStep());
189 myIntegStepLen->setMinValue(thePrs->GetMinIntegrationStep());
190 myStepLen->setMaxValue(myPropTime->value());
191 myStepLen->setMinValue(myPropTime->value()/10000.);
196 void VisuGUI_StreamLinesDlg::storeToPrsObject(VISU::StreamLines_i* thePrs) {
197 thePrs->SetStepLength(myStepLen->value());
198 thePrs->SetIntegrationStep(myIntegStepLen->value());
199 thePrs->SetPropagationTime(myPropTime->value());
200 switch (myDirCombo->currentItem()) {
202 thePrs->SetDirection(VISU::StreamLines::FORWARD);
205 thePrs->SetDirection(VISU::StreamLines::BACKWARD);
208 thePrs->SetDirection(VISU::StreamLines::BOTH);
210 thePrs->setColored(myUseScalar->isChecked());
211 if(!thePrs->isColored()){
212 SALOMEDS::Color aColor;
213 aColor.R = myColor.red()/255.;
214 aColor.G = myColor.green()/255.;
215 aColor.B = myColor.blue()/255.;
216 thePrs->SetColor(aColor);
218 if (myUseSrcChk->isChecked() && (myPrsList.count() > 0)) {
219 thePrs->SetSource(myPrsList[mySrcCombo->currentItem()]);
221 thePrs->SetSource(VISU::Prs3d::_nil());
222 thePrs->SetUsedPoints(myPntPercent->value());
228 void VisuGUI_StreamLinesDlg::setColor( QColor color )
231 SelColor->setPaletteBackgroundColor(myColor);
236 Called when "Select Color" buttonx clicked
238 void VisuGUI_StreamLinesDlg::setVColor()
240 QColor cnew = QColorDialog::getColor( myColor, this );
241 if ( cnew.isValid() )
247 Enbled/disables magnitude coloring
249 void VisuGUI_StreamLinesDlg::enableMagnColor( bool enable )
251 myUseScalar->setEnabled( enable );
256 Called when "Magnitude Coloring" check box clicked
258 void VisuGUI_StreamLinesDlg::enableSetColor()
260 SelColor->setEnabled(!myUseScalar->isChecked() );
263 void VisuGUI_StreamLinesDlg::PropagationTimeChanged(double theValue) {
264 myStepLen->setMaxValue(theValue);
265 myStepLen->setMinValue(theValue/1000000.);