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>
29 #include <SUIT_Session.h>
30 #include <SUIT_ResourceMgr.h>
31 #include <SUIT_Desktop.h>
32 #include <SUIT_ViewManager.h>
33 #include <SUIT_ViewWindow.h>
35 #include <LightApp_SelectionMgr.h>
37 #include <SalomeApp_Application.h>
38 #include <SalomeApp_Study.h>
40 #include <OCCViewer_ViewModel.h>
41 #include <SVTK_ViewModel.h>
44 #include <TopoDS_Iterator.hxx>
47 #include <QGridLayout>
48 #include <QPushButton>
49 #include <QHeaderView>
50 #include <QItemDelegate>
52 //=================================================================================
53 // class : RepairGUI_InspectObjectDlg::TreeWidgetItem
54 // purpose : class for "Inspect Object" tree item creation
55 //=================================================================================
56 class RepairGUI_InspectObjectDlg::TreeWidgetItem : public QTreeWidgetItem
59 TreeWidgetItem( QTreeWidget*, const QStringList&, const TopoDS_Shape&, const Handle(SALOME_InteractiveObject)&, int = Type );
60 TreeWidgetItem( QTreeWidgetItem*, const QStringList&, const TopoDS_Shape&, const QString&, int = Type );
64 void setVisible( bool, QIcon& );
66 TopoDS_Shape getShape() const;
67 Handle(SALOME_InteractiveObject) getIO() const;
72 Handle(SALOME_InteractiveObject) myIO;
76 RepairGUI_InspectObjectDlg::TreeWidgetItem::TreeWidgetItem( QTreeWidget* view, const QStringList &strings, const TopoDS_Shape& shape,
77 const Handle(SALOME_InteractiveObject)& io, int type )
78 : QTreeWidgetItem( view, strings, type ),
85 RepairGUI_InspectObjectDlg::TreeWidgetItem::TreeWidgetItem( QTreeWidgetItem* parent, const QStringList &strings,
86 const TopoDS_Shape& shape, const QString& entry, int type )
87 : QTreeWidgetItem( parent, strings, type ),
91 myIO = new SALOME_InteractiveObject( entry.toAscii(), "GEOM", "TEMP_IO" );
92 setFlags( flags() | Qt::ItemIsEditable );
95 RepairGUI_InspectObjectDlg::TreeWidgetItem::~TreeWidgetItem()
99 bool RepairGUI_InspectObjectDlg::TreeWidgetItem::isVisible()
104 void RepairGUI_InspectObjectDlg::TreeWidgetItem::setVisible( bool isVisible, QIcon& icon )
106 myIsVisible = isVisible;
110 TopoDS_Shape RepairGUI_InspectObjectDlg::TreeWidgetItem::getShape() const
115 Handle(SALOME_InteractiveObject) RepairGUI_InspectObjectDlg::TreeWidgetItem::getIO() const
120 //=================================================================================
121 // class : RepairGUI_InspectObjectDlg::Delegate
122 // purpose : class for "Inspect Object" tree item editing
123 //=================================================================================
124 class RepairGUI_InspectObjectDlg::Delegate : public QItemDelegate
127 Delegate( QObject* = 0 );
130 void setEditorData( QWidget*, const QModelIndex& ) const;
131 void setModelData( QWidget*, QAbstractItemModel*, const QModelIndex& ) const;
132 QWidget* createEditor( QWidget*, const QStyleOptionViewItem&, const QModelIndex& ) const;
135 RepairGUI_InspectObjectDlg::Delegate::Delegate( QObject* parent )
136 : QItemDelegate( parent )
140 RepairGUI_InspectObjectDlg::Delegate::~Delegate()
144 void RepairGUI_InspectObjectDlg::Delegate::setEditorData( QWidget* editor,
145 const QModelIndex& index ) const
147 QItemDelegate::setEditorData( editor, index );
148 editor->setProperty( "___name___", editor->property( "text" ) );
151 void RepairGUI_InspectObjectDlg::Delegate::setModelData( QWidget* editor,
152 QAbstractItemModel* model,
153 const QModelIndex& index ) const
155 QString aNewName = editor->property( "text" ).toString();
156 if ( aNewName.trimmed().isEmpty() )
157 editor->setProperty( "text", editor->property( "___name___" ) );
158 QItemDelegate::setModelData( editor, model, index );
161 QWidget* RepairGUI_InspectObjectDlg::Delegate::createEditor( QWidget* parent,
162 const QStyleOptionViewItem& option,
163 const QModelIndex& index ) const
165 return index.column() == 1 ? 0 : QItemDelegate::createEditor( parent, option, index );
168 //=================================================================================
169 // class : RepairGUI_InspectObjectDlg()
170 // purpose : Constructs a RepairGUI_InspectObjectDlg which is a child of 'parent'.
171 //=================================================================================
172 RepairGUI_InspectObjectDlg::RepairGUI_InspectObjectDlg( SUIT_Desktop* parent )
173 : GEOMBase_Helper( parent ),
175 myTransparency( 0.0 ),
176 myIsSelectAll( false )
178 QIcon iconSelect( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) );
179 myVisible = QIcon( SUIT_Session::session()->resourceMgr()->loadPixmap( "SUIT", tr( "ICON_DATAOBJ_VISIBLE" ) ) );
180 myInvisible = QIcon( SUIT_Session::session()->resourceMgr()->loadPixmap( "SUIT", tr( "ICON_DATAOBJ_INVISIBLE" ) ) );
182 setWindowTitle( tr( "GEOM_INSPECT_OBJECT_TITLE" ) );
183 setAttribute( Qt::WA_DeleteOnClose );
185 myApp = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
186 myViewWindow = myApp->desktop()->activeWindow();
188 QGridLayout* topLayout = new QGridLayout( this );
189 topLayout->setMargin( 11 ); topLayout->setSpacing( 6 );
191 /********************** Inspected Object **********************/
193 QHBoxLayout* mainShapeLayout = new QHBoxLayout();
195 QLabel* label = new QLabel( tr( "GEOM_INSPECT_OBJECT_MAIN_SHAPE" ) );
196 QPushButton* selBtn = new QPushButton();
197 selBtn->setIcon( iconSelect );
198 myEditMainShape = new QLineEdit();
199 myEditMainShape->setReadOnly(true);
201 mainShapeLayout->addWidget( label );
202 mainShapeLayout->addWidget( selBtn );
203 mainShapeLayout->addWidget( myEditMainShape );
205 /********************** Sub-objects tree **********************/
207 myTreeObjects = new QTreeWidget();
208 myTreeObjects->setColumnCount( 2 );
209 QStringList columnNames;
210 columnNames.append( tr( "GEOM_INSPECT_OBJECT_NAME" ) );
211 columnNames.append("");
212 myTreeObjects->setHeaderLabels( columnNames );
213 QTreeWidgetItem* headerItem = new QTreeWidgetItem( columnNames );
214 myTreeObjects->setHeaderItem( headerItem );
215 myTreeObjects->header()->moveSection( 1, 0 );
216 myTreeObjects->header()->setClickable( true );
217 myTreeObjects->header()->setMovable( false );
218 myTreeObjects->header()->setResizeMode( 1, QHeaderView::ResizeToContents );
219 myTreeObjects->setSelectionMode( QAbstractItemView::ExtendedSelection );
220 myTreeObjects->setEditTriggers( QAbstractItemView::DoubleClicked | QAbstractItemView::EditKeyPressed );
221 // set custom item delegate
222 myTreeObjects->setItemDelegate( new Delegate( myTreeObjects ) );
224 /********************** Buttons **********************/
226 QVBoxLayout* buttonsLayout1 = new QVBoxLayout();
228 QPushButton* buttonShow = new QPushButton( tr( "GEOM_INSPECT_OBJECT_SHOW" ) );
229 QPushButton* buttonShowOnly = new QPushButton( tr( "GEOM_INSPECT_OBJECT_SHOW_ONLY" ) );
230 QPushButton* buttonHide = new QPushButton( tr( "GEOM_INSPECT_OBJECT_HIDE" ) );
231 QPushButton* buttonPublish = new QPushButton( tr( "GEOM_INSPECT_OBJECT_PUBLISH" ) );
233 buttonsLayout1->addWidget( buttonShow );
234 buttonsLayout1->addWidget( buttonShowOnly );
235 buttonsLayout1->addWidget( buttonHide );
236 buttonsLayout1->addStretch();
237 buttonsLayout1->addWidget( buttonPublish );
238 buttonsLayout1->addStretch();
240 QHBoxLayout* buttonsLayout2 = new QHBoxLayout();
242 QPushButton* buttonClose = new QPushButton( tr( "GEOM_BUT_CLOSE" ) );
243 QPushButton* buttonHelp = new QPushButton( tr( "GEOM_BUT_HELP" ) );
245 buttonsLayout2->addWidget( buttonClose );
246 buttonsLayout2->addStretch();
247 buttonsLayout2->addWidget( buttonHelp );
249 topLayout->addLayout( mainShapeLayout, 0, 0 );
250 topLayout->addWidget( myTreeObjects, 1, 0 );
251 topLayout->addLayout( buttonsLayout1, 0, 1, 2, 1 );
252 topLayout->addLayout( buttonsLayout2, 2, 0, 1, 2 );
254 // Signals and slots connections
256 connect( selBtn, SIGNAL( clicked() ), this, SLOT( onEditMainShape() ) );
258 connect( myTreeObjects, SIGNAL( itemClicked( QTreeWidgetItem*, int ) ),
259 this, SLOT( onItemClicked( QTreeWidgetItem*, int ) ) );
260 connect( myTreeObjects, SIGNAL( itemChanged( QTreeWidgetItem*, int ) ),
261 this, SLOT( onItemChanged( QTreeWidgetItem*, int ) ) );
262 connect( myTreeObjects, SIGNAL( itemExpanded ( QTreeWidgetItem* ) ),
263 this, SLOT( onItemExpanded( QTreeWidgetItem* ) ) );
264 connect( myTreeObjects, SIGNAL( itemSelectionChanged() ),
265 this, SLOT( onItemSelectionChanged() ) );
267 connect( myTreeObjects->header(), SIGNAL( sectionClicked( int ) ), this, SLOT( onHeaderClicked( int ) ) );
269 connect( buttonShow, SIGNAL( clicked() ), this, SLOT( clickOnShow() ) );
270 connect( buttonShowOnly, SIGNAL( clicked() ), this, SLOT( clickOnShowOnly() ) );
271 connect( buttonHide, SIGNAL( clicked() ), this, SLOT( clickOnHide() ) );
272 connect( buttonPublish, SIGNAL( clicked() ), this, SLOT( clickOnPublish() ) );
274 connect( buttonClose, SIGNAL( clicked() ), this, SLOT( reject() ) );
275 connect( buttonHelp, SIGNAL( clicked() ), this, SLOT( clickOnHelp() ) );
277 connect( myApp->selectionMgr(), SIGNAL( currentSelectionChanged() ),
278 this, SLOT( onViewSelectionChanged() ) );
280 connect( myApp->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
281 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
284 connect( myViewWindow->getViewManager(), SIGNAL( deleteView( SUIT_ViewWindow* ) ),
285 this, SLOT( onCloseView( SUIT_ViewWindow* ) ), Qt::UniqueConnection );
290 RepairGUI_InspectObjectDlg::~RepairGUI_InspectObjectDlg()
294 // restore initial parameters for viewer
295 getDisplayer()->UnsetColor();
296 getDisplayer()->UnsetWidth();
297 // no need to delete child widgets, Qt does it all for us
300 //=================================================================================
302 // purpose : initialize dialog data
303 //=================================================================================
304 void RepairGUI_InspectObjectDlg::init()
306 //get shape from selection
307 SALOME_ListIO selected;
308 myApp->selectionMgr()->selectedObjects(selected);
310 if ( selected.Extent() != 1 )
313 if ( !myViewWindow ) {
314 SUIT_ViewManager* occVm = myApp->getViewManager( OCCViewer_Viewer::Type(), true );
315 myViewWindow = occVm->getActiveView();
316 connect( occVm, SIGNAL( deleteView( SUIT_ViewWindow* ) ),
317 this, SLOT( onCloseView( SUIT_ViewWindow* ) ), Qt::UniqueConnection );
320 TopoDS_Shape aShape = GEOMBase::GetTopoFromSelection( selected );
321 if ( aShape.IsNull() )
324 Handle(SALOME_InteractiveObject) anIO = selected.First();
325 GEOM::GEOM_Object_var anObject = GEOMBase::ConvertIOinGEOMObject( anIO );
326 QString aName = anObject->GetName();
327 CORBA::String_var anEntry = anObject->GetStudyEntry();
329 myEditMainShape->setText( aName );
330 myEditMainShape->setEnabled( false );
332 // remember initial transparency value
333 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( myApp->activeStudy() );
334 QVariant v = aStudy->getObjectProperty( myViewWindow->getViewManager()->getGlobalId(),
335 QString( anEntry.in() ),
336 GEOM::propertyName( GEOM::Transparency ), myTransparency );
337 if ( v.canConvert( QVariant::Double ) )
338 myTransparency = v.toDouble();
340 TreeWidgetItem* anItem = new TreeWidgetItem( myTreeObjects, QStringList() << aName, aShape, anIO );
341 if ( getDisplayer()->IsDisplayed( anEntry.in() ) )
342 anItem->setVisible( true, myVisible );
344 anItem->setVisible( false, myInvisible );
346 setMainObjectTransparency( 0.5 );
348 // add sub-objects in the tree
349 addSubObjects( anItem );
351 // check icon for tree header
355 //=================================================================================
356 // function : checkVisibleIcon()
357 // purpose : set visible or invisible icon in the header of tree
358 //=================================================================================
359 void RepairGUI_InspectObjectDlg::checkVisibleIcon()
361 bool isInvisible = false;
362 QTreeWidgetItemIterator it( myTreeObjects );
364 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
365 if ( !anItem->isVisible() )
371 myTreeObjects->headerItem()->setIcon( 1, myInvisible );
372 myIsSelectAll = false;
375 myTreeObjects->headerItem()->setIcon( 1, myVisible );
376 myIsSelectAll = true;
380 //=================================================================================
381 // function : addSubObjects()
382 // purpose : add sub-objects to parent object in the tree
383 //=================================================================================
384 void RepairGUI_InspectObjectDlg::addSubObjects( TreeWidgetItem* theParentItem )
386 TreeWidgetItem* aMainItem = dynamic_cast<TreeWidgetItem*>( myTreeObjects->topLevelItem(0) );
387 TopoDS_Iterator it( theParentItem->getShape() );
388 for ( ; it.More(); it.Next() ) {
389 TopoDS_Shape aSubShape = it.Value();
390 int anIndex = GEOMBase::GetIndex( aSubShape, aMainItem->getShape() );
391 QString anEntry = QString( "TEMP_" ) + aMainItem->getIO()->getEntry() + QString("_%1").arg( anIndex );
392 TreeWidgetItem* anItem = new TreeWidgetItem( theParentItem, QStringList(), aSubShape, anEntry);
393 anItem->setVisible( false, myInvisible );
394 addSubObjects( anItem );
398 //=================================================================================
399 // function : displayItem()
400 // purpose : display sub-object of inspected object according its tree item
401 //=================================================================================
402 void RepairGUI_InspectObjectDlg::displayItem( TreeWidgetItem* theItem )
404 GEOM_Displayer* aDisplayer = getDisplayer();
405 if ( theItem == myTreeObjects->topLevelItem(0) ) {
406 aDisplayer->UnsetColor();
407 aDisplayer->UnsetWidth();
409 else if ( aDisplayer->GetColor() != Quantity_NOC_VIOLET && aDisplayer->GetWidth() != 2.0 ) {
410 aDisplayer->SetColor( Quantity_NOC_VIOLET );
411 aDisplayer->SetWidth( 2.0 );
414 SALOME_Prs* aPrs = aDisplayer->buildSubshapePresentation( theItem->getShape(), theItem->getIO()->getEntry(),
415 GEOM_Displayer::GetActiveView() );
417 displayPreview( aPrs, true, false );
420 //=================================================================================
421 // function : setItemDisplayStatus()
422 // purpose : set visible or invisible status for the same items in the tree
423 //=================================================================================
424 void RepairGUI_InspectObjectDlg::setItemDisplayStatus( TreeWidgetItem* theItem, bool theIsVisible )
426 QTreeWidgetItemIterator it( myTreeObjects );
428 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
429 if ( anItem->getShape().IsSame( theItem->getShape() ) )
430 anItem->setVisible( theIsVisible, theIsVisible ? myVisible : myInvisible );
435 //=================================================================================
436 // function : setMainObjectTransparency()
437 // purpose : set transparency for the inspected object
438 //=================================================================================
439 void RepairGUI_InspectObjectDlg::setMainObjectTransparency( double theTransparency )
441 SUIT_ViewManager* aViewMan = myViewWindow->getViewManager();
442 SALOME_View* aView = dynamic_cast<SALOME_View*>( aViewMan->getViewModel() );
443 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( myApp->activeStudy() );
445 TreeWidgetItem* aMainItem = dynamic_cast<TreeWidgetItem*>( myTreeObjects->topLevelItem(0) );
446 aStudy->setObjectProperty( myViewWindow->getViewManager()->getGlobalId(),
447 QString( aMainItem->getIO()->getEntry() ),
448 GEOM::propertyName( GEOM::Transparency ), theTransparency );
450 if ( aView->isVisible( aMainItem->getIO() ) )
451 getDisplayer()->Redisplay( aMainItem->getIO(), true, aView );
454 //=================================================================================
455 // function : restoreParam()
456 // purpose : restore initial parameters of the dialog and the viewer
457 //=================================================================================
458 void RepairGUI_InspectObjectDlg::restoreParam()
460 SUIT_ViewManager* aViewMan = myViewWindow->getViewManager();
461 SALOME_View* aView = dynamic_cast<SALOME_View*>( aViewMan->getViewModel() );
462 GEOM_Displayer* aDisplayer = getDisplayer();
463 // restore initial parameters for viewer
464 aDisplayer->UnsetColor();
465 aDisplayer->UnsetWidth();
467 // restore transparency of main object
468 setMainObjectTransparency( myTransparency );
471 TreeWidgetItem* aMainItem = dynamic_cast<TreeWidgetItem*>( myTreeObjects->topLevelItem(0) );
472 QTreeWidgetItemIterator it( myTreeObjects );
474 if ( *it != aMainItem ) {
475 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
476 aDisplayer->Erase( anItem->getIO(), false, false, aView );
477 anItem->setVisible( false, myInvisible );
483 //=================================================================================
484 // function : onEditMainShape()
485 // purpose : called when selection button was clicked
486 //=================================================================================
487 void RepairGUI_InspectObjectDlg::onEditMainShape()
489 if ( myEditMainShape->text().isEmpty() || !myViewWindow )
494 // restore initial parameters for dialog box
495 myEditMainShape->setEnabled( true );
496 myEditMainShape->setText("");
497 myEditMainShape->setFocus();
498 myTreeObjects->clear();
501 //=================================================================================
502 // function : onItemClicked()
503 // purpose : called when tree item was clicked
504 //=================================================================================
505 void RepairGUI_InspectObjectDlg::onItemClicked( QTreeWidgetItem* theItem, int theColumn )
507 if ( theColumn!= 1 || !( theItem->flags() & Qt::ItemIsSelectable ) || !myViewWindow )
510 GEOM_Displayer* aDisplayer = getDisplayer();
512 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>( theItem );
514 if ( anItem->isVisible() ) {
515 aDisplayer->Erase( anItem->getIO(), false, true );
516 setItemDisplayStatus( anItem, false );
519 displayItem( anItem );
520 setItemDisplayStatus( anItem, true );
522 aDisplayer->UpdateViewer();
526 //=================================================================================
527 // function : onItemChanged()
528 // purpose : called when tree item was changed
529 //=================================================================================
530 void RepairGUI_InspectObjectDlg::onItemChanged( QTreeWidgetItem* theItem, int theColumn )
532 if ( theColumn!= 0 || !( theItem->flags() & Qt::ItemIsEditable ) )
535 // rename the same items in the tree
536 QTreeWidgetItemIterator it( myTreeObjects );
538 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
539 if ( anItem->getShape().IsSame( dynamic_cast<TreeWidgetItem*>( theItem )->getShape() ) )
540 anItem->setText( 0, theItem->text(0) );
545 //=================================================================================
546 // function : onItemExpanded()
547 // purpose : called when tree item was expanded
548 //=================================================================================
549 void RepairGUI_InspectObjectDlg::onItemExpanded( QTreeWidgetItem* theItem )
551 TreeWidgetItem* aMainItem = dynamic_cast<TreeWidgetItem*>( myTreeObjects->topLevelItem(0) );
552 GEOM::GEOM_Object_var aMainObject = GEOMBase::ConvertIOinGEOMObject( aMainItem->getIO() );
554 for ( int i = 0; i < theItem->childCount(); i++ ) {
555 TreeWidgetItem* aSubItem = dynamic_cast<TreeWidgetItem*>( theItem->child(i) );
556 int anIndex = GEOMBase::GetIndex( aSubItem->getShape(), aMainItem->getShape() );
557 if ( aSubItem->text(0).isEmpty() ) {
558 char* aName = aMainObject->GetSubShapeName( anIndex );
559 if ( !QString( aName ).isEmpty() )
560 aSubItem->setText( 0, QString( aName ) );
562 aSubItem->setText( 0, QString("%1_%2").arg( GEOMBase::TypeName( aSubItem->getShape().ShapeType(), true ) ).arg( anIndex ) );
567 //=================================================================================
568 // function : onItemSelectionChanged()
569 // purpose : called when tree item was selected
570 //=================================================================================
571 void RepairGUI_InspectObjectDlg::onItemSelectionChanged()
576 QList<QTreeWidgetItem*> listItem = myTreeObjects->selectedItems();
577 SALOME_ListIO aSelected;
578 for ( int i = 0; i < listItem.size(); i++ ) {
579 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>( listItem.at(i) );
580 aSelected.Append( anItem->getIO() );
582 myApp->selectionMgr()->setSelectedObjects( aSelected );
585 //=================================================================================
586 // function : onHeaderClicked()
587 // purpose : called when header item of tree was clicked
588 //=================================================================================
589 void RepairGUI_InspectObjectDlg::onHeaderClicked( int theColumn )
591 if ( theColumn != 1 || !myViewWindow )
594 GEOM_Displayer* aDisplayer = getDisplayer();
596 if ( myIsSelectAll ) {
597 myIsSelectAll = false;
598 myTreeObjects->headerItem()->setIcon( 1, myInvisible );
599 SALOME_ListIO aListOfIO;
600 QTreeWidgetItemIterator it( myTreeObjects );
602 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
603 if ( ( anItem->flags() & Qt::ItemIsSelectable ) && anItem->isVisible() ) {
604 aListOfIO.Append( anItem->getIO() );
605 anItem->setVisible( false, myInvisible );
609 aDisplayer->Erase( aListOfIO );
612 myIsSelectAll = true;
613 myTreeObjects->headerItem()->setIcon( 1, myVisible );
614 QTreeWidgetItemIterator it( myTreeObjects );
616 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
617 if ( ( anItem->flags() & Qt::ItemIsSelectable ) && !anItem->isVisible() ) {
618 displayItem( anItem );
619 anItem->setVisible( true, myVisible );
625 aDisplayer->UpdateViewer();
628 //=================================================================================
629 // function : onViewSelectionChanged()
630 // purpose : called when selection of object browser was changed
631 //=================================================================================
632 void RepairGUI_InspectObjectDlg::onViewSelectionChanged()
634 if ( myEditMainShape->isEnabled() )
638 //=================================================================================
639 // function : onWindowActivated()
640 // purpose : called when other window was activated
641 //=================================================================================
642 void RepairGUI_InspectObjectDlg::onWindowActivated( SUIT_ViewWindow* theViewWindow )
647 connect( theViewWindow->getViewManager(), SIGNAL( deleteView( SUIT_ViewWindow* ) ),
648 this, SLOT( onCloseView( SUIT_ViewWindow* ) ), Qt::UniqueConnection );
650 if ( theViewWindow->getViewManager()->getType() != OCCViewer_Viewer::Type() &&
651 theViewWindow->getViewManager()->getType() != SVTK_Viewer::Type() ) {
655 myViewWindow = theViewWindow;
657 if ( myTreeObjects->topLevelItemCount() > 0 ) {
658 setMainObjectTransparency( 0.5 );
659 TreeWidgetItem* aMainItem = dynamic_cast<TreeWidgetItem*>( myTreeObjects->topLevelItem(0) );
660 if ( getDisplayer()->IsDisplayed( aMainItem->getIO()->getEntry() ) )
661 aMainItem->setVisible( true, myVisible );
663 aMainItem->setVisible( false, myInvisible );
668 //=================================================================================
669 // function : onCloseView()
670 // purpose : called when last view was closed
671 //=================================================================================
672 void RepairGUI_InspectObjectDlg::onCloseView( SUIT_ViewWindow* )
674 if ( myApp->desktop()->windows().size() == 0 ) {
680 //=================================================================================
681 // function : clickOnShow()
682 // purpose : called when "Show selected" button was clicked
683 //=================================================================================
684 void RepairGUI_InspectObjectDlg::clickOnShow()
689 QList<QTreeWidgetItem*> listItem = myTreeObjects->selectedItems();
690 for ( int i = 0; i < listItem.size(); i++ ) {
691 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>( listItem.at(i) );
692 if ( !anItem->isVisible() ) {
693 displayItem( anItem );
694 setItemDisplayStatus( anItem, true );
697 getDisplayer()->UpdateViewer();
701 //=================================================================================
702 // function : clickOnShowOnly()
703 // purpose : called when "Show only selected" button was clicked
704 //=================================================================================
705 void RepairGUI_InspectObjectDlg::clickOnShowOnly()
710 SALOME_ListIO aListOfIO;
711 QTreeWidgetItemIterator it( myTreeObjects );
713 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>(*it);
714 if ( ( anItem->flags() & Qt::ItemIsSelectable ) && anItem->isVisible() ) {
715 aListOfIO.Append( anItem->getIO() );
716 anItem->setVisible( false, myInvisible );
720 getDisplayer()->Erase( aListOfIO );
725 //=================================================================================
726 // function : clickOnHide()
727 // purpose : called when "Hide selected" button was clicked
728 //=================================================================================
729 void RepairGUI_InspectObjectDlg::clickOnHide()
734 QList<QTreeWidgetItem*> listItem = myTreeObjects->selectedItems();
735 for ( int i = 0; i < listItem.size(); i++ ) {
736 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>( listItem.at(i) );
737 if ( anItem->isVisible() ) {
738 getDisplayer()->Erase( anItem->getIO(), false, false );
739 setItemDisplayStatus( anItem, false );
742 getDisplayer()->UpdateViewer();
746 //=================================================================================
747 // function : clickOnPublish()
748 // purpose : called when "Publish selected" button was clicked
749 //=================================================================================
750 void RepairGUI_InspectObjectDlg::clickOnPublish()
752 _PTR(Study) studyDS = dynamic_cast<SalomeApp_Study*>( myApp->activeStudy() )->studyDS();
755 TreeWidgetItem* aMainItem = dynamic_cast<TreeWidgetItem*>( myTreeObjects->topLevelItem(0) );
756 GEOM::GEOM_Object_var aMainObject = GEOMBase::ConvertIOinGEOMObject( aMainItem->getIO() );
758 // find unique indices of selected objects
759 QList<QTreeWidgetItem*> selectedItems = myTreeObjects->selectedItems();
760 QMap< int, QString > anIndices;
761 GEOM::ListOfLong_var anArray = new GEOM::ListOfLong;
762 anArray->length( selectedItems.size() );
764 for ( int i = 0; i < selectedItems.size(); i++ ) {
765 TreeWidgetItem* anItem = dynamic_cast<TreeWidgetItem*>( selectedItems.at(i) );
766 int anIndex = GEOMBase::GetIndex( anItem->getShape(), aMainItem->getShape() );
767 if ( anIndices.find( anIndex ) == anIndices.end() &&
768 anItem != aMainItem ) {
769 anIndices[ anIndex ] = anItem->text(0);
770 anArray[j++] = anIndex;
775 // get selected sub-shapes
776 GEOM::GEOM_IShapesOperations_var anOper = getGeomEngine()->GetIShapesOperations( getStudyId() );
777 GEOM::ListOfGO_var aList = anOper->MakeSubShapes( aMainObject, anArray );
779 // publish sub-shapes
780 for ( int i = 0; i < aList->length(); i++ )
781 GeometryGUI::GetGeomGen()->AddInStudy( GeometryGUI::ClientStudyToStudy( studyDS ), aList[i],
782 anIndices.values().at(i).toStdString().c_str(), aMainObject );
787 //=================================================================================
788 // function : clickOnHelp()
789 // purpose : called when Help button was clicked to open a help page
790 //=================================================================================
791 void RepairGUI_InspectObjectDlg::clickOnHelp()
793 myApp->onHelpContextModule( "GEOM", "inspect_object_operation_page.html" );