// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
-// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
//
//
#include "SUIT_Desktop.h"
#include "SUIT_ResourceMgr.h"
+#include "SUIT_Session.h"
+#include "SUIT_MessageBox.h"
-#include "SalomeApp_Application.h"
+#include "LightApp_Application.h"
#include "SalomeApp_Tools.h"
#include "SalomeApp_Study.h"
// Purpose : Constructor
//=======================================================================
SMESHGUI_FilterTable::SMESHGUI_FilterTable( SMESHGUI* theModule,
- QWidget* parent,
+ QWidget* parent,
const int type)
: QFrame(parent),
myIsLocked( false ),
// Purpose : Constructor
//=======================================================================
SMESHGUI_FilterTable::SMESHGUI_FilterTable( SMESHGUI* theModule,
- QWidget* parent,
+ QWidget* parent,
const QValueList<int>& types)
: QFrame(parent),
myIsLocked( false ),
aCriterion == FT_BelongToGeom ||
aCriterion == FT_BelongToPlane ||
aCriterion == FT_BelongToCylinder ||
- aCriterion == FT_LyingOnGeom) {
+ aCriterion == FT_BelongToGenSurface ||
+ aCriterion == FT_LyingOnGeom) {
if (aTable->text(i, 2).isEmpty()) {
if (theMess)
QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"),
aCriterionType != FT_BelongToGeom &&
aCriterionType != FT_BelongToPlane &&
aCriterionType != FT_BelongToCylinder &&
+ aCriterionType != FT_BelongToGenSurface &&
aCriterionType != FT_LyingOnGeom)
{
theCriterion.Compare = ((ComboItem*)aTable->item(theRow, 1))->GetValue();
theCriterion.Threshold = aTable->item(theRow, 2)->text().toDouble();
}
else
- theCriterion.ThresholdStr = aTable->text(theRow, 2).latin1();
+ {
+ theCriterion.ThresholdStr = aTable->text(theRow, 2).latin1();
+ if ( aCriterionType != FT_RangeOfIds )
+ theCriterion.ThresholdID = aTable->text( theRow, 5 ).latin1();
+ }
QTableItem* anItem = aTable->item(theRow, 0);
if (myAddWidgets.contains(anItem))
aTable->SetEditable(false, theRow, 4);
if (theCriterion.Type != FT_RangeOfIds &&
- theCriterion.Type != FT_BelongToGeom &&
- theCriterion.Type != FT_BelongToPlane &&
- theCriterion.Type != FT_BelongToCylinder &&
- theCriterion.Type != FT_LyingOnGeom)
+ theCriterion.Type != FT_BelongToGeom &&
+ theCriterion.Type != FT_BelongToPlane &&
+ theCriterion.Type != FT_BelongToCylinder &&
+ theCriterion.Type != FT_BelongToGenSurface &&
+ theCriterion.Type != FT_LyingOnGeom &&
+ theCriterion.Type != FT_FreeBorders &&
+ theCriterion.Type != FT_FreeEdges &&
+ theCriterion.Type != FT_BadOrientedVolume)
aTable->setText(theRow, 2, QString("%1").arg(theCriterion.Threshold, 0, 'g', 15));
else
- aTable->setText(theRow, 2, QString(theCriterion.ThresholdStr));
+ {
+ aTable->setText(theRow, 2, QString(theCriterion.ThresholdStr));
+ if ( theCriterion.Type != FT_RangeOfIds )
+ aTable->setText( theRow, 5, QString( theCriterion.ThresholdID ) );
+ }
if (theCriterion.Compare == FT_EqualTo ||
theCriterion.Type == FT_BelongToPlane ||
- theCriterion.Type == FT_BelongToCylinder)
+ theCriterion.Type == FT_BelongToCylinder ||
+ theCriterion.Type == FT_BelongToGenSurface)
{
QTableItem* anItem = aTable->item(theRow, 0);
if (!myAddWidgets.contains(anItem))
if (aTable->isRowSelected(i))
{
aRows.resize(aRows.size() + 1);
- aRows[ aRows.size() - 1 ] = i;
+ aRows[ (int)(aRows.size() - 1) ] = i;
removeAdditionalWidget(aTable, i);
}
}
GetCriterionType(aRow) != FT_LyingOnGeom &&
GetCriterionType(aRow) != FT_RangeOfIds &&
GetCriterionType(aRow) != FT_FreeEdges &&
- GetCriterionType(aRow) != FT_BadOrientedVolume;
+ GetCriterionType(aRow) != FT_BadOrientedVolume;
if (!myAddWidgets.contains(anItem))
{
myAddWidgets[ anItem ] = new AdditionalWidget(myWgStack);
aTable->SetEditable(false, row, 2);
}
else if (aCriterionType == SMESH::FT_RangeOfIds ||
- aCriterionType == SMESH::FT_BelongToGeom ||
- aCriterionType == SMESH::FT_BelongToPlane ||
- aCriterionType == SMESH::FT_BelongToCylinder ||
- aCriterionType == SMESH::FT_LyingOnGeom)
+ aCriterionType == SMESH::FT_BelongToGeom ||
+ aCriterionType == SMESH::FT_BelongToPlane ||
+ aCriterionType == SMESH::FT_BelongToCylinder ||
+ aCriterionType == SMESH::FT_BelongToGenSurface ||
+ aCriterionType == SMESH::FT_LyingOnGeom)
{
QMap<int, QString> aMap;
aMap[ FT_EqualTo ] = tr("EQUAL_TO");
aCriteria[ SMESH::FT_BelongToGeom ] = tr("BELONG_TO_GEOM");
aCriteria[ SMESH::FT_BelongToPlane ] = tr("BELONG_TO_PLANE");
aCriteria[ SMESH::FT_BelongToCylinder ] = tr("BELONG_TO_CYLINDER");
+ aCriteria[ SMESH::FT_BelongToGenSurface]= tr("BELONG_TO_GENSURFACE");
aCriteria[ SMESH::FT_LyingOnGeom ] = tr("LYING_ON_GEOM");
}
return aCriteria;
aCriteria[ SMESH::FT_BelongToGeom ] = tr("BELONG_TO_GEOM");
aCriteria[ SMESH::FT_BelongToPlane ] = tr("BELONG_TO_PLANE");
aCriteria[ SMESH::FT_BelongToCylinder ] = tr("BELONG_TO_CYLINDER");
+ aCriteria[ SMESH::FT_BelongToGenSurface]= tr("BELONG_TO_GENSURFACE");
aCriteria[ SMESH::FT_LyingOnGeom ] = tr("LYING_ON_GEOM");
}
return aCriteria;
aCriteria[ SMESH::FT_BelongToGeom ] = tr("BELONG_TO_GEOM");
aCriteria[ SMESH::FT_BelongToPlane ] = tr("BELONG_TO_PLANE");
aCriteria[ SMESH::FT_BelongToCylinder ] = tr("BELONG_TO_CYLINDER");
+ aCriteria[ SMESH::FT_BelongToGenSurface]= tr("BELONG_TO_GENSURFACE");
aCriteria[ SMESH::FT_LyingOnGeom ] = tr("LYING_ON_GEOM");
aCriteria[ SMESH::FT_Length2D ] = tr("LENGTH2D");
aCriteria[ SMESH::FT_MultiConnection2D] = tr("MULTI2D_BORDERS");
aCriteria[ SMESH::FT_BelongToGeom ] = tr("BELONG_TO_GEOM");
aCriteria[ SMESH::FT_LyingOnGeom ] = tr("LYING_ON_GEOM");
aCriteria[ SMESH::FT_BadOrientedVolume ] = tr("BAD_ORIENTED_VOLUME");
+ aCriteria[ SMESH::FT_Volume3D ] = tr("VOLUME_3D");
}
return aCriteria;
}
const int theType)
{
// create table
- Table* aTable= new Table(0, 5, theParent);
+ Table* aTable= new Table(0, 6, theParent);
QHeader* aHeaders = aTable->horizontalHeader();
aHeaders->setLabel(2, tr("THRESHOLD_VALUE"));
aHeaders->setLabel(3, tr("UNARY"));
aHeaders->setLabel(4, tr("BINARY") + " ");
+ aHeaders->setLabel( 5, tr( "ID" ) );
// set geometry of the table
for (int i = 0; i <= 4; i++)
aTable->adjustColumn(i);
+ // set the ID column invisible
+ aTable->hideColumn( 5 );
+
aTable->updateGeometry();
QSize aSize = aTable->sizeHint();
int aWidth = aSize.width();
return false;
}
+//=======================================================================
+// name : SMESHGUI_FilterTable::SetID
+// Purpose : Set text and internal value in cell of ID value
+//=======================================================================
+void SMESHGUI_FilterTable::SetID( const int theRow,
+ const QString& theText,
+ const int theEntityType )
+{
+ Table* aTable = myTables[ theEntityType == -1 ? GetType() : theEntityType ];
+ aTable->setText( theRow, 5, theText );
+}
+
+//=======================================================================
+// name : SMESHGUI_FilterTable::GetID
+// Purpose : Get text and internal value from cell of ID value
+//=======================================================================
+bool SMESHGUI_FilterTable::GetID( const int theRow,
+ QString& theText,
+ const int theEntityType )
+{
+ Table* aTable = myTables[ theEntityType == -1 ? GetType() : theEntityType ];
+ QTableItem* anItem = aTable->item( theRow, 5 );
+ if ( anItem != 0 )
+ {
+ theText = anItem->text();
+ return true;
+ }
+ else
+ return false;
+}
+
/*
Class : SMESHGUI_FilterDlg
Description : Dialog to specify filters for VTK viewer
: QDialog( SMESH::GetDesktop( theModule ), theName, false,
WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu),
mySMESHGUI( theModule ),
- mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ),
- myViewWindow( SMESH::GetViewWindow( theModule ) ),
- mySelector( myViewWindow->GetSelector() )
+ mySelectionMgr( SMESH::GetSelectionMgr( theModule ) )
{
+ if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+ mySelector = aViewWindow->GetSelector();
+
construct(theTypes);
}
mySMESHGUI( theModule ),
mySelectionMgr( SMESH::GetSelectionMgr( theModule ) )
{
- myViewWindow = SMESH::GetViewWindow( theModule );
- mySelector = myViewWindow->GetSelector();
+ if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+ mySelector = aViewWindow->GetSelector();
QValueList<int> aTypes;
aTypes.append(theType);
construct(aTypes);
aDlgLay->setStretchFactor(myMainFrame, 1);
+ myHelpFileName = "selection_filter_library_page.html";
+
Init(myTypes);
}
myButtons[ BTN_Cancel ] = new QPushButton(tr("SMESH_BUT_CANCEL"), aGrp);
myButtons[ BTN_Close ] = new QPushButton(tr("SMESH_BUT_CLOSE"), aGrp);
+ myButtons[ BTN_Help ] = new QPushButton(tr("SMESH_BUT_HELP"), aGrp);
connect(myButtons[ BTN_OK ], SIGNAL(clicked()), SLOT(onOk()));
connect(myButtons[ BTN_Cancel ], SIGNAL(clicked()), SLOT(onClose()));
connect(myButtons[ BTN_Close ], SIGNAL(clicked()), SLOT(onClose()));
connect(myButtons[ BTN_Apply ], SIGNAL(clicked()), SLOT(onApply()));
+ connect(myButtons[ BTN_Help ], SIGNAL(clicked()), SLOT(onHelp()));
updateMainButtons();
connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), SLOT(onDeactivate()));
connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), SLOT(onClose()));
-
- int x, y;
- mySMESHGUI->DefineDlgPosition(this, x, y);
- this->move(x, y);
-
+
updateMainButtons();
updateSelection();
aResMap.Add(anIndMap(i));
mySelector->AddOrRemoveIndex( anIter.Key(), aResMap, false);
- myViewWindow->highlight( anIter.Key(), true, true );
+ if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+ aViewWindow->highlight( anIter.Key(), true, true );
}
mySelectionMgr->setSelectedObjects(aList, false);
}
return;
}
+//=================================================================================
+// function : onHelp()
+// purpose :
+//=================================================================================
+void SMESHGUI_FilterDlg::onHelp()
+{
+ LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication());
+ if (app)
+ app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
+ else {
+ QString platform;
+#ifdef WIN32
+ platform = "winapplication";
+#else
+ platform = "application";
+#endif
+ SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
+ QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
+ arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
+ QObject::tr("BUT_OK"));
+ }
+}
+
//=======================================================================
// name : SMESHGUI_FilterDlg::onDeactivate
// Purpose : SLOT called when dialog must be deativated
{
int aType = myTable->GetCriterionType(i);
if (aType == FT_BelongToGeom ||
- aType == FT_BelongToPlane ||
- aType == FT_BelongToCylinder ||
- aType == FT_LyingOnGeom) {
+ aType == FT_BelongToPlane ||
+ aType == FT_BelongToCylinder ||
+ aType == FT_BelongToGenSurface ||
+ aType == FT_LyingOnGeom) {
QString aName;
myTable->GetThreshold(i, aName);
return false;
}
- if (aType == FT_BelongToCylinder || aType == FT_BelongToPlane) {
+ if (aType == FT_BelongToCylinder ||
+ aType == FT_BelongToPlane ||
+ aType == FT_BelongToGenSurface ) {
CORBA::Object_var anObject = SMESH::SObjectToObject(aList[ 0 ]);
//GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(aList[ 0 ]->GetObject());
GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(anObject);
aCriteria->length(n);
long aPrecision = -1;
- SUIT_ResourceMgr* mgr = SMESHGUI::resourceMgr();
+ SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( mySMESHGUI );
- if (mgr && mgr->hasValue("SMESH", "ControlsPrecision")) {
- QString aStr = mgr->stringValue("SMESH", "ControlsPrecision");
- bool isOk = false;
- int aVal = aStr.toInt(&isOk);
- if (isOk)
- aPrecision = aVal;
- }
+ if ( mgr && mgr->booleanValue( "SMESH", "use_precision", false ) )
+ aPrecision = mgr->integerValue( "SMESH", "controls_precision", aPrecision );
for (CORBA::ULong i = 0; i < n; i++) {
SMESH::Filter::Criterion aCriterion = createCriterion();
//=======================================================================
void SMESHGUI_FilterDlg::insertFilterInViewer()
{
- if (SVTK_InteractorStyle* aStyle = SMESH::GetInteractorStyle()) {
+ if (SVTK_Selector* aSelector = SMESH::GetSelector()) {
SMESH::ElementType anEntType = (SMESH::ElementType)myTable->GetType();
if (myFilter[ myTable->GetType() ]->_is_nil() ||
myFilter[ myTable->GetType() ]->GetPredicate()->_is_nil() ||
!mySetInViewer->isChecked()) {
- SMESH::RemoveFilter(getFilterId(anEntType), aStyle);
- } else {
+ SMESH::RemoveFilter(getFilterId(anEntType), aSelector);
+ }
+ else {
Handle(SMESHGUI_PredicateFilter) aFilter = new SMESHGUI_PredicateFilter();
aFilter->SetPredicate(myFilter[ myTable->GetType() ]->GetPredicate());
- SMESH::SetFilter(aFilter, aStyle);
+ SMESH::RemoveFilter(getFilterId(anEntType), aSelector); //skl for IPAL12631
+ SMESH::SetFilter(aFilter, aSelector);
}
}
}
// Set new selection mode if necessary
Selection_Mode aSelMode = getSelMode(theType);
- if (myViewWindow->SelectionMode()!=aSelMode) {
+ SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI );
+ if ( aViewWindow && aViewWindow->SelectionMode()!=aSelMode) {
mySelectionMgr->clearSelected();
mySelectionMgr->clearFilters();
if (aSelMode == NodeSelection)
SMESH::SetPointRepresentation(true);
- myViewWindow->SetSelectionMode(aSelMode);
+ aViewWindow->SetSelectionMode(aSelMode);
}
// Clear selection
// Set new selection
mySelector->AddOrRemoveIndex(anIO, aMap, false);
- myViewWindow->highlight( anIO, true, true );
+ if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+ aViewWindow->highlight( anIO, true, true );
// insert previously stored filter in viewer if necessary
if (!aFilter.IsNull())
aCriterion.UnaryOp = FT_Undefined;
aCriterion.BinaryOp = FT_Undefined;
aCriterion.ThresholdStr = "";
+ aCriterion.ThresholdID = "";
aCriterion.TypeOfElement = SMESH::ALL;
return aCriterion;
myTable->GetCriterionType(aRow) != FT_BelongToGeom &&
myTable->GetCriterionType(aRow) != FT_BelongToPlane &&
myTable->GetCriterionType(aRow) != FT_BelongToCylinder &&
+ myTable->GetCriterionType(aRow) != FT_BelongToGenSurface &&
myTable->GetCriterionType(aRow) != FT_LyingOnGeom)
return;
Handle(SALOME_InteractiveObject) anIO = aList.First();
GEOM::GEOM_Object_var anObj = SMESH::IObjectToInterface<GEOM::GEOM_Object>(anIO);
if (!anObj->_is_nil())
- myTable->SetThreshold(aRow, GEOMBase::GetName(anObj));
+ {
+ myTable->SetThreshold(aRow, GEOMBase::GetName(anObj));
+ //myTable->SetID( aRow, GEOMBase::GetIORFromObject(anObj));
+ myTable->SetID(aRow, anIO->getEntry());
+ }
}
//=======================================================================
int aRow, aCol;
if (myTable->CurrentCell(aRow, aCol) &&
- (myTable->GetCriterionType(aRow) == FT_BelongToGeom ||
- myTable->GetCriterionType(aRow) == FT_BelongToPlane ||
- myTable->GetCriterionType(aRow) == FT_BelongToCylinder ||
- myTable->GetCriterionType(aRow) == FT_LyingOnGeom)) {
+ (myTable->GetCriterionType(aRow) == FT_BelongToGeom ||
+ myTable->GetCriterionType(aRow) == FT_BelongToPlane ||
+ myTable->GetCriterionType(aRow) == FT_BelongToCylinder ||
+ myTable->GetCriterionType(aRow) == FT_BelongToGenSurface ||
+ myTable->GetCriterionType(aRow) == FT_LyingOnGeom)) {
if (myTable->GetCriterionType(aRow) == FT_BelongToGeom ||
+ myTable->GetCriterionType(aRow) == FT_BelongToGenSurface ||
myTable->GetCriterionType(aRow) == FT_LyingOnGeom) {
mySelectionMgr->installFilter(new GEOM_SelectionFilter( aStudy, true ));
}
}
}
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose :
+//=================================================================================
+void SMESHGUI_FilterDlg::keyPressEvent( QKeyEvent* e )
+{
+ QDialog::keyPressEvent( e );
+ if ( e->isAccepted() )
+ return;
+
+ if ( e->key() == Key_F1 )
+ {
+ e->accept();
+ onHelp();
+ }
+}
+