1 // Copyright (C) 2014-2015 CEA/DEN, EDF R&D, OPEN CASCADE
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 #include "RepairGUI_InspectObjectDlg.h"
25 #include <GEOM_Constants.h>
26 #include <GeometryGUI.h>
27 #include <GEOMUtils.hxx>
30 #include <SUIT_Session.h>
31 #include <SUIT_ResourceMgr.h>
32 #include <SUIT_Desktop.h>
33 #include <SUIT_ViewManager.h>
34 #include <SUIT_ViewWindow.h>
36 #include <LightApp_SelectionMgr.h>
38 #include <SalomeApp_Application.h>
39 #include <SalomeApp_DoubleSpinBox.h>
40 #include <SalomeApp_Study.h>
42 #include <OCCViewer_ViewModel.h>
43 #include <SVTK_ViewModel.h>
46 #include <BRep_Tool.hxx>
48 #include <TopExp_Explorer.hxx>
50 #include <TopoDS_Iterator.hxx>
51 #include <TopTools_IndexedMapOfShape.hxx>
52 #include <TopTools_MapOfShape.hxx>
55 #include <QButtonGroup>
57 #include <QGridLayout>
59 #include <QPushButton>
60 #include <QHeaderView>
61 #include <QItemDelegate>
63 #include <QRadioButton>
64 #include <QStackedLayout>
65 #include <QTreeWidgetItem>
67 // Shape type definitions (values are equal to corresponding types of TopAbs_ShapeEnum).
72 // Comparison type definitions
78 // Default tolerance values
79 #define DEFAULT_TOLERANCE_VALUE 1.e-07
81 //=================================================================================
82 // class : RepairGUI_InspectObjectDlg::TreeWidgetItem
83 // purpose : class for "Inspect Object" tree item creation
84 //=================================================================================
85 class RepairGUI_InspectObjectDlg::TreeWidgetItem : public QTreeWidgetItem
88 TreeWidgetItem(QTreeWidget*,
91 const Handle(SALOME_InteractiveObject)&,
92 double = DEFAULT_TOLERANCE_VALUE,
95 TreeWidgetItem(QTreeWidgetItem*,
99 double = DEFAULT_TOLERANCE_VALUE,
105 void setVisible( bool, QIcon& );
107 TopoDS_Shape getShape() const;
108 Handle(SALOME_InteractiveObject) getIO() const;
110 double getTolerance() const;
111 void setTolerance(double theTolerance);
115 TopoDS_Shape myShape;
116 Handle(SALOME_InteractiveObject) myIO;
121 RepairGUI_InspectObjectDlg::TreeWidgetItem::TreeWidgetItem
123 const QStringList &strings,
124 const TopoDS_Shape &shape,
125 const Handle(SALOME_InteractiveObject) &io,
128 : QTreeWidgetItem( view, strings, type ),
129 myIsVisible( false ),
132 myTolerance (theTolerance)
136 RepairGUI_InspectObjectDlg::TreeWidgetItem::TreeWidgetItem
137 (QTreeWidgetItem *parent,
138 const QStringList &strings,
139 const TopoDS_Shape &shape,
140 const QString &entry,
143 : QTreeWidgetItem( parent, strings, type ),
144 myIsVisible( false ),
146 myTolerance (theTolerance)
148 myIO = new SALOME_InteractiveObject( entry.toLatin1(), "GEOM", "TEMP_IO" );
149 setFlags( flags() | Qt::ItemIsEditable );
152 RepairGUI_InspectObjectDlg::TreeWidgetItem::~TreeWidgetItem()
156 bool RepairGUI_InspectObjectDlg::TreeWidgetItem::isVisible()
161 void RepairGUI_InspectObjectDlg::TreeWidgetItem::setVisible( bool isVisible, QIcon& icon )
163 myIsVisible = isVisible;
167 TopoDS_Shape RepairGUI_InspectObjectDlg::TreeWidgetItem::getShape() const
172 Handle(SALOME_InteractiveObject) RepairGUI_InspectObjectDlg::TreeWidgetItem::getIO() const
177 double RepairGUI_InspectObjectDlg::TreeWidgetItem::getTolerance() const
182 void RepairGUI_InspectObjectDlg::TreeWidgetItem::setTolerance(double theTolerance)
184 myTolerance = theTolerance;
187 //=================================================================================
188 // class : RepairGUI_InspectObjectDlg::Delegate
189 // purpose : class for "Inspect Object" tree item editing
190 //=================================================================================
191 class RepairGUI_InspectObjectDlg::Delegate : public QItemDelegate
194 Delegate( QObject* = 0 );
197 void setEditorData( QWidget*, const QModelIndex& ) const;
198 void setModelData( QWidget*, QAbstractItemModel*, const QModelIndex& ) const;
199 QWidget* createEditor( QWidget*, const QStyleOptionViewItem&, const QModelIndex& ) const;
202 RepairGUI_InspectObjectDlg::Delegate::Delegate( QObject* parent )
203 : QItemDelegate( parent )
207 RepairGUI_InspectObjectDlg::Delegate::~Delegate()
211 void RepairGUI_InspectObjectDlg::Delegate::setEditorData( QWidget* editor,
212 const QModelIndex& index ) const
214 QItemDelegate::setEditorData( editor, index );
215 editor->setProperty( "___name___", editor->property( "text" ) );
218 void RepairGUI_InspectObjectDlg::Delegate::setModelData( QWidget* editor,
219 QAbstractItemModel* model,
220 const QModelIndex& index ) const
222 QString aNewName = editor->property( "text" ).toString();
223 if ( aNewName.trimmed().isEmpty() )
224 editor->setProperty( "text", editor->property( "___name___" ) );
225 QItemDelegate::setModelData( editor, model, index );
228 QWidget* RepairGUI_InspectObjectDlg::Delegate::createEditor( QWidget* parent,
229 const QStyleOptionViewItem& option,
230 const QModelIndex& index ) const
232 return index.column() == 1 ? 0 : QItemDelegate::createEditor( parent, option, index );
235 //=================================================================================
236 // class : RepairGUI_InspectObjectDlg()
237 // purpose : Constructs a RepairGUI_InspectObjectDlg which is a child of 'parent'.
238 //=================================================================================
239 RepairGUI_InspectObjectDlg::RepairGUI_InspectObjectDlg(GeometryGUI *theGeomGUI, SUIT_Desktop* parent )
240 : GEOMBase_Helper (parent),
242 myGeomGUI (theGeomGUI),
244 myFilteredTreeObjects (0),
245 myCurrentTreeObjects (0),
248 myShapeTypeBtnGrp (0),
249 myComparisonCompo (0),
250 myMinTolValLabel (0),
251 myMaxTolValLabel (0),
254 myTransparency (0.0),
255 myIsSelectAll (false),
259 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
260 QIcon iconSelect( resMgr->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) );
261 myVisible = QIcon( resMgr->loadPixmap( "SUIT", tr( "ICON_DATAOBJ_VISIBLE" ) ) );
262 myInvisible = QIcon( resMgr->loadPixmap( "SUIT", tr( "ICON_DATAOBJ_INVISIBLE" ) ) );
264 QPixmap anImageVtx(resMgr->loadPixmap("GEOM", tr("ICON_OBJBROWSER_VERTEX")));
265 QPixmap anImageEdge(resMgr->loadPixmap("GEOM", tr("ICON_OBJBROWSER_EDGE")));
266 QPixmap anImageFace(resMgr->loadPixmap("GEOM", tr("ICON_OBJBROWSER_FACE")));
268 setWindowTitle( tr( "GEOM_INSPECT_OBJECT_TITLE" ) );
269 setAttribute( Qt::WA_DeleteOnClose );
271 myViewWindow = myGeomGUI->getApp()->desktop()->activeWindow();
273 QGridLayout* topLayout = new QGridLayout( this );
274 topLayout->setMargin( 11 ); topLayout->setSpacing( 6 );
276 /********************** Inspected Object **********************/
278 QHBoxLayout* mainShapeLayout = new QHBoxLayout(this);
280 QLabel* label = new QLabel( tr( "GEOM_INSPECT_OBJECT_MAIN_SHAPE" ), this );
281 QPushButton* selBtn = new QPushButton(this);
282 selBtn->setIcon( iconSelect );
283 myEditMainShape = new QLineEdit(this);
284 myEditMainShape->setReadOnly(true);
286 mainShapeLayout->addWidget( label );
287 mainShapeLayout->addWidget( selBtn );
288 mainShapeLayout->addWidget( myEditMainShape );
290 /********************** Tolerance filter **********************/
292 myTolFilterGrp = new QGroupBox (tr("GEOM_INSPECT_TOLERANCE_FILTER"), this);
293 myShapeTypeBtnGrp = new QButtonGroup(myTolFilterGrp);
295 // Filter on shape type
296 QRadioButton *aVtx = new QRadioButton(tr("GEOM_VERTEX"), myTolFilterGrp);
297 QRadioButton *anEdge = new QRadioButton(tr("GEOM_EDGE"), myTolFilterGrp);
298 QRadioButton *aFace = new QRadioButton(tr("GEOM_FACE"), myTolFilterGrp);
300 aVtx->setIcon(anImageVtx);
301 anEdge->setIcon(anImageEdge);
302 aFace->setIcon(anImageFace);
303 myShapeTypeBtnGrp->addButton(aVtx, TYPE_VERTEX);
304 myShapeTypeBtnGrp->addButton(anEdge, TYPE_EDGE);
305 myShapeTypeBtnGrp->addButton(aFace, TYPE_FACE);
307 // Filter on sub-shape tolerance
308 QLabel *aTolLabel = new QLabel(tr("GEOM_TOLERANCE"), myTolFilterGrp);
309 QLabel *aMinTolLabel = new QLabel(tr("GEOM_MIN"), myTolFilterGrp);
310 QLabel *aMaxTolLabel = new QLabel(tr("GEOM_MAX"), myTolFilterGrp);
311 QGridLayout *aFilterLayout = new QGridLayout(myTolFilterGrp);
313 myMinTolValLabel = new QLabel(myTolFilterGrp);
314 myMaxTolValLabel = new QLabel(myTolFilterGrp);
315 myMinTolResetBtn = new QPushButton(tr("GEOM_INSPECT_RESET_MIN"), myTolFilterGrp);
316 myMaxTolResetBtn = new QPushButton(tr("GEOM_INSPECT_RESET_MAX"), myTolFilterGrp);
317 myComparisonCompo = new QComboBox(myTolFilterGrp);
318 myTolEdit = new SalomeApp_DoubleSpinBox(myTolFilterGrp);
319 myTolEdit->setMinimumWidth(120);
320 aFilterLayout->addWidget(aVtx, 0, 0);
321 aFilterLayout->addWidget(anEdge, 0, 1);
322 aFilterLayout->addWidget(aFace, 0, 2);
323 aFilterLayout->addWidget(aMaxTolLabel, 1, 0, Qt::AlignRight);
324 aFilterLayout->addWidget(aTolLabel, 2, 0);
325 aFilterLayout->addWidget(aMinTolLabel, 3, 0, Qt::AlignRight);
326 aFilterLayout->addWidget(myMaxTolValLabel, 1, 1);
327 aFilterLayout->addWidget(myComparisonCompo, 2, 1);
328 aFilterLayout->addWidget(myMinTolValLabel, 3, 1);
329 aFilterLayout->addWidget(myMaxTolResetBtn, 1, 2);
330 aFilterLayout->addWidget(myTolEdit, 2, 2);
331 aFilterLayout->addWidget(myMinTolResetBtn, 3, 2);
332 aFilterLayout->setRowMinimumHeight(0, 30);
334 myTolFilterGrp->setCheckable(true);
336 /********************** Sub-objects trees **********************/
337 createTreeWidget(myTreeObjects);
338 createTreeWidget(myFilteredTreeObjects);
340 myTreesLayout = new QStackedLayout(this);
341 myTreesLayout->addWidget(myTreeObjects);
342 myTreesLayout->addWidget(myFilteredTreeObjects);
344 /********************** Buttons **********************/
346 QVBoxLayout* buttonsLayout1 = new QVBoxLayout(this);
348 QPushButton* buttonShow = new QPushButton( tr( "GEOM_INSPECT_OBJECT_SHOW" ), this );
349 QPushButton* buttonShowOnly = new QPushButton( tr( "GEOM_INSPECT_OBJECT_SHOW_ONLY" ), this );
350 QPushButton* buttonHide = new QPushButton( tr( "GEOM_INSPECT_OBJECT_HIDE" ), this );
351 QPushButton* buttonPublish = new QPushButton( tr( "GEOM_INSPECT_OBJECT_PUBLISH" ), this );
352 QPushButton* aShowAllBtn = new QPushButton(tr("SHOW_ALL_BTN"), this);
353 QPushButton* aHideAllBtn = new QPushButton(tr("HIDE_ALL_BTN"), this);
356 buttonsLayout1->addWidget( buttonShow );
357 buttonsLayout1->addWidget( buttonShowOnly );
358 buttonsLayout1->addWidget( buttonHide );
359 buttonsLayout1->addWidget( aShowAllBtn );
360 buttonsLayout1->addWidget( aHideAllBtn );
361 buttonsLayout1->addWidget( buttonPublish );
362 buttonsLayout1->addStretch();
364 QHBoxLayout* buttonsLayout2 = new QHBoxLayout(this);
366 QPushButton* buttonClose = new QPushButton( tr( "GEOM_BUT_CLOSE" ), this );
367 QPushButton* buttonHelp = new QPushButton( tr( "GEOM_BUT_HELP" ), this );
369 buttonsLayout2->addWidget( buttonClose );
370 buttonsLayout2->addStretch();
371 buttonsLayout2->addWidget( buttonHelp );
373 topLayout->addLayout( mainShapeLayout, 0, 0 );
374 topLayout->addWidget( myTolFilterGrp, 1, 0);
375 topLayout->addLayout( myTreesLayout, 2, 0 );
376 topLayout->addLayout( buttonsLayout1, 0, 1, 3, 1 );
377 topLayout->addLayout( buttonsLayout2, 3, 0, 1, 2 );
379 connect( selBtn, SIGNAL( clicked() ), this, SLOT( onEditMainShape() ) );
381 connect( buttonShow, SIGNAL( clicked() ), this, SLOT( clickOnShow() ) );
382 connect( buttonShowOnly, SIGNAL( clicked() ), this, SLOT( clickOnShowOnly() ) );
383 connect( buttonHide, SIGNAL( clicked() ), this, SLOT( clickOnHide() ) );
384 connect( buttonPublish, SIGNAL( clicked() ), this, SLOT( clickOnPublish() ) );
385 connect( buttonClose, SIGNAL( clicked() ), this, SLOT( reject() ) );
386 connect( buttonHelp, SIGNAL( clicked() ), this, SLOT( clickOnHelp() ) );
387 connect( aShowAllBtn, SIGNAL( clicked() ), this, SLOT( clickOnShowAll() ) );
388 connect( aHideAllBtn, SIGNAL( clicked() ), this, SLOT( clickOnHideAll() ) );
393 RepairGUI_InspectObjectDlg::~RepairGUI_InspectObjectDlg()
397 // restore initial parameters for viewer
398 getDisplayer()->UnsetColor();
399 getDisplayer()->UnsetWidth();
400 // no need to delete child widgets, Qt does it all for us
403 //=================================================================================
404 // function : createTreeWidget()
406 //=================================================================================
407 void RepairGUI_InspectObjectDlg::createTreeWidget(QTreeWidget *&theTreeObjects)
409 theTreeObjects = new QTreeWidget(this);
410 theTreeObjects->setColumnCount(2);
411 QStringList columnNames;
412 columnNames.append(tr("GEOM_INSPECT_OBJECT_NAME"));
413 columnNames.append("");
414 theTreeObjects->setHeaderLabels(columnNames);
415 QTreeWidgetItem* headerItem = new QTreeWidgetItem(columnNames);
417 headerItem->setIcon(1, myInvisible);
418 theTreeObjects->setHeaderItem(headerItem);
419 theTreeObjects->header()->moveSection(1, 0);
420 theTreeObjects->header()->setClickable(true);
421 theTreeObjects->header()->setMovable(false);
422 theTreeObjects->header()->setResizeMode( 1, QHeaderView::ResizeToContents);
423 theTreeObjects->setSelectionMode(QAbstractItemView::ExtendedSelection);
424 theTreeObjects->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::EditKeyPressed);
425 // set custom item delegate
426 theTreeObjects->setItemDelegate(new Delegate(theTreeObjects));
429 //=================================================================================
431 // purpose : initialize dialog data
432 //=================================================================================
433 void RepairGUI_InspectObjectDlg::init()
435 myTolFilterGrp->setChecked(false);
436 myComparisonCompo->addItem(">", GEOMUtils::CC_GT);
437 myComparisonCompo->addItem(">=", GEOMUtils::CC_GE);
438 myComparisonCompo->addItem("<", GEOMUtils::CC_LT);
439 myComparisonCompo->addItem("<=", GEOMUtils::CC_LE);
441 initSpinBox(myTolEdit, 0., 100., DEFAULT_TOLERANCE_VALUE, "len_tol_precision");
442 myTolEdit->setValue(DEFAULT_TOLERANCE_VALUE);
444 // Signals and slots connections
445 initTreeWidget(myTreeObjects);
446 initTreeWidget(myFilteredTreeObjects);
447 myCurrentTreeObjects = myTreeObjects;
448 myMaxTolResetBtn->setEnabled(false);
449 myMinTolResetBtn->setEnabled(false);
451 connect(myMinTolResetBtn, SIGNAL(clicked()), this, SLOT(clickOnResetToMin()));
452 connect(myMaxTolResetBtn, SIGNAL(clicked()), this, SLOT(clickOnResetToMax()));
453 connect(myShapeTypeBtnGrp, SIGNAL(buttonClicked(int)), this, SLOT(onInitFilteredData()));
454 connect(myGeomGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
455 connect(myGeomGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(reject()));
457 connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ),
458 this, SLOT( onViewSelectionChanged() ) );
460 connect( myGeomGUI->getApp()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
461 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
463 // Connect signals and slots for filter group box elements.
464 connect(myTolFilterGrp, SIGNAL(toggled(bool)),
465 this, SLOT(onFilterToggled(bool)));
466 connect(myComparisonCompo, SIGNAL(currentIndexChanged(int)),
467 this, SLOT(onFilterData()));
468 connect(myTolEdit, SIGNAL(valueChanged(double)),
469 this, SLOT(onFilterData()));
472 connect( myViewWindow->getViewManager(), SIGNAL( deleteView( SUIT_ViewWindow* ) ),
473 this, SLOT( onCloseView( SUIT_ViewWindow* ) ), Qt::UniqueConnection );
475 // Initialize the dialog with current selection.
476 onViewSelectionChanged();
479 //=================================================================================
480 // function : initSpinBox()
482 //=================================================================================
483 void RepairGUI_InspectObjectDlg::initSpinBox(SalomeApp_DoubleSpinBox* spinBox,
484 double min, double max,
485 double step, const char* quantity)
487 // Obtain precision from preferences
488 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
489 int aPrecision = resMgr->integerValue( "Geometry", quantity, 6 );
491 spinBox->setPrecision( aPrecision );
492 spinBox->setDecimals( qAbs( aPrecision ) ); // it's necessary to set decimals before the range setting,
493 // by default Qt rounds boundaries to 2 decimals at setRange
494 spinBox->setRange( min, max );
495 spinBox->setSingleStep( step );
497 // Add a hint for the user saying how to tune precision
498 QString userPropName = QObject::tr( QString( "GEOM_PREF_%1" ).arg( quantity ).toLatin1().constData() );
499 spinBox->setProperty( "validity_tune_hint",
500 QVariant( QObject::tr( "GEOM_PRECISION_HINT" ).arg( userPropName ) ) );
503 //=================================================================================
504 // function : initTreeWidget()
506 //=================================================================================
507 void RepairGUI_InspectObjectDlg::initTreeWidget(QTreeWidget *theTreeObjects)
509 connect(theTreeObjects, SIGNAL(itemClicked (QTreeWidgetItem *, int)),
510 this, SLOT(onItemClicked(QTreeWidgetItem *, int)));
511 connect(theTreeObjects, SIGNAL(itemChanged (QTreeWidgetItem *, int)),
512 this, SLOT(onItemChanged(QTreeWidgetItem *, int)));
513 connect(theTreeObjects, SIGNAL(itemExpanded (QTreeWidgetItem *)),
514 this, SLOT(onItemExpanded(QTreeWidgetItem *)));
515 connect(theTreeObjects, SIGNAL(itemSelectionChanged()),
516 this, SLOT(onItemSelectionChanged()));
518 connect(theTreeObjects->header(), SIGNAL(sectionClicked(int)),
519 this, SLOT(onHeaderClicked(int)));
522 //=================================================================================
523 // function : enterEvent()
525 //=================================================================================
526 void RepairGUI_InspectObjectDlg::enterEvent (QEvent*)
528 if (!myTolFilterGrp->isEnabled())
529 ActivateThisDialog();
532 //=================================================================================
533 // function : checkVisibleIcon()
534 // purpose : set visible or invisible icon in the header of tree
535 //=================================================================================
536 void RepairGUI_InspectObjectDlg::checkVisibleIcon()
538 bool isInvisible = false;
539 QTreeWidgetItemIterator it( myCurrentTreeObjects );
541 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
542 if ( !anItem->isHidden() && !anItem->isVisible() ) {
550 myCurrentTreeObjects->headerItem()->setIcon( 1, myInvisible );
551 myIsSelectAll = false;
554 myCurrentTreeObjects->headerItem()->setIcon( 1, myVisible );
555 myIsSelectAll = true;
559 //=================================================================================
560 // function : addSubObjects()
561 // purpose : add sub-objects to parent object in the tree
562 //=================================================================================
563 void RepairGUI_InspectObjectDlg::addSubObjects
564 (TreeWidgetItem *theParentItem,
565 const TopTools_IndexedMapOfShape &theIndices)
567 TreeWidgetItem* aMainItem = dynamic_cast<TreeWidgetItem*>( myTreeObjects->topLevelItem(0) );
568 TopoDS_Iterator it( theParentItem->getShape() );
569 for ( ; it.More(); it.Next() ) {
570 TopoDS_Shape aSubShape = it.Value();
571 int anIndex = theIndices.FindIndex(aSubShape);
572 QString anEntry = QString( "TEMP_" ) + aMainItem->getIO()->getEntry() + QString("_%1").arg( anIndex );
573 TreeWidgetItem* anItem = new TreeWidgetItem( theParentItem, QStringList(), aSubShape, anEntry);
574 anItem->setVisible( false, myInvisible );
575 addSubObjects(anItem, theIndices);
579 //=================================================================================
580 // function : onInitFilteredData()
581 // purpose : add sub-objects to parent object in the filtered tree
582 //=================================================================================
583 void RepairGUI_InspectObjectDlg::onInitFilteredData()
585 TreeWidgetItem *aMainItem =
586 dynamic_cast<TreeWidgetItem*>(myFilteredTreeObjects->topLevelItem(0));
592 // Remove the children.
593 SALOME_ListIO aListOfIO;
594 QTreeWidgetItemIterator it(aMainItem);
597 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
598 if (aMainItem != anItem && (anItem->flags() & Qt::ItemIsSelectable) &&
599 anItem->isVisible() && !anItem->isHidden()) {
600 aListOfIO.Append(anItem->getIO());
606 myFilteredTreeObjects->clearSelection();
607 myFilteredTreeObjects->headerItem()->setIcon(1, myInvisible);
608 getDisplayer()->Erase(aListOfIO);
609 getDisplayer()->UpdateViewer();
611 // Delete child items.
612 QList<QTreeWidgetItem *> aListItems = aMainItem->takeChildren();
614 foreach (QTreeWidgetItem *anItem, aListItems) {
618 // Initialize the tree with a new list.
619 TopoDS_Shape aShape = aMainItem->getShape();
620 TopAbs_ShapeEnum aShapeType = aShape.ShapeType();
622 myShapeTypeBtnGrp->button(TYPE_FACE)->setVisible(aShapeType < TYPE_FACE);
623 myShapeTypeBtnGrp->button(TYPE_EDGE)->setVisible(aShapeType < TYPE_EDGE);
624 myShapeTypeBtnGrp->button(TYPE_VERTEX)->setVisible(aShapeType < TYPE_VERTEX);
626 int anId = myShapeTypeBtnGrp->checkedId();
628 myMaxTol = -RealLast();
629 myMinTol = RealLast();
631 if (anId != -1 && myShapeTypeBtnGrp->checkedButton()->isVisible()) {
633 TopTools_MapOfShape aMapFence;
634 TopExp_Explorer anExp(aShape, (TopAbs_ShapeEnum)anId);
635 TopTools_IndexedMapOfShape anIndices;
637 TopExp::MapShapes(aShape, anIndices);
639 for (; anExp.More(); anExp.Next()) {
640 const TopoDS_Shape &aSubShape = anExp.Current();
642 if (aMapFence.Add(aSubShape)) {
644 Standard_Real aTolerance = -1.;
646 switch (aSubShape.ShapeType()) {
648 aTolerance = BRep_Tool::Tolerance(TopoDS::Face(aSubShape));
651 aTolerance = BRep_Tool::Tolerance(TopoDS::Edge(aSubShape));
654 aTolerance = BRep_Tool::Tolerance(TopoDS::Vertex(aSubShape));
660 if (aTolerance < 0.) {
664 if (aTolerance > myMaxTol) {
665 myMaxTol = aTolerance;
668 if (aTolerance < myMinTol) {
669 myMinTol = aTolerance;
672 int anIndex = anIndices.FindIndex(aSubShape);
673 QString anEntry = QString( "TEMP_" ) +
674 aMainItem->getIO()->getEntry() +
675 QString::number(anIndex);
676 TreeWidgetItem* anItem =
677 new TreeWidgetItem(aMainItem, QStringList(),
678 aSubShape, anEntry, aTolerance);
679 anItem->setVisible( false, myInvisible );
684 // Compose names of sub-items if the main item is expanded.
685 if (aMainItem->isExpanded()) {
686 onItemExpanded(aMainItem);
689 myMaxTolResetBtn->setEnabled(myMaxTol >= myMinTol);
690 myMinTolResetBtn->setEnabled(myMaxTol >= myMinTol);
692 if (myMaxTol < myMinTol) {
693 myMinTol = DEFAULT_TOLERANCE_VALUE;
694 myMaxTol = DEFAULT_TOLERANCE_VALUE;
695 myMinTolValLabel->setText(QString::number(DEFAULT_TOLERANCE_VALUE));
696 myMaxTolValLabel->setText(QString::number(DEFAULT_TOLERANCE_VALUE));
697 myTolEdit->setValue(DEFAULT_TOLERANCE_VALUE);
699 myMinTolValLabel->setText(QString::number(myMinTol));
700 myMaxTolValLabel->setText(QString::number(myMaxTol));
702 if (GEOMUtils::CompareToleranceValues(myMinTol, myTolEdit->value()) == 1) {
704 } else if (GEOMUtils::CompareToleranceValues
705 (myMaxTol, myTolEdit->value()) == -1) {
713 //=================================================================================
714 // function : onFilterData()
715 // purpose : filter objects in the filtered tree
716 //=================================================================================
717 void RepairGUI_InspectObjectDlg::onFilterData()
719 TreeWidgetItem *aMainItem =
720 dynamic_cast<TreeWidgetItem*>(myFilteredTreeObjects->topLevelItem(0));
726 SALOME_ListIO aListOfIOToHide;
727 QTreeWidgetItemIterator anIt(aMainItem);
728 const int aCompValue =
729 myComparisonCompo->itemData(myComparisonCompo->currentIndex()).toInt();
730 const double aTolValue = myTolEdit->value();
733 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*anIt);
735 if (aMainItem != anItem) {
736 const bool isToFilter = !GEOMUtils::IsFitCondition
737 ((GEOMUtils::ComparisonCondition) aCompValue,
738 anItem->getTolerance(), aTolValue);
740 if (isToFilter && !anItem->isHidden()) {
741 if (anItem->isVisible()) {
742 aListOfIOToHide.Append(anItem->getIO());
745 anItem->setVisible(false, myInvisible);
748 anItem->setHidden(isToFilter);
754 if (!aListOfIOToHide.IsEmpty()) {
755 getDisplayer()->Erase(aListOfIOToHide);
756 getDisplayer()->UpdateViewer();
762 //=================================================================================
763 // function : displayItem()
764 // purpose : display sub-object of inspected object according its tree item
765 //=================================================================================
766 void RepairGUI_InspectObjectDlg::displayItem( TreeWidgetItem* theItem )
768 GEOM_Displayer* aDisplayer = getDisplayer();
769 if ( theItem == myCurrentTreeObjects->topLevelItem(0) ) {
770 aDisplayer->UnsetColor();
771 aDisplayer->UnsetWidth();
773 else if ( aDisplayer->GetColor() != Quantity_NOC_VIOLET && aDisplayer->GetWidth() != 2.0 ) {
774 aDisplayer->SetColor( Quantity_NOC_VIOLET );
775 aDisplayer->SetWidth( 2.0 );
778 SALOME_Prs* aPrs = aDisplayer->buildSubshapePresentation( theItem->getShape(), theItem->getIO()->getEntry(),
779 GEOM_Displayer::GetActiveView() );
781 displayPreview( aPrs, true, false );
784 //=================================================================================
785 // function : setItemDisplayStatus()
786 // purpose : set visible or invisible status for the same items in the tree
787 //=================================================================================
788 void RepairGUI_InspectObjectDlg::setItemDisplayStatus( TreeWidgetItem* theItem, bool theIsVisible )
790 QTreeWidgetItemIterator it( myCurrentTreeObjects );
792 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
793 if ( anItem->getShape().IsSame( theItem->getShape() ) )
794 anItem->setVisible( theIsVisible, theIsVisible ? myVisible : myInvisible );
799 //=================================================================================
800 // function : setMainObjectTransparency()
801 // purpose : set transparency for the inspected object
802 //=================================================================================
803 void RepairGUI_InspectObjectDlg::setMainObjectTransparency( double theTransparency )
805 SUIT_ViewManager* aViewMan = myViewWindow->getViewManager();
806 SALOME_View* aView = dynamic_cast<SALOME_View*>( aViewMan->getViewModel() );
807 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( myGeomGUI->getApp()->activeStudy() );
809 TreeWidgetItem* aMainItem = dynamic_cast<TreeWidgetItem*>( myCurrentTreeObjects->topLevelItem(0) );
815 aStudy->setObjectProperty( myViewWindow->getViewManager()->getGlobalId(),
816 QString( aMainItem->getIO()->getEntry() ),
817 GEOM::propertyName( GEOM::Transparency ), theTransparency );
819 if ( aView->isVisible( aMainItem->getIO() ) )
820 getDisplayer()->Redisplay( aMainItem->getIO(), true, aView );
823 //=================================================================================
824 // function : restoreParam()
825 // purpose : restore initial parameters of the dialog and the viewer
826 //=================================================================================
827 void RepairGUI_InspectObjectDlg::restoreParam()
829 SUIT_ViewManager* aViewMan = myViewWindow->getViewManager();
830 SALOME_View* aView = dynamic_cast<SALOME_View*>( aViewMan->getViewModel() );
831 GEOM_Displayer* aDisplayer = getDisplayer();
832 // restore initial parameters for viewer
833 aDisplayer->UnsetColor();
834 aDisplayer->UnsetWidth();
836 // restore transparency of main object
837 setMainObjectTransparency( myTransparency );
840 TreeWidgetItem* aMainItem = dynamic_cast<TreeWidgetItem*>( myCurrentTreeObjects->topLevelItem(0) );
841 QTreeWidgetItemIterator it( myCurrentTreeObjects );
843 if ( *it != aMainItem ) {
844 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
845 aDisplayer->Erase( anItem->getIO(), false, false, aView );
846 anItem->setVisible( false, myInvisible );
852 //=================================================================================
853 // function : onEditMainShape()
854 // purpose : called when selection button was clicked
855 //=================================================================================
856 void RepairGUI_InspectObjectDlg::onEditMainShape()
858 if ( myEditMainShape->text().isEmpty() || !myViewWindow )
863 // restore initial parameters for dialog box
864 myEditMainShape->setEnabled( true );
865 myEditMainShape->setText("");
866 myEditMainShape->setFocus();
867 myTreeObjects->clear();
868 myFilteredTreeObjects->clear();
871 //=================================================================================
872 // function : onItemClicked()
873 // purpose : called when tree item was clicked
874 //=================================================================================
875 void RepairGUI_InspectObjectDlg::onItemClicked( QTreeWidgetItem* theItem, int theColumn )
877 if ( theColumn!= 1 || !( theItem->flags() & Qt::ItemIsSelectable ) || !myViewWindow )
880 GEOM_Displayer* aDisplayer = getDisplayer();
882 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>( theItem );
884 if ( anItem->isVisible() ) {
885 aDisplayer->Erase( anItem->getIO(), false, true );
886 setItemDisplayStatus( anItem, false );
889 displayItem( anItem );
890 setItemDisplayStatus( anItem, true );
892 aDisplayer->UpdateViewer();
896 //=================================================================================
897 // function : onItemChanged()
898 // purpose : called when tree item was changed
899 //=================================================================================
900 void RepairGUI_InspectObjectDlg::onItemChanged( QTreeWidgetItem* theItem, int theColumn )
902 if ( theColumn!= 0 || !( theItem->flags() & Qt::ItemIsEditable ) )
905 // rename the same items in the tree
906 QTreeWidgetItemIterator it( myCurrentTreeObjects );
908 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
909 if ( anItem->getShape().IsSame( dynamic_cast<TreeWidgetItem*>( theItem )->getShape() ) )
910 anItem->setText( 0, theItem->text(0) );
915 //=================================================================================
916 // function : onItemExpanded()
917 // purpose : called when tree item was expanded
918 //=================================================================================
919 void RepairGUI_InspectObjectDlg::onItemExpanded( QTreeWidgetItem* theItem )
921 TreeWidgetItem* aMainItem = dynamic_cast<TreeWidgetItem*>( myCurrentTreeObjects->topLevelItem(0) );
922 GEOM::GEOM_Object_var aMainObject = GEOMBase::ConvertIOinGEOMObject( aMainItem->getIO() );
924 for ( int i = 0; i < theItem->childCount(); i++ ) {
925 TreeWidgetItem* aSubItem = dynamic_cast<TreeWidgetItem*>( theItem->child(i) );
926 int anIndex = GEOMBase::GetIndex( aSubItem->getShape(), aMainItem->getShape() );
927 if ( aSubItem->text(0).isEmpty() ) {
928 char* aName = aMainObject->GetSubShapeName( anIndex );
929 if ( !QString( aName ).isEmpty() )
930 aSubItem->setText( 0, QString( aName ) );
932 aSubItem->setText( 0, QString("%1_%2").arg( GEOMBase::TypeName( aSubItem->getShape().ShapeType(), true ) ).arg( anIndex ) );
937 //=================================================================================
938 // function : onItemSelectionChanged()
939 // purpose : called when tree item was selected
940 //=================================================================================
941 void RepairGUI_InspectObjectDlg::onItemSelectionChanged()
946 QList<QTreeWidgetItem*> listItem = myCurrentTreeObjects->selectedItems();
947 SALOME_ListIO aSelected;
948 for ( int i = 0; i < listItem.size(); i++ ) {
949 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>( listItem.at(i) );
950 aSelected.Append( anItem->getIO() );
952 myGeomGUI->getApp()->selectionMgr()->setSelectedObjects( aSelected );
955 //=================================================================================
956 // function : onHeaderClicked()
957 // purpose : called when header item of tree was clicked
958 //=================================================================================
959 void RepairGUI_InspectObjectDlg::onHeaderClicked( int theColumn )
961 if ( theColumn != 1 || !myViewWindow )
964 GEOM_Displayer* aDisplayer = getDisplayer();
966 if ( myIsSelectAll ) {
967 myIsSelectAll = false;
968 myCurrentTreeObjects->headerItem()->setIcon( 1, myInvisible );
969 SALOME_ListIO aListOfIO;
970 QTreeWidgetItemIterator it( myCurrentTreeObjects );
972 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
973 if ( !anItem->isHidden() && ( anItem->flags() & Qt::ItemIsSelectable ) &&
974 anItem->isVisible() ) {
975 aListOfIO.Append( anItem->getIO() );
976 anItem->setVisible( false, myInvisible );
980 aDisplayer->Erase( aListOfIO );
983 myIsSelectAll = true;
984 myCurrentTreeObjects->headerItem()->setIcon( 1, myVisible );
985 QTreeWidgetItemIterator it( myCurrentTreeObjects );
987 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
988 if ( !anItem->isHidden() && ( anItem->flags() & Qt::ItemIsSelectable ) &&
989 !anItem->isVisible() ) {
990 displayItem( anItem );
991 anItem->setVisible( true, myVisible );
997 aDisplayer->UpdateViewer();
1000 //=================================================================================
1001 // function : onViewSelectionChanged()
1002 // purpose : called when selection of object browser was changed
1003 //=================================================================================
1004 void RepairGUI_InspectObjectDlg::onViewSelectionChanged()
1006 if (!myEditMainShape->isEnabled())
1009 //get shape from selection
1010 SALOME_ListIO selected;
1011 myGeomGUI->getApp()->selectionMgr()->selectedObjects(selected);
1013 if ( selected.Extent() != 1 )
1016 if ( !myViewWindow ) {
1017 SUIT_ViewManager* occVm = myGeomGUI->getApp()->getViewManager( OCCViewer_Viewer::Type(), true );
1018 myViewWindow = occVm->getActiveView();
1019 connect( occVm, SIGNAL( deleteView( SUIT_ViewWindow* ) ),
1020 this, SLOT( onCloseView( SUIT_ViewWindow* ) ), Qt::UniqueConnection );
1023 TopoDS_Shape aShape = GEOMBase::GetTopoFromSelection( selected );
1024 if ( aShape.IsNull() )
1027 Handle(SALOME_InteractiveObject) anIO = selected.First();
1028 GEOM::GEOM_Object_var anObject = GEOMBase::ConvertIOinGEOMObject( anIO );
1029 QString aName = anObject->GetName();
1030 CORBA::String_var anEntry = anObject->GetStudyEntry();
1032 myEditMainShape->setText( aName );
1033 myEditMainShape->setEnabled( false );
1035 // remember initial transparency value
1036 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( myGeomGUI->getApp()->activeStudy() );
1037 QVariant v = aStudy->getObjectProperty( myViewWindow->getViewManager()->getGlobalId(),
1038 QString( anEntry.in() ),
1039 GEOM::propertyName( GEOM::Transparency ), myTransparency );
1040 if ( v.canConvert( QVariant::Double ) )
1041 myTransparency = v.toDouble();
1043 TreeWidgetItem* anItem = new TreeWidgetItem
1044 (myTreeObjects, QStringList() << aName, aShape, anIO);
1045 TreeWidgetItem* anItemFiltered = new TreeWidgetItem
1046 (myFilteredTreeObjects, QStringList() << aName, aShape, anIO);
1048 if ( getDisplayer()->IsDisplayed( anEntry.in() ) ) {
1049 anItem->setVisible( true, myVisible );
1050 anItemFiltered->setVisible( true, myVisible );
1052 anItem->setVisible( false, myInvisible );
1053 anItemFiltered->setVisible( false, myInvisible );
1056 setMainObjectTransparency( 0.5 );
1058 // add sub-objects in the tree
1059 TopTools_IndexedMapOfShape anIndices;
1061 TopExp::MapShapes(aShape, anIndices);
1062 addSubObjects(anItem, anIndices);
1063 onInitFilteredData();
1064 updateViewer(false);
1066 // check icon for tree header
1070 //=================================================================================
1071 // function : onWindowActivated()
1072 // purpose : called when other window was activated
1073 //=================================================================================
1074 void RepairGUI_InspectObjectDlg::onWindowActivated( SUIT_ViewWindow* theViewWindow )
1079 connect( theViewWindow->getViewManager(), SIGNAL( deleteView( SUIT_ViewWindow* ) ),
1080 this, SLOT( onCloseView( SUIT_ViewWindow* ) ), Qt::UniqueConnection );
1082 if ( theViewWindow->getViewManager()->getType() != OCCViewer_Viewer::Type() &&
1083 theViewWindow->getViewManager()->getType() != SVTK_Viewer::Type() ) {
1087 myViewWindow = theViewWindow;
1089 if ( myCurrentTreeObjects->topLevelItemCount() > 0 ) {
1090 setMainObjectTransparency( 0.5 );
1091 TreeWidgetItem* aMainItem = dynamic_cast<TreeWidgetItem*>( myCurrentTreeObjects->topLevelItem(0) );
1092 if ( getDisplayer()->IsDisplayed( aMainItem->getIO()->getEntry() ) )
1093 aMainItem->setVisible( true, myVisible );
1095 aMainItem->setVisible( false, myInvisible );
1100 //=================================================================================
1101 // function : onCloseView()
1102 // purpose : called when last view was closed
1103 //=================================================================================
1104 void RepairGUI_InspectObjectDlg::onCloseView( SUIT_ViewWindow* )
1106 if ( myGeomGUI->getApp()->desktop()->windows().size() == 0 ) {
1112 //=================================================================================
1113 // function : clickOnShow()
1114 // purpose : called when "Show selected" button was clicked
1115 //=================================================================================
1116 void RepairGUI_InspectObjectDlg::clickOnShow()
1118 if ( !myViewWindow )
1121 QList<QTreeWidgetItem*> listItem = myCurrentTreeObjects->selectedItems();
1122 for ( int i = 0; i < listItem.size(); i++ ) {
1123 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>( listItem.at(i) );
1124 if ( !anItem->isVisible() ) {
1125 displayItem( anItem );
1126 setItemDisplayStatus( anItem, true );
1129 getDisplayer()->UpdateViewer();
1133 //=================================================================================
1134 // function : clickOnShowOnly()
1135 // purpose : called when "Show only selected" button was clicked
1136 //=================================================================================
1137 void RepairGUI_InspectObjectDlg::clickOnShowOnly()
1139 if ( !myViewWindow )
1142 SALOME_ListIO aListOfIO;
1143 QTreeWidgetItemIterator it( myCurrentTreeObjects );
1145 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
1146 if ( !anItem->isHidden() && ( anItem->flags() & Qt::ItemIsSelectable ) &&
1147 anItem->isVisible() ) {
1148 aListOfIO.Append( anItem->getIO() );
1149 anItem->setVisible( false, myInvisible );
1153 getDisplayer()->Erase( aListOfIO );
1158 //=================================================================================
1159 // function : clickOnHide()
1160 // purpose : called when "Hide selected" button was clicked
1161 //=================================================================================
1162 void RepairGUI_InspectObjectDlg::clickOnHide()
1164 if ( !myViewWindow )
1167 QList<QTreeWidgetItem*> listItem = myCurrentTreeObjects->selectedItems();
1168 for ( int i = 0; i < listItem.size(); i++ ) {
1169 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>( listItem.at(i) );
1170 if ( anItem->isVisible() ) {
1171 getDisplayer()->Erase( anItem->getIO(), false, false );
1172 setItemDisplayStatus( anItem, false );
1175 getDisplayer()->UpdateViewer();
1179 //=================================================================================
1180 // function : clickOnPublish()
1181 // purpose : called when "Publish selected" button was clicked
1182 //=================================================================================
1183 void RepairGUI_InspectObjectDlg::clickOnPublish()
1185 _PTR(Study) studyDS = dynamic_cast<SalomeApp_Study*>( myGeomGUI->getApp()->activeStudy() )->studyDS();
1188 TreeWidgetItem* aMainItem = dynamic_cast<TreeWidgetItem*>( myCurrentTreeObjects->topLevelItem(0) );
1194 GEOM::GEOM_Object_var aMainObject = GEOMBase::ConvertIOinGEOMObject( aMainItem->getIO() );
1196 // find unique indices of selected objects
1197 QList<QTreeWidgetItem*> selectedItems = myCurrentTreeObjects->selectedItems();
1198 QMap< int, QString > anIndices;
1199 GEOM::ListOfLong_var anArray = new GEOM::ListOfLong;
1200 anArray->length( selectedItems.size() );
1202 for ( int i = 0; i < selectedItems.size(); i++ ) {
1203 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>( selectedItems.at(i) );
1204 int anIndex = GEOMBase::GetIndex( anItem->getShape(), aMainItem->getShape() );
1205 if ( anIndices.find( anIndex ) == anIndices.end() &&
1206 anItem != aMainItem ) {
1207 anIndices[ anIndex ] = anItem->text(0);
1208 anArray[j++] = anIndex;
1213 // get selected sub-shapes
1214 GEOM::GEOM_IShapesOperations_var anOper = getGeomEngine()->GetIShapesOperations( getStudyId() );
1215 GEOM::ListOfGO_var aList = anOper->MakeSubShapes( aMainObject, anArray );
1217 // publish sub-shapes
1218 for ( int i = 0; i < aList->length(); i++ )
1219 GeometryGUI::GetGeomGen()->AddInStudy( GeometryGUI::ClientStudyToStudy( studyDS ), aList[i],
1220 anIndices.values().at(i).toStdString().c_str(), aMainObject );
1225 //=================================================================================
1226 // function : clickOnHelp()
1227 // purpose : called when Help button was clicked to open a help page
1228 //=================================================================================
1229 void RepairGUI_InspectObjectDlg::clickOnHelp()
1231 myGeomGUI->getApp()->onHelpContextModule( "GEOM", "inspect_object_operation_page.html" );
1234 //=================================================================================
1235 // function : clickOnResetToMin()
1236 // purpose : called when Reset button was clicked to reset tolerance filter to minimal value.
1237 //=================================================================================
1238 void RepairGUI_InspectObjectDlg::clickOnResetToMin()
1240 if (myMinTol >= myTolEdit->minimum() && myMinTol <= myTolEdit->maximum()) {
1241 myTolEdit->setValue(myMinTol);
1245 //=================================================================================
1246 // function : clickOnResetToMax()
1247 // purpose : called when Reset button was clicked to reset tolerance filter to maximal value.
1248 //=================================================================================
1249 void RepairGUI_InspectObjectDlg::clickOnResetToMax()
1251 if (myMaxTol >= myTolEdit->minimum() && myMaxTol <= myTolEdit->maximum()) {
1252 myTolEdit->setValue(myMaxTol);
1256 //=================================================================================
1257 // function : clickOnShowAll()
1258 // purpose : called when Help button was clicked to show all shapes
1259 //=================================================================================
1260 void RepairGUI_InspectObjectDlg::clickOnShowAll()
1262 myIsSelectAll = false;
1266 //=================================================================================
1267 // function : clickOnHideAll()
1268 // purpose : called when Help button was clicked to hide all shapes
1269 //=================================================================================
1270 void RepairGUI_InspectObjectDlg::clickOnHideAll()
1272 myIsSelectAll = true;
1276 //=================================================================================
1277 // function : DeactivateActiveDialog()
1279 //=================================================================================
1280 void RepairGUI_InspectObjectDlg::DeactivateActiveDialog()
1283 disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
1284 myGeomGUI->SetActiveDialogBox(0);
1289 //=================================================================================
1290 // function : ActivateThisDialog()
1292 //=================================================================================
1293 void RepairGUI_InspectObjectDlg::ActivateThisDialog()
1295 /* Emit a signal to deactivate the active dialog */
1296 myGeomGUI->EmitSignalDeactivateDialog();
1298 myGeomGUI->SetActiveDialogBox( (QDialog*)this );
1300 connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
1301 this, SLOT(onViewSelectionChanged()));
1303 updateViewer(false);
1306 //=================================================================================
1307 // function : onFilterToggled()
1309 //=================================================================================
1310 void RepairGUI_InspectObjectDlg::onFilterToggled(bool isOn)
1313 myCurrentTreeObjects = myFilteredTreeObjects;
1314 myTreesLayout->setCurrentIndex(1);
1316 myCurrentTreeObjects = myTreeObjects;
1317 myTreesLayout->setCurrentIndex(0);
1323 //=================================================================================
1324 // function : updateViewer()
1326 //=================================================================================
1327 void RepairGUI_InspectObjectDlg::updateViewer(const bool theIsHideOtherTree)
1329 GEOM_Displayer *aDisplayer = getDisplayer();
1331 if (theIsHideOtherTree) {
1332 QTreeWidget *aTreeToHide = myCurrentTreeObjects == myTreeObjects ?
1333 myFilteredTreeObjects: myTreeObjects;
1335 // Hide the objects of disappeared tree, do not switch off flags.
1336 SALOME_ListIO aListOfIO;
1337 QTreeWidgetItemIterator it(aTreeToHide);
1340 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
1341 if ((anItem->flags() & Qt::ItemIsSelectable) &&
1342 anItem->isVisible() && !anItem->isHidden()) {
1343 aListOfIO.Append(anItem->getIO());
1349 aDisplayer->Erase(aListOfIO);
1352 // Show the objects that are marked as shown in the appeared tree.
1353 QTreeWidgetItemIterator it2(myCurrentTreeObjects);
1356 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it2);
1357 if ((anItem->flags() & Qt::ItemIsSelectable) &&
1358 anItem->isVisible() && !anItem->isHidden()) {
1359 displayItem(anItem);
1365 aDisplayer->UpdateViewer();