Enable simultaneous usage of several StdMeshersGUI_SubShapeSelectorWdg's

Add SMESH_Gen_i::CountInPyDump(text) which is useful for defining uniquely
named variables in dump python scripts
This commit is contained in:
eap 2020-08-07 12:14:55 +03:00
parent dbbd8a2dbe
commit f435fe5c82
4 changed files with 92 additions and 6 deletions

View File

@ -494,6 +494,8 @@ public:
void CleanPythonTrace(); void CleanPythonTrace();
static int CountInPyDump(const TCollection_AsciiString& text);
// ***************************************** // *****************************************
// Internal methods // Internal methods
// ***************************************** // *****************************************

View File

@ -40,6 +40,8 @@
#include <TColStd_HSequenceOfInteger.hxx> #include <TColStd_HSequenceOfInteger.hxx>
#include <TCollection_AsciiString.hxx> #include <TCollection_AsciiString.hxx>
#include <cstring>
#ifdef _DEBUG_ #ifdef _DEBUG_
static int MYDEBUG = 0; static int MYDEBUG = 0;
#else #else
@ -77,7 +79,7 @@ namespace SMESH
TCollection_AsciiString aCollection(Standard_CString(aString.c_str())); TCollection_AsciiString aCollection(Standard_CString(aString.c_str()));
if(!aCollection.IsEmpty()) if(!aCollection.IsEmpty())
{ {
const std::string & objEntry = SMESH_Gen_i::GetSMESHGen()->GetLastObjEntry(); const std::string & objEntry = aSMESHGen->GetLastObjEntry();
if ( !objEntry.empty() ) if ( !objEntry.empty() )
aCollection += (TVar::ObjPrefix() + objEntry ).c_str(); aCollection += (TVar::ObjPrefix() + objEntry ).c_str();
aSMESHGen->AddToPythonScript(aCollection); aSMESHGen->AddToPythonScript(aCollection);
@ -1388,3 +1390,55 @@ void SMESH_Gen_i::CleanPythonTrace()
myPythonScript->Clear(); myPythonScript->Clear();
} }
} }
//================================================================================
/*!
* \brief Count inclusions of a string in a raw Python dump script
*/
//================================================================================
int SMESH_Gen_i::CountInPyDump(const TCollection_AsciiString& theText)
{
int count = 0;
SALOMEDS::Study_var aStudy = getStudyServant();
if ( CORBA::is_nil( aStudy ))
return count;
SMESH_Gen_i* me = GetSMESHGen();
CORBA::String_var compDataType = me->ComponentDataType();
SALOMEDS::SObject_wrap aSO = aStudy->FindComponent( compDataType.in() );
if ( CORBA::is_nil( aSO ))
return count;
// Trace saved in the study
SALOMEDS::GenericAttribute_wrap attr;
if ( aSO->FindAttribute( attr.inout(), "AttributePythonObject" ))
{
SALOMEDS::AttributePythonObject_var pyAttr =
SALOMEDS::AttributePythonObject::_narrow( attr );
CORBA::String_var script = pyAttr->GetObject();
for ( const char * scriptPos = script.in(); true; ++scriptPos )
if (( scriptPos = strstr( scriptPos, theText.ToCString() )))
++count;
else
break;
}
// New python commands
if ( !me->myPythonScript.IsNull() )
{
const int nbLines = me->myPythonScript->Length();
for ( int i = 1; i <= nbLines; ++i )
{
const TCollection_AsciiString& line = me->myPythonScript->Value( i );
for ( int loc = 1; loc <= line.Length(); ++loc )
if (( loc = line.Location( theText, loc, line.Length() )))
++count;
else
break;
}
}
return count;
}

View File

