-// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
// File : EntityGUI_FieldDlg.cxx
#include <OCCViewer_ViewManager.h>
#include <SVTK_ViewModel.h>
#include <SALOME_Prs.h>
-#include <SALOME_ListIteratorOfListIO.hxx>
+#include <SALOME_ListIO.hxx>
#include <SUIT_Desktop.h>
#include <SUIT_MessageBox.h>
#include <QGridLayout>
#include <QGroupBox>
#include <QHeaderView>
+#include <QInputDialog>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <SALOMEDS_wrap.hxx>
#include <GEOMImpl_Types.hxx>
+#ifdef max
+ #undef max
+#endif
+
const int theIntLimit = std::numeric_limits<int>::max() - 10;
StepTable* myTable;
};
-/*
- Class : EntityGUI_FieldDlg::StepTable
- Description : Table widget
-*/
-
-class EntityGUI_FieldDlg::StepTable : public QTableWidget
-{
- //Q_OBJECT
-
- int myDataType;
- int myStepID;
- int myStamp;
- GEOM::GEOM_FieldStep_var myStep;
- bool myIsChanged;
-
- QTableWidgetItem * newDefaultItem();
-public:
- StepTable( int stepID, int dataType, int nbRows, int nbColumns,
- QString shapeName, QStringList headers,
- GEOM::GEOM_FieldStep_ptr stepVar, QWidget* = 0 );
- virtual ~StepTable();
-
- QSize minimumSizeHint() const;
-
- void setEditable( bool, int, int );
- bool isEditable( int, int ) const;
-
- void setReadOnly( bool );
- bool isReadOnly() const;
-
- void insertRows( int, int = 1 );
- QString text( int, int );
-
- QList<int> selectedRows();
- void selectRows(const QList<int>& rows);
-
- void setDim( int nbRows, QString shapeName, bool setDefault=true );
- void setNbComps( int nbComps );
- void setDataType( int dataType );
- void setStamp( int stamp ) { myStamp = stamp; }
- int getStamp() { return myStamp; }
- int getStepID() { return myStepID; }
- QStringList getHeaders();
- void setHeaders(const QStringList& headers);
- GEOM::GEOM_FieldStep_var getStep() { return myStep; }
- void setValues(GEOM::GEOM_FieldStep_var& step);
-
- void setIsChanged() { myIsChanged = true; }
-};
-
EntityGUI_FieldDlg::Delegate::Delegate( QObject* parent )
: QItemDelegate( parent ),
myTable( dynamic_cast<EntityGUI_FieldDlg::StepTable*>( parent ) )
setReadOnly( false );
if ( stepVar->_is_nil() )
- return;
+ {
+ connect( horizontalHeader(), SIGNAL( sectionDoubleClicked( int ) ), this, SLOT( headerDblClicked( int ) ) );
+ return;
+ }
myStamp = stepVar->GetStamp();
const int nbColumns = nbComps + 1;
for ( int iC = 1; iC < nbColumns; ++iC )
setItem( iR, iC, new CheckItem( vals[ iV++ ]));
}
+ connect( this, SIGNAL( itemClicked(QTableWidgetItem *)), this, SLOT( setIsChanged() ));
break;
}
case 1:
return;
}
+//=======================================================================
+//function : headerDblClicked
+//purpose : rename column, called when used double-clicks on the header
+//=======================================================================
+
+void EntityGUI_FieldDlg::StepTable::headerDblClicked( int section )
+{
+ if ( section > 0 ) {
+ bool bOk;
+ QString label = QInputDialog::getText( this, EntityGUI_FieldDlg::tr( "RENAME_COMPONENT" ),
+ EntityGUI_FieldDlg::tr ( "COMPONENT_NAME" ), QLineEdit::Normal,
+ horizontalHeaderItem( section )->text(), &bOk );
+ if ( bOk && !label.isEmpty() )
+ horizontalHeaderItem( section )->setText( label );
+ }
+}
+
//=======================================================================
//function : EntityGUI_FieldDlg
//purpose :
switchTableGrpLayout->setMargin(0);
switchTableGrpLayout->setSpacing(0);
- // step browse controls
- myPrevStepBtn = new QPushButton( tr("PREV_STEP"), valsGroup );
+ // step add/rm controls
+ QPushButton* addStepBtn = new QPushButton( tr("ADD_STEP"), valsGroup );
QLabel* curStepLbl = new QLabel(tr("STEP"), valsGroup );
+ myStepEdit = new QLineEdit( valsGroup );
myStepsCombo = new QComboBox(valsGroup);
- myNextStepBtn = new QPushButton( tr("NEXT_STEP"), valsGroup );
+ myStepsCombo->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed );
+ myRmStepBtn = new QPushButton( tr("REMOVE_STEP"), valsGroup );
- // step add/rm controls
- QPushButton* addStepBtn = new QPushButton( tr("ADD_STEP"), valsGroup );
+ // step browse controls
+ myPrevStepBtn = new QPushButton( tr("PREV_STEP"), valsGroup );
QLabel* stampLbl = new QLabel(tr("STAMP"), valsGroup );
myStampSpin = new SalomeApp_IntSpinBox( -theIntLimit, theIntLimit, 1, valsGroup, true, true);
- myRmStepBtn = new QPushButton( tr("REMOVE_STEP"), valsGroup );
-
- valsLayout->addWidget(mySwitchTableWdg, 0, 0, 1, 4);
- valsLayout->addWidget(myPrevStepBtn, 1, 0);
+ myNextStepBtn = new QPushButton( tr("NEXT_STEP"), valsGroup );
+
+ valsLayout->addWidget(mySwitchTableWdg, 0, 0, 1, 5);
+ valsLayout->addWidget(addStepBtn, 1, 0);
valsLayout->addWidget(curStepLbl, 1, 1);
- valsLayout->addWidget(myStepsCombo, 1, 2);
- valsLayout->addWidget(myNextStepBtn, 1, 3);
- valsLayout->addWidget(addStepBtn, 2, 0);
+ valsLayout->addWidget(myStepEdit, 1, 2);
+ valsLayout->addWidget(myStepsCombo, 1, 3);
+ valsLayout->addWidget(myRmStepBtn, 1, 4);
+ valsLayout->addWidget(myPrevStepBtn, 2, 0);
valsLayout->addWidget(stampLbl, 2, 1);
- valsLayout->addWidget(myStampSpin, 2, 2);
- valsLayout->addWidget(myRmStepBtn, 2, 3);
+ valsLayout->addWidget(myStampSpin, 2, 2, 1, 2);
+ valsLayout->addWidget(myNextStepBtn, 2, 4);
- valsLayout->setColumnStretch(2, 5);
+ valsLayout->setColumnStretch(3, 5);
valsLayout->setRowStretch (0, 5);
QVBoxLayout* layout = new QVBoxLayout(centralWidget());
}
// if ( !myField->_is_nil())
// aDisplayer->Display(myField);
+
+ QListIterator<int> anIter( myHiddenFieldStepIds );
+ while( anIter.hasNext() )
+ {
+ const int aStepId = anIter.next();
+ GEOM::GEOM_FieldStep_var step = myField->GetStep( aStepId );
+ if( !step->_is_nil() )
+ aDisplayer->Display( step, false );
+ }
+ aDisplayer->UpdateViewer();
}
//=================================================================================
void EntityGUI_FieldDlg::Init()
{
myDmMode = -1;
+ myHiddenFieldStepIds.clear();
myStepsCombo->clear();
if ( myIsCreation || myField->_is_nil() )
}
else // edition
{
+ // 1) get and sort step IDs
+ // 2) hide all displayed field steps' presentations
+ GEOM_Displayer* aDisplayer = getDisplayer();
+ GEOM::ListOfLong_var stepIDs = myField->GetSteps();
+ size_t i;
+ QList< int > stepsList;
+ for ( i = 0; i < stepIDs->length(); ++i )
+ {
+ int aStepId = stepIDs[i];
+ stepsList.push_back( aStepId );
+ GEOM::GEOM_FieldStep_var step = myField->GetStep( aStepId );
+ if( !step->_is_nil() )
+ {
+ QString anEntry( step->GetStudyEntry() );
+ if( aDisplayer->IsDisplayed( anEntry ) )
+ {
+ aDisplayer->Erase( step, false, false );
+ myHiddenFieldStepIds << aStepId;
+ }
+ }
+ }
+ qSort( stepsList.begin(), stepsList.end() );
+
myIsCreation = false;
CORBA::String_var fName = myField->GetName();
myDimCombo->setEnabled( false );
myNbCompsSpin->setEnabled( false );
- // get and sort step IDs
- GEOM::ListOfLong_var stepIDs = myField->GetSteps();
- QList< int > stepsList;
- for ( size_t i = 0; i < stepIDs->length(); ++i )
- stepsList.push_back( stepIDs[i] );
- qSort( stepsList.begin(), stepsList.end() );
-
myStepsCombo->blockSignals( true );
- for ( size_t i = 0; i < stepIDs->length(); ++i )
+ for ( i = 0; i < stepIDs->length(); ++i )
{
myStepsCombo->insertItem( i, QString::number( stepsList[i] ));
if ( myCurStepID == stepsList[i] )
myEditCurrentArgument = 0;
// re-fill myDimCombo
- const int curDim = getDim();
- updateDims( curDim );
+ //const int curDim = getDim();
+ updateDims( -100 );
// update table
onDimChange();
}
}
+static int findInCombo( QComboBox* where, int what, bool& ok )
+{
+ int idx = 0;
+ ok = false;
+
+ for ( ; idx < where->count() && !ok; idx++ ) {
+ int step = where->itemText( idx ).toInt();
+ if ( step == what ) {
+ ok = true;
+ }
+ else if ( step > what )
+ break;
+ }
+
+ return idx;
+}
+
//=======================================================================
//function : onAddStep
//purpose :
//=======================================================================
void EntityGUI_FieldDlg::onAddStep()
{
- if ( myStepsCombo->count() > 0 )
- myCurStepID = myStepsCombo->itemText( myStepsCombo->count()-1 ).toInt() + 1;
+ int step = 0;
- myStepsCombo->insertItem( myStepsCombo->count(), QString::number( myCurStepID ));
- myStepsCombo->setCurrentIndex( myStepsCombo->count() - 1 );
+ if ( !myStepEdit->text().isEmpty() )
+ step = myStepEdit->text().toInt();
+ bool ok = false;
+ int idx = findInCombo( myStepsCombo, step, ok );
+
+ if ( ok ) {
+ SUIT_MessageBox::critical(this, QObject::tr("ERR_ERROR"),
+ tr("ERR_STEP_EXISTS"));
+ return;
+ }
+
+ myStepsCombo->insertItem( idx, QString::number( step ));
+ myStepsCombo->setCurrentIndex( idx );
myRemovedSteps.remove( getCurStepID() );
//showCurStep();
}
//function : onRmStep
//purpose :
//=======================================================================
-
void EntityGUI_FieldDlg::onRmStep()
{
if ( myStepsCombo->count() > 1 )
//function : onStampChange
//purpose :
//=======================================================================
-
void EntityGUI_FieldDlg::onStampChange()
{
if ( myCurStepTable )
//function : showCurStep
//purpose :
//=======================================================================
-
void EntityGUI_FieldDlg::showCurStep()
{
- myCurStepID = getCurStepID();
+ myCurStepID = getCurStepID();
+ myStepEdit->setText(QString::number( myCurStepID ));
QStringList headers;
if ( myCurStepTable )
//function : getDim
//purpose :
//=======================================================================
-
int EntityGUI_FieldDlg::getDim() const
{
int i = myDimCombo->currentIndex();
//function : getDataType
//purpose :
//=======================================================================
-
int EntityGUI_FieldDlg::getDataType() const
{
return myTypeCombo->currentIndex();
//function : getCurStepID
//purpose :
//=======================================================================
-
int EntityGUI_FieldDlg::getCurStepID() const
{
if ( myStepsCombo->count() > 0 )
//function : getNbComps
//purpose :
//=======================================================================
-
int EntityGUI_FieldDlg::getNbComps() const
{
return myNbCompsSpin->value();
//function : updateDims
//purpose : update myDimCombo
//=======================================================================
-
void EntityGUI_FieldDlg::updateDims(int curDim)
{
myDimCombo->blockSignals( true );
{
exp.Init( aShape, getShapeType(&dim));
if ( exp.More() && !aShape.IsSame( exp.Current() ))
- {
myDimCombo->insertItem( dim, tr( subNames[dim] ), dim );
- if ( dim == curDim ) // restore current dim
- myDimCombo->setCurrentIndex( myDimCombo->count()-1 );
- }
}
myDimCombo->insertItem( 4, tr("WHOLE"), -1 );
- if ( getDim() != curDim )
- myDimCombo->setCurrentIndex( myDimCombo->count()-1 );
+
+ int idx = myDimCombo->findData( curDim );
+ if ( idx != -1 )
+ myDimCombo->setCurrentIndex( idx );
+ else
+ myDimCombo->setCurrentIndex( myDimCombo->count()-1-(myDimCombo->count()>1?1:0) );
}
myDimCombo->blockSignals( false );
}
for ( ; i_tbl != myStepTables.end(); ++i_tbl )
{
StepTable* tbl = i_tbl.value();
+ QString stepName = (tr("STEP")+" %1 %2").arg( tbl->getStepID() ).arg( tbl->getStamp() );
+
GEOM::GEOM_FieldStep_var step = tbl->getStep();
if ( step->_is_nil() )
{
{
step = myField->AddStep( tbl->getStepID(), tbl->getStamp() );
- QString stepName = (tr("STEP")+" %1 %2").arg( tbl->getStepID() ).arg( tbl->getStamp() );
SALOMEDS::SObject_wrap aSO =
getGeomEngine()->AddInStudy( aStudyDS, step, stepName.toLatin1().constData(), myField );
if ( /*!myIsCreation &&*/ !aSO->_is_nil() ) {
}
}
}
+ else if ( step->GetStamp() != tbl->getStamp() )
+ {
+ // update a stamp in the object browser
+ CORBA::String_var entry = step->GetStudyEntry();
+ if ( entry.in() ) {
+ SALOMEDS::SObject_wrap SO = aStudyDS->FindObjectID( entry.in() );
+ if ( !SO->_is_nil() )
+ aBuilder->SetName( SO, stepName.toLatin1().constData() );
+ }
+ }
+
tbl->setValues( step );
+
+ // update the presentation if it is displayed
+ CORBA::String_var aStepEntry = step->GetStudyEntry();
+ Handle(SALOME_InteractiveObject) aStepIO =
+ new SALOME_InteractiveObject( aStepEntry.in(), "GEOM", "TEMP_IO" );
+ getDisplayer()->Redisplay( aStepIO, false, false );
}
+ getDisplayer()->UpdateViewer();
// remove steps
if ( !myIsCreation )