1 // Copyright (C) 2014-2016 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 #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
421 theTreeObjects->header()->setClickable(true);
422 theTreeObjects->header()->setMovable(false);
423 theTreeObjects->header()->setResizeMode( 1, QHeaderView::ResizeToContents);
425 theTreeObjects->header()->setSectionsClickable(true);
426 theTreeObjects->header()->setSectionsMovable(false);
427 theTreeObjects->header()->setSectionResizeMode( 1, QHeaderView::ResizeToContents);
429 theTreeObjects->setSelectionMode(QAbstractItemView::ExtendedSelection);
430 theTreeObjects->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::EditKeyPressed);
431 // set custom item delegate
432 theTreeObjects->setItemDelegate(new Delegate(theTreeObjects));
435 //=================================================================================
437 // purpose : initialize dialog data
438 //=================================================================================
439 void RepairGUI_InspectObjectDlg::init()
441 myTolFilterGrp->setChecked(false);
442 myComparisonCompo->addItem(">", GEOMUtils::CC_GT);
443 myComparisonCompo->addItem(">=", GEOMUtils::CC_GE);
444 myComparisonCompo->addItem("<", GEOMUtils::CC_LT);
445 myComparisonCompo->addItem("<=", GEOMUtils::CC_LE);
447 initSpinBox(myTolEdit, 0., 100., DEFAULT_TOLERANCE_VALUE, "len_tol_precision");
448 myTolEdit->setValue(DEFAULT_TOLERANCE_VALUE);
450 // Signals and slots connections
451 initTreeWidget(myTreeObjects);
452 initTreeWidget(myFilteredTreeObjects);
453 myCurrentTreeObjects = myTreeObjects;
454 myMaxTolResetBtn->setEnabled(false);
455 myMinTolResetBtn->setEnabled(false);
457 connect(myMinTolResetBtn, SIGNAL(clicked()), this, SLOT(clickOnResetToMin()));
458 connect(myMaxTolResetBtn, SIGNAL(clicked()), this, SLOT(clickOnResetToMax()));
459 connect(myShapeTypeBtnGrp, SIGNAL(buttonClicked(int)), this, SLOT(onInitFilteredData()));
460 connect(myGeomGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
461 connect(myGeomGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(reject()));
463 connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ),
464 this, SLOT( onViewSelectionChanged() ) );
466 connect( myGeomGUI->getApp()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
467 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
469 // Connect signals and slots for filter group box elements.
470 connect(myTolFilterGrp, SIGNAL(toggled(bool)),
471 this, SLOT(onFilterToggled(bool)));
472 connect(myComparisonCompo, SIGNAL(currentIndexChanged(int)),
473 this, SLOT(onFilterData()));
474 connect(myTolEdit, SIGNAL(valueChanged(double)),
475 this, SLOT(onFilterData()));
478 connect( myViewWindow->getViewManager(), SIGNAL( deleteView( SUIT_ViewWindow* ) ),
479 this, SLOT( onCloseView( SUIT_ViewWindow* ) ), Qt::UniqueConnection );
481 // Initialize the dialog with current selection.
482 onViewSelectionChanged();
485 //=================================================================================
486 // function : initSpinBox()
488 //=================================================================================
489 void RepairGUI_InspectObjectDlg::initSpinBox(SalomeApp_DoubleSpinBox* spinBox,
490 double min, double max,
491 double step, const char* quantity)
493 // Obtain precision from preferences
494 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
495 int aPrecision = resMgr->integerValue( "Geometry", quantity, 6 );
497 spinBox->setPrecision( aPrecision );
498 spinBox->setDecimals( qAbs( aPrecision ) ); // it's necessary to set decimals before the range setting,
499 // by default Qt rounds boundaries to 2 decimals at setRange
500 spinBox->setRange( min, max );
501 spinBox->setSingleStep( step );
503 // Add a hint for the user saying how to tune precision
504 QString userPropName = QObject::tr( QString( "GEOM_PREF_%1" ).arg( quantity ).toLatin1().constData() );
505 spinBox->setProperty( "validity_tune_hint",
506 QVariant( QObject::tr( "GEOM_PRECISION_HINT" ).arg( userPropName ) ) );
509 //=================================================================================
510 // function : initTreeWidget()
512 //=================================================================================
513 void RepairGUI_InspectObjectDlg::initTreeWidget(QTreeWidget *theTreeObjects)
515 connect(theTreeObjects, SIGNAL(itemClicked (QTreeWidgetItem *, int)),
516 this, SLOT(onItemClicked(QTreeWidgetItem *, int)));
517 connect(theTreeObjects, SIGNAL(itemChanged (QTreeWidgetItem *, int)),
518 this, SLOT(onItemChanged(QTreeWidgetItem *, int)));
519 connect(theTreeObjects, SIGNAL(itemExpanded (QTreeWidgetItem *)),
520 this, SLOT(onItemExpanded(QTreeWidgetItem *)));
521 connect(theTreeObjects, SIGNAL(itemSelectionChanged()),
522 this, SLOT(onItemSelectionChanged()));
524 connect(theTreeObjects->header(), SIGNAL(sectionClicked(int)),
525 this, SLOT(onHeaderClicked(int)));
528 //=================================================================================
529 // function : enterEvent()
531 //=================================================================================
532 void RepairGUI_InspectObjectDlg::enterEvent (QEvent*)
534 if (!myTolFilterGrp->isEnabled())
535 ActivateThisDialog();
538 //=================================================================================
539 // function : checkVisibleIcon()
540 // purpose : set visible or invisible icon in the header of tree
541 //=================================================================================
542 void RepairGUI_InspectObjectDlg::checkVisibleIcon()
544 bool isInvisible = false;
545 QTreeWidgetItemIterator it( myCurrentTreeObjects );
547 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
548 if ( !anItem->isHidden() && !anItem->isVisible() ) {
556 myCurrentTreeObjects->headerItem()->setIcon( 1, myInvisible );
557 myIsSelectAll = false;
560 myCurrentTreeObjects->headerItem()->setIcon( 1, myVisible );
561 myIsSelectAll = true;
565 //=================================================================================
566 // function : addSubObjects()
567 // purpose : add sub-objects to parent object in the tree
568 //=================================================================================
569 void RepairGUI_InspectObjectDlg::addSubObjects
570 (TreeWidgetItem *theParentItem,
571 const TopTools_IndexedMapOfShape &theIndices)
573 TreeWidgetItem* aMainItem = dynamic_cast<TreeWidgetItem*>( myTreeObjects->topLevelItem(0) );
574 TopoDS_Iterator it( theParentItem->getShape() );
575 for ( ; it.More(); it.Next() ) {
576 TopoDS_Shape aSubShape = it.Value();
577 int anIndex = theIndices.FindIndex(aSubShape);
578 QString anEntry = QString( "TEMP_" ) + aMainItem->getIO()->getEntry() + QString("_%1").arg( anIndex );
579 TreeWidgetItem* anItem = new TreeWidgetItem( theParentItem, QStringList(), aSubShape, anEntry);
580 anItem->setVisible( false, myInvisible );
581 addSubObjects(anItem, theIndices);
585 //=================================================================================
586 // function : onInitFilteredData()
587 // purpose : add sub-objects to parent object in the filtered tree
588 //=================================================================================
589 void RepairGUI_InspectObjectDlg::onInitFilteredData()
591 TreeWidgetItem *aMainItem =
592 dynamic_cast<TreeWidgetItem*>(myFilteredTreeObjects->topLevelItem(0));
598 // Remove the children.
599 SALOME_ListIO aListOfIO;
600 QTreeWidgetItemIterator it(aMainItem);
603 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
604 if (aMainItem != anItem && (anItem->flags() & Qt::ItemIsSelectable) &&
605 anItem->isVisible() && !anItem->isHidden()) {
606 aListOfIO.Append(anItem->getIO());
612 myFilteredTreeObjects->clearSelection();
613 myFilteredTreeObjects->headerItem()->setIcon(1, myInvisible);
614 getDisplayer()->Erase(aListOfIO);
615 getDisplayer()->UpdateViewer();
617 // Delete child items.
618 QList<QTreeWidgetItem *> aListItems = aMainItem->takeChildren();
620 foreach (QTreeWidgetItem *anItem, aListItems) {
624 // Initialize the tree with a new list.
625 TopoDS_Shape aShape = aMainItem->getShape();
626 TopAbs_ShapeEnum aShapeType = aShape.ShapeType();
628 myShapeTypeBtnGrp->button(TYPE_FACE)->setVisible(aShapeType < TYPE_FACE);
629 myShapeTypeBtnGrp->button(TYPE_EDGE)->setVisible(aShapeType < TYPE_EDGE);
630 myShapeTypeBtnGrp->button(TYPE_VERTEX)->setVisible(aShapeType < TYPE_VERTEX);
632 int anId = myShapeTypeBtnGrp->checkedId();
634 myMaxTol = -RealLast();
635 myMinTol = RealLast();
637 if (anId != -1 && myShapeTypeBtnGrp->checkedButton()->isVisible()) {
639 TopTools_MapOfShape aMapFence;
640 TopExp_Explorer anExp(aShape, (TopAbs_ShapeEnum)anId);
641 TopTools_IndexedMapOfShape anIndices;
643 TopExp::MapShapes(aShape, anIndices);
645 for (; anExp.More(); anExp.Next()) {
646 const TopoDS_Shape &aSubShape = anExp.Current();
648 if (aMapFence.Add(aSubShape)) {
650 Standard_Real aTolerance = -1.;
652 switch (aSubShape.ShapeType()) {
654 aTolerance = BRep_Tool::Tolerance(TopoDS::Face(aSubShape));
657 aTolerance = BRep_Tool::Tolerance(TopoDS::Edge(aSubShape));
660 aTolerance = BRep_Tool::Tolerance(TopoDS::Vertex(aSubShape));
666 if (aTolerance < 0.) {
670 if (aTolerance > myMaxTol) {
671 myMaxTol = aTolerance;
674 if (aTolerance < myMinTol) {
675 myMinTol = aTolerance;
678 int anIndex = anIndices.FindIndex(aSubShape);
679 QString anEntry = QString( "TEMP_" ) +
680 aMainItem->getIO()->getEntry() +
681 QString::number(anIndex);
682 TreeWidgetItem* anItem =
683 new TreeWidgetItem(aMainItem, QStringList(),
684 aSubShape, anEntry, aTolerance);
685 anItem->setVisible( false, myInvisible );
690 // Compose names of sub-items if the main item is expanded.
691 if (aMainItem->isExpanded()) {
692 onItemExpanded(aMainItem);
695 myMaxTolResetBtn->setEnabled(myMaxTol >= myMinTol);
696 myMinTolResetBtn->setEnabled(myMaxTol >= myMinTol);
698 if (myMaxTol < myMinTol) {
699 myMinTol = DEFAULT_TOLERANCE_VALUE;
700 myMaxTol = DEFAULT_TOLERANCE_VALUE;
701 myMinTolValLabel->setText(QString::number(DEFAULT_TOLERANCE_VALUE));
702 myMaxTolValLabel->setText(QString::number(DEFAULT_TOLERANCE_VALUE));
703 myTolEdit->setValue(DEFAULT_TOLERANCE_VALUE);
705 myMinTolValLabel->setText(QString::number(myMinTol));
706 myMaxTolValLabel->setText(QString::number(myMaxTol));
708 if (GEOMUtils::CompareToleranceValues(myMinTol, myTolEdit->value()) == 1) {
710 } else if (GEOMUtils::CompareToleranceValues
711 (myMaxTol, myTolEdit->value()) == -1) {
719 //=================================================================================
720 // function : onFilterData()
721 // purpose : filter objects in the filtered tree
722 //=================================================================================
723 void RepairGUI_InspectObjectDlg::onFilterData()
725 TreeWidgetItem *aMainItem =
726 dynamic_cast<TreeWidgetItem*>(myFilteredTreeObjects->topLevelItem(0));
732 SALOME_ListIO aListOfIOToHide;
733 QTreeWidgetItemIterator anIt(aMainItem);
734 const int aCompValue =
735 myComparisonCompo->itemData(myComparisonCompo->currentIndex()).toInt();
736 const double aTolValue = myTolEdit->value();
739 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*anIt);
741 if (aMainItem != anItem) {
742 const bool isToFilter = !GEOMUtils::IsFitCondition
743 ((GEOMUtils::ComparisonCondition) aCompValue,
744 anItem->getTolerance(), aTolValue);
746 if (isToFilter && !anItem->isHidden()) {
747 if (anItem->isVisible()) {
748 aListOfIOToHide.Append(anItem->getIO());
751 anItem->setVisible(false, myInvisible);
754 anItem->setHidden(isToFilter);
760 if (!aListOfIOToHide.IsEmpty()) {
761 getDisplayer()->Erase(aListOfIOToHide);
762 getDisplayer()->UpdateViewer();
768 //=================================================================================
769 // function : displayItem()
770 // purpose : display sub-object of inspected object according its tree item
771 //=================================================================================
772 void RepairGUI_InspectObjectDlg::displayItem( TreeWidgetItem* theItem )
774 GEOM_Displayer* aDisplayer = getDisplayer();
775 if ( theItem == myCurrentTreeObjects->topLevelItem(0) ) {
776 aDisplayer->UnsetColor();
777 aDisplayer->UnsetWidth();
779 else if ( aDisplayer->GetColor() != Quantity_NOC_VIOLET && aDisplayer->GetWidth() != 2.0 ) {
780 aDisplayer->SetColor( Quantity_NOC_VIOLET );
781 aDisplayer->SetWidth( 2.0 );
784 SALOME_Prs* aPrs = aDisplayer->buildSubshapePresentation( theItem->getShape(), theItem->getIO()->getEntry(),
785 GEOM_Displayer::GetActiveView() );
787 displayPreview( aPrs, true, false );
790 //=================================================================================
791 // function : setItemDisplayStatus()
792 // purpose : set visible or invisible status for the same items in the tree
793 //=================================================================================
794 void RepairGUI_InspectObjectDlg::setItemDisplayStatus( TreeWidgetItem* theItem, bool theIsVisible )
796 QTreeWidgetItemIterator it( myCurrentTreeObjects );
798 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
799 if ( anItem->getShape().IsSame( theItem->getShape() ) )
800 anItem->setVisible( theIsVisible, theIsVisible ? myVisible : myInvisible );
805 //=================================================================================
806 // function : setMainObjectTransparency()
807 // purpose : set transparency for the inspected object
808 //=================================================================================
809 void RepairGUI_InspectObjectDlg::setMainObjectTransparency( double theTransparency )
811 SUIT_ViewManager* aViewMan = myViewWindow->getViewManager();
812 SALOME_View* aView = dynamic_cast<SALOME_View*>( aViewMan->getViewModel() );
813 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( myGeomGUI->getApp()->activeStudy() );
815 TreeWidgetItem* aMainItem = dynamic_cast<TreeWidgetItem*>( myCurrentTreeObjects->topLevelItem(0) );
821 aStudy->setObjectProperty( myViewWindow->getViewManager()->getGlobalId(),
822 QString( aMainItem->getIO()->getEntry() ),
823 GEOM::propertyName( GEOM::Transparency ), theTransparency );
825 if ( aView->isVisible( aMainItem->getIO() ) )
826 getDisplayer()->Redisplay( aMainItem->getIO(), true, aView );
829 //=================================================================================
830 // function : restoreParam()
831 // purpose : restore initial parameters of the dialog and the viewer
832 //=================================================================================
833 void RepairGUI_InspectObjectDlg::restoreParam()
835 SUIT_ViewManager* aViewMan = myViewWindow->getViewManager();
836 SALOME_View* aView = dynamic_cast<SALOME_View*>( aViewMan->getViewModel() );
837 GEOM_Displayer* aDisplayer = getDisplayer();
838 // restore initial parameters for viewer
839 aDisplayer->UnsetColor();
840 aDisplayer->UnsetWidth();
842 // restore transparency of main object
843 setMainObjectTransparency( myTransparency );
846 TreeWidgetItem* aMainItem = dynamic_cast<TreeWidgetItem*>( myCurrentTreeObjects->topLevelItem(0) );
847 QTreeWidgetItemIterator it( myCurrentTreeObjects );
849 if ( *it != aMainItem ) {
850 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
851 aDisplayer->Erase( anItem->getIO(), false, false, aView );
852 anItem->setVisible( false, myInvisible );
858 //=================================================================================
859 // function : onEditMainShape()
860 // purpose : called when selection button was clicked
861 //=================================================================================
862 void RepairGUI_InspectObjectDlg::onEditMainShape()
864 if ( myEditMainShape->text().isEmpty() || !myViewWindow )
869 // restore initial parameters for dialog box
870 myEditMainShape->setEnabled( true );
871 myEditMainShape->setText("");
872 myEditMainShape->setFocus();
873 myTreeObjects->clear();
874 myFilteredTreeObjects->clear();
877 //=================================================================================
878 // function : onItemClicked()
879 // purpose : called when tree item was clicked
880 //=================================================================================
881 void RepairGUI_InspectObjectDlg::onItemClicked( QTreeWidgetItem* theItem, int theColumn )
883 if ( theColumn!= 1 || !( theItem->flags() & Qt::ItemIsSelectable ) || !myViewWindow )
886 GEOM_Displayer* aDisplayer = getDisplayer();
888 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>( theItem );
890 if ( anItem->isVisible() ) {
891 aDisplayer->Erase( anItem->getIO(), false, true );
892 setItemDisplayStatus( anItem, false );
895 displayItem( anItem );
896 setItemDisplayStatus( anItem, true );
898 aDisplayer->UpdateViewer();
902 //=================================================================================
903 // function : onItemChanged()
904 // purpose : called when tree item was changed
905 //=================================================================================
906 void RepairGUI_InspectObjectDlg::onItemChanged( QTreeWidgetItem* theItem, int theColumn )
908 if ( theColumn!= 0 || !( theItem->flags() & Qt::ItemIsEditable ) )
911 // rename the same items in the tree
912 QTreeWidgetItemIterator it( myCurrentTreeObjects );
914 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
915 if ( anItem->getShape().IsSame( dynamic_cast<TreeWidgetItem*>( theItem )->getShape() ) )
916 anItem->setText( 0, theItem->text(0) );
921 //=================================================================================
922 // function : onItemExpanded()
923 // purpose : called when tree item was expanded
924 //=================================================================================
925 void RepairGUI_InspectObjectDlg::onItemExpanded( QTreeWidgetItem* theItem )
927 TreeWidgetItem* aMainItem = dynamic_cast<TreeWidgetItem*>( myCurrentTreeObjects->topLevelItem(0) );
928 GEOM::GEOM_Object_var aMainObject = GEOMBase::ConvertIOinGEOMObject( aMainItem->getIO() );
930 for ( int i = 0; i < theItem->childCount(); i++ ) {
931 TreeWidgetItem* aSubItem = dynamic_cast<TreeWidgetItem*>( theItem->child(i) );
932 int anIndex = GEOMBase::GetIndex( aSubItem->getShape(), aMainItem->getShape() );
933 if ( aSubItem->text(0).isEmpty() ) {
934 char* aName = aMainObject->GetSubShapeName( anIndex );
935 if ( !QString( aName ).isEmpty() )
936 aSubItem->setText( 0, QString( aName ) );
938 aSubItem->setText( 0, QString("%1_%2").arg( GEOMBase::TypeName( aSubItem->getShape().ShapeType(), true ) ).arg( anIndex ) );
943 //=================================================================================
944 // function : onItemSelectionChanged()
945 // purpose : called when tree item was selected
946 //=================================================================================
947 void RepairGUI_InspectObjectDlg::onItemSelectionChanged()
952 QList<QTreeWidgetItem*> listItem = myCurrentTreeObjects->selectedItems();
953 SALOME_ListIO aSelected;
954 for ( int i = 0; i < listItem.size(); i++ ) {
955 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>( listItem.at(i) );
956 aSelected.Append( anItem->getIO() );
958 myGeomGUI->getApp()->selectionMgr()->setSelectedObjects( aSelected );
961 //=================================================================================
962 // function : onHeaderClicked()
963 // purpose : called when header item of tree was clicked
964 //=================================================================================
965 void RepairGUI_InspectObjectDlg::onHeaderClicked( int theColumn )
967 if ( theColumn != 1 || !myViewWindow )
970 GEOM_Displayer* aDisplayer = getDisplayer();
972 if ( myIsSelectAll ) {
973 myIsSelectAll = false;
974 myCurrentTreeObjects->headerItem()->setIcon( 1, myInvisible );
975 SALOME_ListIO aListOfIO;
976 QTreeWidgetItemIterator it( myCurrentTreeObjects );
978 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
979 if ( !anItem->isHidden() && ( anItem->flags() & Qt::ItemIsSelectable ) &&
980 anItem->isVisible() ) {
981 aListOfIO.Append( anItem->getIO() );
982 anItem->setVisible( false, myInvisible );
986 aDisplayer->Erase( aListOfIO );
989 myIsSelectAll = true;
990 myCurrentTreeObjects->headerItem()->setIcon( 1, myVisible );
991 QTreeWidgetItemIterator it( myCurrentTreeObjects );
993 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
994 if ( !anItem->isHidden() && ( anItem->flags() & Qt::ItemIsSelectable ) &&
995 !anItem->isVisible() ) {
996 displayItem( anItem );
997 anItem->setVisible( true, myVisible );
1003 aDisplayer->UpdateViewer();
1006 //=================================================================================
1007 // function : onViewSelectionChanged()
1008 // purpose : called when selection of object browser was changed
1009 //=================================================================================
1010 void RepairGUI_InspectObjectDlg::onViewSelectionChanged()
1012 if (!myEditMainShape->isEnabled())
1015 //get shape from selection
1016 SALOME_ListIO selected;
1017 myGeomGUI->getApp()->selectionMgr()->selectedObjects(selected);
1019 if ( selected.Extent() != 1 )
1022 if ( !myViewWindow ) {
1023 SUIT_ViewManager* occVm = myGeomGUI->getApp()->getViewManager( OCCViewer_Viewer::Type(), true );
1024 myViewWindow = occVm->getActiveView();
1025 connect( occVm, SIGNAL( deleteView( SUIT_ViewWindow* ) ),
1026 this, SLOT( onCloseView( SUIT_ViewWindow* ) ), Qt::UniqueConnection );
1029 TopoDS_Shape aShape = GEOMBase::GetTopoFromSelection( selected );
1030 if ( aShape.IsNull() )
1033 Handle(SALOME_InteractiveObject) anIO = selected.First();
1034 GEOM::GEOM_Object_var anObject = GEOMBase::ConvertIOinGEOMObject( anIO );
1035 QString aName = anObject->GetName();
1036 CORBA::String_var anEntry = anObject->GetStudyEntry();
1038 myEditMainShape->setText( aName );
1039 myEditMainShape->setEnabled( false );
1041 // remember initial transparency value
1042 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( myGeomGUI->getApp()->activeStudy() );
1043 QVariant v = aStudy->getObjectProperty( myViewWindow->getViewManager()->getGlobalId(),
1044 QString( anEntry.in() ),
1045 GEOM::propertyName( GEOM::Transparency ), myTransparency );
1046 if ( v.canConvert( QVariant::Double ) )
1047 myTransparency = v.toDouble();
1049 TreeWidgetItem* anItem = new TreeWidgetItem
1050 (myTreeObjects, QStringList() << aName, aShape, anIO);
1051 TreeWidgetItem* anItemFiltered = new TreeWidgetItem
1052 (myFilteredTreeObjects, QStringList() << aName, aShape, anIO);
1054 if ( getDisplayer()->IsDisplayed( anEntry.in() ) ) {
1055 anItem->setVisible( true, myVisible );
1056 anItemFiltered->setVisible( true, myVisible );
1058 anItem->setVisible( false, myInvisible );
1059 anItemFiltered->setVisible( false, myInvisible );
1062 setMainObjectTransparency( 0.5 );
1064 // add sub-objects in the tree
1065 TopTools_IndexedMapOfShape anIndices;
1067 TopExp::MapShapes(aShape, anIndices);
1068 addSubObjects(anItem, anIndices);
1069 onInitFilteredData();
1070 updateViewer(false);
1072 // check icon for tree header
1076 //=================================================================================
1077 // function : onWindowActivated()
1078 // purpose : called when other window was activated
1079 //=================================================================================
1080 void RepairGUI_InspectObjectDlg::onWindowActivated( SUIT_ViewWindow* theViewWindow )
1085 connect( theViewWindow->getViewManager(), SIGNAL( deleteView( SUIT_ViewWindow* ) ),
1086 this, SLOT( onCloseView( SUIT_ViewWindow* ) ), Qt::UniqueConnection );
1088 if ( theViewWindow->getViewManager()->getType() != OCCViewer_Viewer::Type() &&
1089 theViewWindow->getViewManager()->getType() != SVTK_Viewer::Type() ) {
1093 myViewWindow = theViewWindow;
1095 if ( myCurrentTreeObjects->topLevelItemCount() > 0 ) {
1096 setMainObjectTransparency( 0.5 );
1097 TreeWidgetItem* aMainItem = dynamic_cast<TreeWidgetItem*>( myCurrentTreeObjects->topLevelItem(0) );
1098 if ( getDisplayer()->IsDisplayed( aMainItem->getIO()->getEntry() ) )
1099 aMainItem->setVisible( true, myVisible );
1101 aMainItem->setVisible( false, myInvisible );
1106 //=================================================================================
1107 // function : onCloseView()
1108 // purpose : called when last view was closed
1109 //=================================================================================
1110 void RepairGUI_InspectObjectDlg::onCloseView( SUIT_ViewWindow* )
1112 if ( myGeomGUI->getApp()->desktop()->windows().size() == 0 ) {
1118 //=================================================================================
1119 // function : clickOnShow()
1120 // purpose : called when "Show selected" button was clicked
1121 //=================================================================================
1122 void RepairGUI_InspectObjectDlg::clickOnShow()
1124 if ( !myViewWindow )
1127 QList<QTreeWidgetItem*> listItem = myCurrentTreeObjects->selectedItems();
1128 for ( int i = 0; i < listItem.size(); i++ ) {
1129 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>( listItem.at(i) );
1130 if ( !anItem->isVisible() ) {
1131 displayItem( anItem );
1132 setItemDisplayStatus( anItem, true );
1135 getDisplayer()->UpdateViewer();
1139 //=================================================================================
1140 // function : clickOnShowOnly()
1141 // purpose : called when "Show only selected" button was clicked
1142 //=================================================================================
1143 void RepairGUI_InspectObjectDlg::clickOnShowOnly()
1145 if ( !myViewWindow )
1148 SALOME_ListIO aListOfIO;
1149 QTreeWidgetItemIterator it( myCurrentTreeObjects );
1151 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
1152 if ( !anItem->isHidden() && ( anItem->flags() & Qt::ItemIsSelectable ) &&
1153 anItem->isVisible() ) {
1154 aListOfIO.Append( anItem->getIO() );
1155 anItem->setVisible( false, myInvisible );
1159 getDisplayer()->Erase( aListOfIO );
1164 //=================================================================================
1165 // function : clickOnHide()
1166 // purpose : called when "Hide selected" button was clicked
1167 //=================================================================================
1168 void RepairGUI_InspectObjectDlg::clickOnHide()
1170 if ( !myViewWindow )
1173 QList<QTreeWidgetItem*> listItem = myCurrentTreeObjects->selectedItems();
1174 for ( int i = 0; i < listItem.size(); i++ ) {
1175 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>( listItem.at(i) );
1176 if ( anItem->isVisible() ) {
1177 getDisplayer()->Erase( anItem->getIO(), false, false );
1178 setItemDisplayStatus( anItem, false );
1181 getDisplayer()->UpdateViewer();
1185 //=================================================================================
1186 // function : clickOnPublish()
1187 // purpose : called when "Publish selected" button was clicked
1188 //=================================================================================
1189 void RepairGUI_InspectObjectDlg::clickOnPublish()
1191 _PTR(Study) studyDS = dynamic_cast<SalomeApp_Study*>( myGeomGUI->getApp()->activeStudy() )->studyDS();
1194 TreeWidgetItem* aMainItem = dynamic_cast<TreeWidgetItem*>( myCurrentTreeObjects->topLevelItem(0) );
1200 GEOM::GEOM_Object_var aMainObject = GEOMBase::ConvertIOinGEOMObject( aMainItem->getIO() );
1202 // find unique indices of selected objects
1203 QList<QTreeWidgetItem*> selectedItems = myCurrentTreeObjects->selectedItems();
1204 QMap< int, QString > anIndices;
1205 GEOM::ListOfLong_var anArray = new GEOM::ListOfLong;
1206 anArray->length( selectedItems.size() );
1208 for ( int i = 0; i < selectedItems.size(); i++ ) {
1209 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>( selectedItems.at(i) );
1210 int anIndex = GEOMBase::GetIndex( anItem->getShape(), aMainItem->getShape() );
1211 if ( anIndices.find( anIndex ) == anIndices.end() &&
1212 anItem != aMainItem ) {
1213 anIndices[ anIndex ] = anItem->text(0);
1214 anArray[j++] = anIndex;
1219 // get selected sub-shapes
1220 GEOM::GEOM_IShapesOperations_var anOper = getGeomEngine()->GetIShapesOperations( getStudyId() );
1221 GEOM::ListOfGO_var aList = anOper->MakeSubShapes( aMainObject, anArray );
1223 // publish sub-shapes
1224 for ( int i = 0; i < aList->length(); i++ )
1225 GeometryGUI::GetGeomGen()->AddInStudy( GeometryGUI::ClientStudyToStudy( studyDS ), aList[i],
1226 anIndices.values().at(i).toStdString().c_str(), aMainObject );
1231 //=================================================================================
1232 // function : clickOnHelp()
1233 // purpose : called when Help button was clicked to open a help page
1234 //=================================================================================
1235 void RepairGUI_InspectObjectDlg::clickOnHelp()
1237 myGeomGUI->getApp()->onHelpContextModule( "GEOM", "inspect_object_operation_page.html" );
1240 //=================================================================================
1241 // function : clickOnResetToMin()
1242 // purpose : called when Reset button was clicked to reset tolerance filter to minimal value.
1243 //=================================================================================
1244 void RepairGUI_InspectObjectDlg::clickOnResetToMin()
1246 if (myMinTol >= myTolEdit->minimum() && myMinTol <= myTolEdit->maximum()) {
1247 myTolEdit->setValue(myMinTol);
1251 //=================================================================================
1252 // function : clickOnResetToMax()
1253 // purpose : called when Reset button was clicked to reset tolerance filter to maximal value.
1254 //=================================================================================
1255 void RepairGUI_InspectObjectDlg::clickOnResetToMax()
1257 if (myMaxTol >= myTolEdit->minimum() && myMaxTol <= myTolEdit->maximum()) {
1258 myTolEdit->setValue(myMaxTol);
1262 //=================================================================================
1263 // function : clickOnShowAll()
1264 // purpose : called when Help button was clicked to show all shapes
1265 //=================================================================================
1266 void RepairGUI_InspectObjectDlg::clickOnShowAll()
1268 myIsSelectAll = false;
1272 //=================================================================================
1273 // function : clickOnHideAll()
1274 // purpose : called when Help button was clicked to hide all shapes
1275 //=================================================================================
1276 void RepairGUI_InspectObjectDlg::clickOnHideAll()
1278 myIsSelectAll = true;
1282 //=================================================================================
1283 // function : DeactivateActiveDialog()
1285 //=================================================================================
1286 void RepairGUI_InspectObjectDlg::DeactivateActiveDialog()
1289 disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
1290 myGeomGUI->SetActiveDialogBox(0);
1295 //=================================================================================
1296 // function : ActivateThisDialog()
1298 //=================================================================================
1299 void RepairGUI_InspectObjectDlg::ActivateThisDialog()
1301 /* Emit a signal to deactivate the active dialog */
1302 myGeomGUI->EmitSignalDeactivateDialog();
1304 myGeomGUI->SetActiveDialogBox( (QDialog*)this );
1306 connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
1307 this, SLOT(onViewSelectionChanged()));
1309 updateViewer(false);
1312 //=================================================================================
1313 // function : onFilterToggled()
1315 //=================================================================================
1316 void RepairGUI_InspectObjectDlg::onFilterToggled(bool isOn)
1319 myCurrentTreeObjects = myFilteredTreeObjects;
1320 myTreesLayout->setCurrentIndex(1);
1322 myCurrentTreeObjects = myTreeObjects;
1323 myTreesLayout->setCurrentIndex(0);
1329 //=================================================================================
1330 // function : updateViewer()
1332 //=================================================================================
1333 void RepairGUI_InspectObjectDlg::updateViewer(const bool theIsHideOtherTree)
1335 GEOM_Displayer *aDisplayer = getDisplayer();
1337 if (theIsHideOtherTree) {
1338 QTreeWidget *aTreeToHide = myCurrentTreeObjects == myTreeObjects ?
1339 myFilteredTreeObjects: myTreeObjects;
1341 // Hide the objects of disappeared tree, do not switch off flags.
1342 SALOME_ListIO aListOfIO;
1343 QTreeWidgetItemIterator it(aTreeToHide);
1346 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
1347 if ((anItem->flags() & Qt::ItemIsSelectable) &&
1348 anItem->isVisible() && !anItem->isHidden()) {
1349 aListOfIO.Append(anItem->getIO());
1355 aDisplayer->Erase(aListOfIO);
1358 // Show the objects that are marked as shown in the appeared tree.
1359 QTreeWidgetItemIterator it2(myCurrentTreeObjects);
1362 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it2);
1363 if ((anItem->flags() & Qt::ItemIsSelectable) &&
1364 anItem->isVisible() && !anItem->isHidden()) {
1365 displayItem(anItem);
1371 aDisplayer->UpdateViewer();