@ -74,7 +74,8 @@ StdMeshersGUI_SubShapeSelectorWdg
::StdMeshersGUI_SubShapeSelectorWdg( QWidget * parent, ::StdMeshersGUI_SubShapeSelectorWdg( QWidget * parent,
TopAbs_ShapeEnum subShType, TopAbs_ShapeEnum subShType,
const bool toShowList, const bool toShowList,
const bool toShowActivateBtn ): const bool toShowActivateBtn,
const int minListWidth ):
QWidget( parent ), QWidget( parent ),
myMaxSize( -1 ), myMaxSize( -1 ),
myPreviewActor( 0 ) myPreviewActor( 0 )
@ -93,7 +94,7 @@ StdMeshersGUI_SubShapeSelectorWdg
myAddButton = new QPushButton( tr( "SMESH_BUT_ADD" ), this ); myAddButton = new QPushButton( tr( "SMESH_BUT_ADD" ), this );
myRemoveButton = new QPushButton( tr( "SMESH_BUT_REMOVE" ), this ); myRemoveButton = new QPushButton( tr( "SMESH_BUT_REMOVE" ), this );
myListWidget->setSelectionMode( QListWidget::ExtendedSelection ); myListWidget->setSelectionMode( QListWidget::ExtendedSelection );
myListWidget->setMinimumWidth(300); myListWidget->setMinimumWidth( minListWidth );
myListWidget->setWrapping( true ); myListWidget->setWrapping( true );
myActivateButton->setCheckable( true ); myActivateButton->setCheckable( true );
} }
@ -254,6 +255,20 @@ void StdMeshersGUI_SubShapeSelectorWdg::ShowPreview( bool visible)
} }
} }
//================================================================================
/*!
* \brief Connect selection slots
* \param other - another StdMeshersGUI_ObjectReferenceParamWdg
*/
//================================================================================
void StdMeshersGUI_SubShapeSelectorWdg::
AvoidSimultaneousSelection ( StdMeshersGUI_SubShapeSelectorWdg* other)
{
connect(other, SIGNAL(selectionActivated()), this, SLOT(deactivateSelection()));
connect(this, SIGNAL(selectionActivated()), other, SLOT(deactivateSelection()));
}
//================================================================================ //================================================================================
/*! /*!
* \brief Connect/disconnect to change of selection * \brief Connect/disconnect to change of selection
@ -275,7 +290,7 @@ void StdMeshersGUI_SubShapeSelectorWdg::ActivateSelection( bool toActivate )
if ( toActivate ) if ( toActivate )
{ {
connect( mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(selectionIntoArgument())); connect( mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(selectionIntoArgument()));
} }
else else
{ {
@ -284,6 +299,9 @@ void StdMeshersGUI_SubShapeSelectorWdg::ActivateSelection( bool toActivate )
if ( sender() == myActivateButton ) if ( sender() == myActivateButton )
ShowPreview( toActivate ); ShowPreview( toActivate );
if ( toActivate )
emit selectionActivated();
} }
//================================================================================ //================================================================================

View File

@ -53,7 +53,8 @@ public:
StdMeshersGUI_SubShapeSelectorWdg( QWidget* parent = 0, StdMeshersGUI_SubShapeSelectorWdg( QWidget* parent = 0,
TopAbs_ShapeEnum subShType = TopAbs_EDGE, TopAbs_ShapeEnum subShType = TopAbs_EDGE,
const bool toShowList = true, const bool toShowList = true,
const bool toShowSelectBtn = false); const bool toShowSelectBtn = false,
const int minListWidth=300);
~StdMeshersGUI_SubShapeSelectorWdg(); ~StdMeshersGUI_SubShapeSelectorWdg();
SMESH::long_array_var GetListOfIDs(); SMESH::long_array_var GetListOfIDs();
@ -82,12 +83,23 @@ public:
SMESH_PreviewActorsCollection* GetActorCollection() { return myPreviewActor; } SMESH_PreviewActorsCollection* GetActorCollection() { return myPreviewActor; }
void ClearSelected(); void ClearSelected();
void AvoidSimultaneousSelection( StdMeshersGUI_SubShapeSelectorWdg* other);
public slots: public slots:
void ActivateSelection( bool ); void ActivateSelection( bool );
void deactivateSelection() { ActivateSelection( false ); }
signals: signals:
void selectionChanged(); // in the list void selectionChanged(); // in the list
void shapeSelected(); // globally void shapeSelected(); // globally
/*!
* \brief Emitted when selection is activated
*
* Useful to deactivate one Object Reference param widget when an other
* one is activated
*/
void selectionActivated();
private: private:
void updateState(); void updateState();