diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts
index 6f21d29b1..fdd89f838 100644
--- a/src/GEOMGUI/GEOM_msg_en.ts
+++ b/src/GEOMGUI/GEOM_msg_en.ts
@@ -4764,6 +4764,10 @@ Please, select face, shell or solid and try again
Show dependency tree
+
+
+ Reduce study
+
Show all dimensions
@@ -6885,6 +6889,49 @@ Do you want to create new material?
P&ublish And Close
+
+ GEOMToolsGUI_ReduceStudyDlg
+
+
+ Reduce study
+
+
+
+ Objects to be kept
+
+
+
+ Objects to be removed
+
+
+
+ Name
+
+
+
+ Options
+
+
+
+ Unpublish intermediate objects
+
+
+
+ Remove intermediate objects
+
+
+
+ Keep sub-objects in result
+
+
+
+ Remove empty folders
+
+
+
+ Soft removal
+
+
RepairGUI_UnionFacesDlg
diff --git a/src/GEOMGUI/GEOM_msg_fr.ts b/src/GEOMGUI/GEOM_msg_fr.ts
index 1c3146a9a..86867a75a 100644
--- a/src/GEOMGUI/GEOM_msg_fr.ts
+++ b/src/GEOMGUI/GEOM_msg_fr.ts
@@ -4764,6 +4764,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau
Show dependency tree
+
+
+ Reduce study
+
Afficher les cotations
@@ -6885,6 +6889,49 @@ Voulez-vous en créer un nouveau ?
P&ublier et fermer
+
+ GEOMToolsGUI_ReduceStudyDlg
+
+
+ Reduce study
+
+
+
+ Objects to be kept
+
+
+
+ Objects to be removed
+
+
+
+ Name
+
+
+
+ Options
+
+
+
+ Unpublish intermediate objects
+
+
+
+ Remove intermediate objects
+
+
+
+ Keep sub-objects in result
+
+
+
+ Remove empty folders
+
+
+
+ Soft removal
+
+
RepairGUI_UnionFacesDlg
diff --git a/src/GEOMGUI/GEOM_msg_ja.ts b/src/GEOMGUI/GEOM_msg_ja.ts
index 0609b2ae2..01014e9f6 100644
--- a/src/GEOMGUI/GEOM_msg_ja.ts
+++ b/src/GEOMGUI/GEOM_msg_ja.ts
@@ -4739,6 +4739,10 @@
Show dependency tree
+
+
+ Reduce study
+
Show all dimensions
@@ -6694,6 +6698,49 @@ Please specify suitable arguments.
発行し閉じる(&u)
+
+ GEOMToolsGUI_ReduceStudyDlg
+
+
+ Reduce study
+
+
+
+ Objects to be kept
+
+
+
+ Objects to be removed
+
+
+
+ Name
+
+
+
+ Options
+
+
+
+ Unpublish intermediate objects
+
+
+
+ Remove intermediate objects
+
+
+
+ Keep sub-objects in result
+
+
+
+ Remove empty folders
+
+
+
+ Soft removal
+
+
RepairGUI_UnionFacesDlg
diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx
index 0da53dde9..da06a52d7 100644
--- a/src/GEOMGUI/GeometryGUI.cxx
+++ b/src/GEOMGUI/GeometryGUI.cxx
@@ -503,6 +503,7 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
+ case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
libName = "GEOMToolsGUI";
break;
case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
@@ -1079,6 +1080,7 @@ void GeometryGUI::initialize( CAM_Application* app )
createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
+ createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
@@ -1628,6 +1630,9 @@ void GeometryGUI::initialize( CAM_Application* app )
mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
+ mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
+ mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
+
mgr->hide( mgr->actionId( action( myEraseAll ) ) );
SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
diff --git a/src/GEOMGUI/GeometryGUI_Operations.h b/src/GEOMGUI/GeometryGUI_Operations.h
index 3f7f51d4d..5a33af0dc 100644
--- a/src/GEOMGUI/GeometryGUI_Operations.h
+++ b/src/GEOMGUI/GeometryGUI_Operations.h
@@ -62,6 +62,7 @@ namespace GEOMOp {
OpCreateFolder = 1262, // POPUP MENU - CREATE FOLDER
OpSortChildren = 1263, // POPUP MENU - SORT CHILD ITEMS
OpShowDependencyTree = 1264, // POPUP MENU - SHOW DEPENDENCY TREE
+ OpReduceStudy = 1265, // POPUP MENU - REDUCE STUDY
// DisplayGUI ------------------//--------------------------------
OpSwitchVectors = 2001, // MENU VIEW - DISPLAY MODE - SHOW/HIDE EDGE DIRECTION
OpShowAll = 2002, // MENU VIEW - SHOW ALL
diff --git a/src/GEOMToolsGUI/CMakeLists.txt b/src/GEOMToolsGUI/CMakeLists.txt
index 7861b2f37..fe6a01b4e 100755
--- a/src/GEOMToolsGUI/CMakeLists.txt
+++ b/src/GEOMToolsGUI/CMakeLists.txt
@@ -74,6 +74,7 @@ SET(GEOMToolsGUI_HEADERS
GEOMToolsGUI_PublishDlg.h
GEOMToolsGUI_MaterialPropertiesDlg.h
GEOMToolsGUI_LineWidthDlg.h
+ GEOMToolsGUI_ReduceStudyDlg.h
)
# header files / to be processed by moc
@@ -86,6 +87,7 @@ SET(_moc_HEADERS
GEOMToolsGUI_PublishDlg.h
GEOMToolsGUI_MaterialPropertiesDlg.h
GEOMToolsGUI_LineWidthDlg.h
+ GEOMToolsGUI_ReduceStudyDlg.h
)
# --- sources ---
@@ -104,6 +106,7 @@ SET(GEOMToolsGUI_SOURCES
GEOMToolsGUI_PublishDlg.cxx
GEOMToolsGUI_MaterialPropertiesDlg.cxx
GEOMToolsGUI_LineWidthDlg.cxx
+ GEOMToolsGUI_ReduceStudyDlg.cxx
${_moc_SOURCES}
)
diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.cxx b/src/GEOMToolsGUI/GEOMToolsGUI.cxx
index 2d730a09d..0c514cb78 100644
--- a/src/GEOMToolsGUI/GEOMToolsGUI.cxx
+++ b/src/GEOMToolsGUI/GEOMToolsGUI.cxx
@@ -425,6 +425,9 @@ bool GEOMToolsGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent)
break;
case GEOMOp::OpShowDependencyTree:
OnShowDependencyTree();
+ break;
+ case GEOMOp::OpReduceStudy:
+ OnReduceStudy();
break;
default:
SUIT_Session::session()->activeApplication()->putInfo(tr("GEOM_PRP_COMMAND").arg(theCommandID));
diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.h b/src/GEOMToolsGUI/GEOMToolsGUI.h
index a0e1049f7..4ed7f9495 100644
--- a/src/GEOMToolsGUI/GEOMToolsGUI.h
+++ b/src/GEOMToolsGUI/GEOMToolsGUI.h
@@ -91,6 +91,7 @@ private:
void OnCreateFolder();
void OnSortChildren();
void OnShowDependencyTree();
+ void OnReduceStudy();
// Shortcut commands
void OnChangeTransparency( bool );
diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx
index 90ea6bf25..bf91fef8d 100644
--- a/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx
+++ b/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx
@@ -34,6 +34,7 @@
#include "GEOMToolsGUI_PublishDlg.h"
#include "GEOMToolsGUI_MaterialPropertiesDlg.h"
#include "GEOMToolsGUI_LineWidthDlg.h"
+#include "GEOMToolsGUI_ReduceStudyDlg.h"
#include
#include
@@ -899,3 +900,27 @@ void GEOMToolsGUI::OnShowDependencyTree()
view->updateModel();
}
}
+
+void GEOMToolsGUI::OnReduceStudy()
+{
+ GEOM::string_array_var objectsEntry = new GEOM::string_array();
+ SALOME_ListIO mainObjects;
+ int iter = 0;
+
+ SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
+ if ( !app ) return;
+ app->selectionMgr()->selectedObjects( mainObjects );
+ // create a list of selected object entry
+ objectsEntry->length( mainObjects.Extent() );
+ for ( SALOME_ListIteratorOfListIO It( mainObjects ); It.More(); It.Next(), iter++ ) {
+ Handle( SALOME_InteractiveObject ) io = It.Value();
+ if( !io->hasEntry() )
+ continue;
+ GEOM::GEOM_Object_var geomObject = GEOM::GEOM_Object::_nil();
+ geomObject = GEOMBase::ConvertIOinGEOMObject( io );
+ QString entry = geomObject->GetEntry();
+ objectsEntry[ iter ] = entry.toLatin1().constData();
+ }
+ GEOMToolsGUI_ReduceStudyDlg dlg( objectsEntry, SUIT_Session::session()->activeApplication()->desktop() );
+ dlg.exec();
+}
diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx
new file mode 100644
index 000000000..621d16ce6
--- /dev/null
+++ b/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx
@@ -0,0 +1,600 @@
+// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "GEOMToolsGUI_ReduceStudyDlg.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+// GUI includes
+#include
+#include
+#include
+#include
+#include
+
+// GEOM includes
+#include
+#include CORBA_CLIENT_HEADER(GEOM_Gen)
+#include
+
+#include
+
+GEOMToolsGUI_TreeWidgetItem::GEOMToolsGUI_TreeWidgetItem( QTreeWidget* view, const QStringList &strings,
+ char* studyEntry, bool visible, int type )
+:QTreeWidgetItem( view, strings, type ),
+ myStudyEntry( studyEntry ),
+ myVisible( visible )
+{
+
+}
+
+GEOMToolsGUI_TreeWidgetItem::GEOMToolsGUI_TreeWidgetItem( QTreeWidgetItem* parent, const QStringList &strings,
+ char* studyEntry, bool visible, int type )
+:QTreeWidgetItem( parent, strings, type ),
+ myStudyEntry( studyEntry ),
+ myVisible( visible )
+{
+
+}
+
+GEOMToolsGUI_TreeWidgetItem::~GEOMToolsGUI_TreeWidgetItem()
+{
+}
+
+bool GEOMToolsGUI_TreeWidgetItem::isVisible()
+{
+ return myVisible;
+}
+
+void GEOMToolsGUI_TreeWidgetItem::setVisible( bool theIsVisible, QIcon& theIcon )
+{
+ myVisible = theIsVisible;
+ setIcon( 1, theIcon );
+}
+
+char* GEOMToolsGUI_TreeWidgetItem::getStudyEntry() const
+{
+ return myStudyEntry;
+}
+
+GEOMToolsGUI_ReduceStudyDlg::GEOMToolsGUI_ReduceStudyDlg( const GEOM::string_array& theObjectEntries, QWidget* parent )
+:QDialog( parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint ),
+mySelectAll( false ),
+myDisplayer(NULL)
+{
+ for( int i = 0; i < theObjectEntries.length(); i++ )
+ myMainEntries.insert( theObjectEntries[i].in() );
+
+ myParents.insert( "0:1:21" );
+ myParents.insert( "0:1:17" );
+ myParents.insert( "0:1:20" );
+ myParents.insert( "0:1:13" );
+ myParents.insert( "0:1:12" );
+
+ mySubObjects.insert( "0:1:24" );
+ mySubObjects.insert( "0:1:28" );
+ mySubObjects.insert( "0:1:29" );
+ mySubObjects.insert( "0:1:34" );
+
+ myOthers.insert( "0:1:35" );
+ myOthers.insert( "0:1:36" );
+ myOthers.insert( "0:1:37" );
+ myOthers.insert( "0:1:38" );
+ myOthers.insert( "0:1:39" );
+
+ std::set::iterator it;
+ for ( it=myParents.begin(); it!=myParents.end(); ++it)
+ std::cout << ' ' << *it;
+
+ SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+ myVisible = QIcon( resMgr->loadPixmap( "SUIT", tr( "ICON_DATAOBJ_VISIBLE" ) ) );
+ myInvisible = QIcon( resMgr->loadPixmap( "SUIT", tr( "ICON_DATAOBJ_INVISIBLE" ) ) );
+
+ SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
+ if ( !app ) return;
+ SalomeApp_Study* study = dynamic_cast(app->activeStudy());
+ int studyId = GeometryGUI::ClientStudyToStudy( study->studyDS())->StudyId();
+
+ myDisplayer = GEOM_Displayer( study );
+
+ // setModal( true );
+ setWindowTitle( tr( "GEOM_REDUCE_STUDY_TITLE" ) );
+ setSizeGripEnabled( TRUE );
+
+ QGridLayout* topLayout = new QGridLayout( this );
+ topLayout->setMargin( 11 ); topLayout->setSpacing( 6 );
+
+ QGroupBox* groupKeptObjects = new QGroupBox( tr( "GEOM_REDUCE_STUDY_KEPT_OBJECTS" ) );
+
+ if(true) {
+ myTreeKeptObjects = new QTreeWidget();
+ myTreeKeptObjects->setColumnCount( 2 );
+ myTreeKeptObjects->setAllColumnsShowFocus(true);
+ QStringList columnNames;
+ columnNames.append(tr( "GEOM_REDUCE_STUDY_NAME" ));
+ columnNames.append("");
+ myTreeKeptObjects->setHeaderLabels( columnNames );
+ QTreeWidgetItem * headerItem = new QTreeWidgetItem( columnNames );
+ myTreeKeptObjects->setHeaderItem ( headerItem );
+ myTreeKeptObjects->header()->moveSection( 1, 0 );
+ myTreeKeptObjects->header()->setClickable( true );
+ myTreeKeptObjects->header()->setMovable( false );
+ myTreeKeptObjects->header()->setResizeMode( 1, QHeaderView::ResizeToContents );
+ myTreeKeptObjects->setSelectionMode( QAbstractItemView::ExtendedSelection );
+
+ }
+
+// myTreeWidget->header()->setSortIndicatorShown( true );
+// myTreeWidget->header()->moveSection( 2, 0 );
+// myTreeWidget->setSortingEnabled( true );
+// myTreeWidget->setColumnWidth( 2, VISIBILITY_COLUMN_WIDTH );
+
+ QLayout* layoutKeptObjects = new QGridLayout( groupKeptObjects );
+ layoutKeptObjects->addWidget( myTreeKeptObjects );
+
+ QGroupBox* groupRemoveObjects = new QGroupBox( tr( "GEOM_REDUCE_STUDY_REMOVE_OBJECTS" ) );
+
+ if(true) {
+ myTreeRemoveObjects = new QTreeWidget();
+ myTreeRemoveObjects->setColumnCount( 2 );
+ myTreeRemoveObjects->setAllColumnsShowFocus(true);
+ QStringList columnNames;
+ columnNames.append(tr( "GEOM_REDUCE_STUDY_NAME" ));
+ columnNames.append("");
+ myTreeRemoveObjects->setHeaderLabels( columnNames );
+ QTreeWidgetItem* headerItem = new QTreeWidgetItem( columnNames );
+ myTreeRemoveObjects->setHeaderItem ( headerItem );
+ myTreeRemoveObjects->header()->moveSection( 1, 0 );
+ myTreeRemoveObjects->header()->setClickable( true );
+ myTreeRemoveObjects->header()->setMovable( false );
+ myTreeRemoveObjects->header()->setResizeMode( 1, QHeaderView::ResizeToContents );
+ myTreeRemoveObjects->setSelectionMode( QAbstractItemView::ExtendedSelection );
+ }
+
+ QGridLayout* layoutRemoveObjects = new QGridLayout( groupRemoveObjects );
+ layoutRemoveObjects->addWidget( myTreeRemoveObjects );
+
+ QGroupBox* groupOptions = new QGroupBox( tr( "GEOM_REDUCE_STUDY_OPTIONS" ) );
+
+ QGridLayout* layoutOptions = new QGridLayout( groupOptions );
+
+ myCBUnpublishIntermediate = new QCheckBox( tr( "GEOM_REDUCE_STUDY_UNPUB_INTERMEDIATE" ) );
+ myCBRemoveIntermediate = new QCheckBox( tr( "GEOM_REDUCE_STUDY_REMOVE_INTERMEDIATE" ) );
+ myCBKeepSubObjects = new QCheckBox( tr( "GEOM_REDUCE_STUDY_KEEP_SUB_OBJECTS" ) );
+ myCBRemoveEmptyFolder = new QCheckBox( tr( "GEOM_REDUCE_STUDY_REMOVE_EMPTY_FOLDER" ) );
+ myCBRemoveEmptyFolder->setChecked( true );
+ myCBSoftRemoval = new QCheckBox( tr( "GEOM_REDUCE_STUDY_SOFT_REMOVAL" ) );
+
+ layoutOptions->addWidget( myCBUnpublishIntermediate, 0, 0 );
+ layoutOptions->addWidget( myCBRemoveIntermediate, 0, 1 );
+ layoutOptions->addWidget( myCBKeepSubObjects, 1, 0, 1, 2 );
+ layoutOptions->addWidget( myCBRemoveEmptyFolder, 2, 0, 1, 2 );
+ layoutOptions->addWidget( myCBSoftRemoval, 3, 0, 1, 2 );
+
+ QGroupBox* groupButtons = new QGroupBox();
+
+ QHBoxLayout* layoutButtons = new QHBoxLayout( groupButtons );
+
+ QPushButton* buttonOk = new QPushButton( tr( "GEOM_BUT_OK" ) );
+ QPushButton* buttonCancel = new QPushButton( tr( "GEOM_BUT_CANCEL" ) );
+ QPushButton* buttonHelp = new QPushButton( tr( "GEOM_BUT_HELP" ) );
+
+ layoutButtons->addWidget( buttonOk );
+ layoutButtons->addStretch();
+ layoutButtons->addWidget( buttonCancel );
+ layoutButtons->addWidget( buttonHelp );
+
+ topLayout->addWidget( groupKeptObjects, 0, 0 );
+ topLayout->addWidget( groupRemoveObjects, 0, 1 );
+ topLayout->addWidget( groupOptions, 1, 0, 1, 2 );
+ topLayout->addWidget( groupButtons, 2, 0, 1, 2 );
+
+// connect( myCBUnpublishIntermediate, SIGNAL( toggled( bool ) ), this, SLOT( onUnpublishIntermediate( bool ) ) );
+// connect( myCBRemoveIntermediate, SIGNAL( toggled ( bool ) ), this, SLOT( onRemoveIntermediate( bool ) ) );
+// connect( myCBKeepSubObjects, SIGNAL( toggled ( bool ) ), this, SLOT( onKeepSubObjects( bool ) ) );
+// connect( myCBRemoveEmptyFolder, SIGNAL( toggled ( bool ) ), this, SLOT( onRemoveEmptyFolder( bool ) ) );
+// connect( myCBSoftRemoval, SIGNAL( toggled ( bool ) ), this, SLOT( onSoftRemoval( bool ) ) );
+
+ connect( buttonOk, SIGNAL( clicked() ), this, SLOT( clickOnOk() ) );
+ connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( clickOnCancel() ) );
+ connect( buttonHelp, SIGNAL( clicked() ), this, SLOT( clickOnHelp() ) );
+
+ connect( myTreeKeptObjects, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(onItemClicked(QTreeWidgetItem*, int)) );
+ connect( myTreeRemoveObjects, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(onItemClicked(QTreeWidgetItem*, int)) );
+
+ connect( myTreeKeptObjects->header(), SIGNAL( sectionClicked ( int ) ), this, SLOT( onHeaderClicked( int ) ) );
+ connect( myTreeRemoveObjects->header(), SIGNAL( sectionClicked ( int ) ), this, SLOT( onHeaderClicked( int ) ) );
+
+ connect( myCBKeepSubObjects, SIGNAL( toggled(bool)), this, SLOT( update() ) );
+ connect( myCBRemoveIntermediate, SIGNAL( toggled(bool)), this, SLOT( update() ) );
+ connect( myCBUnpublishIntermediate, SIGNAL( toggled(bool) ), this, SLOT( update() ) );
+
+ update();
+
+ checkVisibleIcon( myTreeKeptObjects );
+ checkVisibleIcon( myTreeRemoveObjects );
+
+
+}
+
+GEOMToolsGUI_ReduceStudyDlg::~GEOMToolsGUI_ReduceStudyDlg()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+void GEOMToolsGUI_ReduceStudyDlg::update()
+{
+ myTreeKeptObjects->clear();
+ myTreeRemoveObjects->clear();
+
+ std::set keptObjects(myMainEntries);
+ std::set removeObjects(myOthers);
+
+ if( myCBUnpublishIntermediate->isChecked() || myCBRemoveIntermediate->isChecked() ) {
+ std::set::iterator iter;
+ for( iter=myParents.begin(); iter!=myParents.end(); ++iter)
+ removeObjects.insert( *iter );
+ }
+ else {
+ std::set::iterator iter;
+ for( iter=myParents.begin(); iter!=myParents.end(); ++iter)
+ keptObjects.insert( *iter );
+ }
+
+ if( myCBKeepSubObjects->isChecked() ) {
+ std::set::iterator iter;
+ for( iter=mySubObjects.begin(); iter!=mySubObjects.end(); ++iter)
+ keptObjects.insert( *iter );
+ }
+ else {
+ std::set::iterator iter;
+ for( iter=mySubObjects.begin(); iter!=mySubObjects.end(); ++iter)
+ removeObjects.insert( *iter );
+ }
+
+ std::cout<<"\n\n\n Objects to be kept: ";
+ std::set::iterator it_kept;
+ for ( it_kept=keptObjects.begin(); it_kept!=keptObjects.end(); ++it_kept)
+ std::cout << ", " << *it_kept;
+ std::cout << std::endl;
+
+ std::cout<<"\n\n\n Objects to be remove: ";
+ std::set::iterator it_remove;
+ for ( it_remove=removeObjects.begin(); it_remove!=removeObjects.end(); ++it_remove)
+ std::cout << ", " << *it_remove;
+ std::cout << std::endl;
+
+ sortObjects( myTreeKeptObjects, keptObjects );
+ sortObjects( myTreeRemoveObjects, removeObjects );
+
+ myTreeKeptObjects->update();
+ myTreeKeptObjects->collapseAll();
+ myTreeRemoveObjects->update();
+ myTreeRemoveObjects->collapseAll();
+
+}
+
+void GEOMToolsGUI_ReduceStudyDlg::onUnpublishIntermediate( bool )
+{
+
+}
+void GEOMToolsGUI_ReduceStudyDlg::onRemoveIntermediate( bool theIsRemove )
+{
+ myCBUnpublishIntermediate->setEnabled( !theIsRemove );
+}
+void GEOMToolsGUI_ReduceStudyDlg::onKeepSubObjects( bool )
+{
+
+}
+void GEOMToolsGUI_ReduceStudyDlg::onRemoveEmptyFolder( bool )
+{
+
+}
+void GEOMToolsGUI_ReduceStudyDlg::onSoftRemoval( bool )
+{
+
+}
+
+void GEOMToolsGUI_ReduceStudyDlg::clickOnOk()
+{
+// if( myCBRemoveEmptyFolder->isChecked() ) {
+//
+// SALOME_ListIO selected;
+// SalomeApp_Application* app =
+// dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
+// if ( !app )
+// return;
+//
+// LightApp_SelectionMgr* aSelMgr = app->selectionMgr();
+// SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() );
+// if ( !aSelMgr || !appStudy )
+// return;
+//
+// // get selection
+// aSelMgr->selectedObjects( selected, "ObjectBrowser", false );
+// if ( selected.IsEmpty() )
+// return;
+//
+// _PTR(Study) aStudy = appStudy->studyDS();
+// _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
+//
+// // ... and then delete all folders
+// for ( it = toBeDelFolders.begin(); it != toBeDelFolders.end(); ++it ) {
+// _PTR(SObject) obj ( aStudy->FindObjectID( it.key().toLatin1().data() ) );
+// // remove object from GEOM engine
+// removeObjectWithChildren( obj, aStudy, views, disp );
+// // remove objects from study
+// aStudyBuilder->RemoveObjectWithChildren( obj );
+// // remove object from use case tree
+// aUseCaseBuilder->Remove( obj );
+// }
+// }
+}
+
+////=======================================================================
+//// function : getGeomChildrenAndFolders
+//// purpose : Get direct (1-level) GEOM objects under each folder, sub-folder, etc. and these folders itself
+////=======================================================================
+//static void getGeomChildrenAndFolders( _PTR(SObject) theSO,
+// QMap& geomObjList,
+// QMap& folderList ) {
+// if ( !theSO ) return;
+// _PTR(Study) aStudy = theSO->GetStudy();
+// if ( !aStudy ) return;
+// _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
+//
+// bool isFolder = false;
+// _PTR(GenericAttribute) anAttr;
+// if ( theSO->FindAttribute(anAttr, "AttributeLocalID") ) {
+// _PTR(AttributeLocalID) aLocalID( anAttr );
+// isFolder = aLocalID->Value() == 999;
+// }
+// QString anEntry = theSO->GetID().c_str();
+// QString aName = theSO->GetName().c_str();
+// if ( isFolder ) {
+// folderList.insert( anEntry, aName );
+// _PTR(UseCaseIterator) ucit ( aUseCaseBuilder->GetUseCaseIterator( theSO ) );
+// for ( ucit->Init( false ); ucit->More(); ucit->Next() ) {
+// getGeomChildrenAndFolders( ucit->Value(), geomObjList, folderList );
+// }
+// } else {
+// geomObjList.insert( anEntry, aName );
+// }
+//}
+
+void GEOMToolsGUI_ReduceStudyDlg::clickOnCancel()
+{
+ accept();
+}
+void GEOMToolsGUI_ReduceStudyDlg::clickOnHelp()
+{
+
+}
+
+void GEOMToolsGUI_ReduceStudyDlg::onSelectionChanged()
+{
+ onShowOnlySelected();
+}
+
+void GEOMToolsGUI_ReduceStudyDlg::onShowOnlySelected()
+{
+// SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
+// if ( !app ) return;
+//
+// SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() );
+// GEOM_Displayer* disp = new GEOM_Displayer( appStudy );
+//
+// OCCViewer_ViewManager* anOCCVM = (OCCViewer_ViewManager*) app->getViewManager( OCCViewer_Viewer::Type(), /*create=*/ true );
+//
+// std::cout << "\n\n\n onShowOnlySelected = " << std::endl;
+// if ( SUIT_ViewModel* viewModel = anOCCVM->getViewModel() )
+// if ( SALOME_View* viewFrame = dynamic_cast( viewModel ) ) {
+// disp->EraseAll( true, false, viewFrame );
+//
+// std::cout << "\n\n\n EraseAll = " << std::endl;
+//
+// QList selected = myTreeKeptObjects->selectedItems();
+// for( int i = 0; i< selected.size(); i++ ) {
+// const char* entry = myMap[selected[i]].first.c_str();
+// std::cout << "\n\n\n entry = " << QString( entry ).toStdString() << std::endl;
+// const char* name = "TEMP_IO";
+//
+// Handle(SALOME_InteractiveObject) tmpIO =
+// new SALOME_InteractiveObject( entry, "GEOM", name );
+//
+// disp->Display( tmpIO, false, viewFrame );
+// }
+// viewFrame->Repaint();
+// }
+}
+
+
+//=================================================================================
+// function : onItemClicked()
+// purpose : Called then treeItem clicked
+//=================================================================================
+void GEOMToolsGUI_ReduceStudyDlg::onItemClicked( QTreeWidgetItem* theItem, int theColumn )
+{
+ if( theColumn != 1 || !( theItem->flags() & Qt::ItemIsSelectable ) )
+ return;
+
+ GEOMToolsGUI_TreeWidgetItem* item = dynamic_cast( theItem );
+
+ const char* entry = item->getStudyEntry();
+ Handle(SALOME_InteractiveObject) io = new SALOME_InteractiveObject( entry, "GEOM", "TEMP_IO" );
+ if( myDisplayer.IsDisplayed( entry ) ) {
+ item->setVisible( false, myInvisible );
+ myDisplayer.Erase( io );
+ }
+ else {
+ item->setVisible( true, myVisible );
+ myDisplayer.Display( io );
+ }
+ myDisplayer.UpdateViewer();
+ checkVisibleIcon( item->treeWidget() );
+}
+
+void GEOMToolsGUI_ReduceStudyDlg::onHeaderClicked( int theColumn )
+{
+ if( theColumn != 1 )
+ return;
+ QTreeWidget* treeData = dynamic_cast(sender()->parent());
+ if( myMapTreeSelectAll[ treeData ] ) {
+ myMapTreeSelectAll[ treeData ] = false;
+ treeData->headerItem()->setIcon( 1, myInvisible );
+ QTreeWidgetItemIterator it( treeData );
+ while(*it) {
+ GEOMToolsGUI_TreeWidgetItem* item = dynamic_cast(*it);
+ if( item->flags() & Qt::ItemIsSelectable ) {
+ const char* entry = item->getStudyEntry();
+ if( item->isVisible() ) {
+ item->setVisible( false, myInvisible );
+ myDisplayer.Erase( new SALOME_InteractiveObject( entry, "GEOM", "TEMP_IO" ) );
+ }
+ }
+ ++it;
+
+ }
+ }
+ else {
+ myMapTreeSelectAll[ treeData ] = true;
+ treeData->headerItem()->setIcon( 1, myVisible );
+ QTreeWidgetItemIterator it(treeData);
+ while(*it) {
+ GEOMToolsGUI_TreeWidgetItem* item = dynamic_cast(*it);
+ if( item->flags() & Qt::ItemIsSelectable ) {
+ const char* entry = item->getStudyEntry();
+ if( !item->isVisible() ) {
+ item->setVisible( true, myVisible );
+ myDisplayer.Display( new SALOME_InteractiveObject( entry, "GEOM", "TEMP_IO" ) );
+ }
+ }
+ ++it;
+ }
+ }
+ myDisplayer.UpdateViewer();
+}
+
+
+void GEOMToolsGUI_ReduceStudyDlg::checkVisibleIcon( QTreeWidget* theWidget )
+{
+ bool isInvisible = false;
+ QTreeWidgetItemIterator it( theWidget );
+ while(*it) {
+ GEOMToolsGUI_TreeWidgetItem* item = dynamic_cast(*it);
+ const char* entry = item->getStudyEntry();
+ if( item->flags() & Qt::ItemIsSelectable )
+ if( !item->isVisible() )
+ isInvisible = true;
+ ++it;
+ }
+
+ if( isInvisible ) {
+ theWidget->headerItem()->setIcon( 1, myInvisible );
+ myMapTreeSelectAll[ theWidget ] = false;
+ }
+ else {
+ theWidget->headerItem()->setIcon( 1, myVisible );
+ myMapTreeSelectAll[ theWidget ] = true;
+ }
+}
+
+void GEOMToolsGUI_ReduceStudyDlg::sortObjects( QTreeWidget* theWidget, std::set& theObjects )
+{
+ SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
+ if ( !app ) return;
+ SalomeApp_Study* study = dynamic_cast(app->activeStudy());
+ int studyId = GeometryGUI::ClientStudyToStudy( study->studyDS())->StudyId();
+
+ std::set::iterator it;
+ for( it = theObjects.begin(); it != theObjects.end(); ++it ) {
+ std::string objectEntry = *it;
+ GEOM::GEOM_BaseObject_var GeomBaseObject = GeometryGUI::GetGeomGen()->GetObject( studyId, objectEntry.c_str() );
+ GEOM::GEOM_Object_var GeomObject = GEOM::GEOM_Object::_narrow( GeomBaseObject );
+ if( GeomObject->_is_nil() )
+ continue;
+ addSubObject( theWidget, theObjects, GeomObject );
+ }
+}
+
+GEOMToolsGUI_TreeWidgetItem* GEOMToolsGUI_ReduceStudyDlg::addSubObject( QTreeWidget* theWidget, std::set& theObjects, GEOM::GEOM_Object_var theObject )
+{
+ std::cout<<"\n\n ----------------- addSubObject ---------------------" << std::endl;
+ std::cout <<"\nObject = " << theObject->GetName() << std::endl;
+ GEOMToolsGUI_TreeWidgetItem* item;
+ if( !theObject->IsMainShape() ) {
+ GEOMToolsGUI_TreeWidgetItem* parentItem = addSubObject( theWidget, theObjects, theObject->GetMainShape() );
+ std::cout <<"\nParentItem = " << parentItem->text(0).toStdString() << std::endl;
+ item = findObjectInTree( theWidget, theObject );
+ if( !item )
+ item = new GEOMToolsGUI_TreeWidgetItem( parentItem, QStringList() << theObject->GetName(), theObject->GetStudyEntry(), false );
+ }
+ else {
+ std::cout <<"\nParentItem = ROOT" << std::endl;
+ item = findObjectInTree( theWidget, theObject );
+ if( !item )
+ item = new GEOMToolsGUI_TreeWidgetItem( theWidget, QStringList() << theObject->GetName(), theObject->GetStudyEntry(), false );
+ }
+
+ bool isDisplayed = false;
+ if( theObjects.find( theObject->GetEntry() ) != theObjects.end() ) {
+ std::cout << "\n FOUND " << std::endl;
+ isDisplayed = myDisplayer.IsDisplayed( theObject->GetStudyEntry() );
+ if ( isDisplayed ) {
+ item->setVisible( true, myVisible );
+ }
+ else {
+ item->setVisible( false, myInvisible );
+ }
+ if( myMainEntries.find( theObject->GetEntry() ) != myMainEntries.end() ) {
+ QFont Textfont = item->font(0);
+ Textfont.setBold( true );
+ item->setFont( 0, Textfont );
+ }
+
+ }
+ else {
+ std::cout << "\n NOT FOUND " << std::endl;
+ item->setFlags( item->flags() & ~Qt::ItemIsSelectable );
+ item->setTextColor( 0, QColor( 150, 150, 150 ) );
+ }
+
+ std::cout<<"\n\n ----------------- FINISH addSubObject ---------------------" << std::endl;
+ return item;
+}
+
+GEOMToolsGUI_TreeWidgetItem* GEOMToolsGUI_ReduceStudyDlg::findObjectInTree( QTreeWidget* theWidget, GEOM::GEOM_Object_var theObject )
+{
+ QTreeWidgetItemIterator it( theWidget );
+ std::cout <<"\n\n\n theObject->GetStudyEntry() = " << theObject->GetStudyEntry() << std::endl;
+ while(*it) {
+ GEOMToolsGUI_TreeWidgetItem* item = dynamic_cast(*it);
+ std::cout <<"\n\n\n item->getStudyEntry() = " << item->getStudyEntry() << std::endl;
+ if( QString( item->getStudyEntry() ) == QString( theObject->GetStudyEntry() ) )
+ return item;
+ ++it;
+ }
+ std::cout <<"\n\n\n RETURN NULL " << std::endl;
+ return NULL;
+}
diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.h b/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.h
new file mode 100644
index 000000000..e477e4605
--- /dev/null
+++ b/src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.h
@@ -0,0 +1,110 @@
+// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef GEOMTOOLSGUI_REDUCESTUDYDLG_H
+#define GEOMTOOLSGUI_REDUCESTUDYDLG_H
+
+#include "GEOM_ToolsGUI.hxx"
+#include
+#include
+#include
+
+#include
+#include
+#include
+
+#include
+
+class GEOMToolsGUI_TreeWidgetItem : public QTreeWidgetItem
+{
+public:
+ GEOMToolsGUI_TreeWidgetItem( QTreeWidget*, const QStringList&, char*, bool, int = Type );
+ GEOMToolsGUI_TreeWidgetItem( QTreeWidgetItem*, const QStringList&, char*, bool, int = Type );
+ ~GEOMToolsGUI_TreeWidgetItem();
+
+ bool isVisible();
+ void setVisible( bool, QIcon& );
+
+ char* getStudyEntry() const;
+
+private:
+ char* myStudyEntry;
+ bool myVisible;
+};
+
+class GEOMTOOLSGUI_EXPORT GEOMToolsGUI_ReduceStudyDlg : public QDialog
+{
+ Q_OBJECT
+
+public:
+ GEOMToolsGUI_ReduceStudyDlg( const GEOM::string_array&, QWidget* );
+ ~GEOMToolsGUI_ReduceStudyDlg();
+
+private slots:
+
+ void onUnpublishIntermediate( bool );
+ void onRemoveIntermediate( bool );
+ void onKeepSubObjects( bool );
+ void onRemoveEmptyFolder( bool );
+ void onSoftRemoval( bool );
+
+ void clickOnOk();
+ void clickOnCancel();
+ void clickOnHelp();
+
+ void onSelectionChanged();
+ void onItemClicked(QTreeWidgetItem*, int );
+ void onHeaderClicked( int );
+
+ void update();
+
+private:
+
+ void onShowOnlySelected();
+ void checkVisibleIcon( QTreeWidget* );
+ void sortObjects( QTreeWidget*, std::set& );
+ GEOMToolsGUI_TreeWidgetItem* addSubObject( QTreeWidget*, std::set&, GEOM::GEOM_Object_var );
+ GEOMToolsGUI_TreeWidgetItem* findObjectInTree( QTreeWidget*, GEOM::GEOM_Object_var );
+
+ QTreeWidget* myTreeKeptObjects;
+ QTreeWidget* myTreeRemoveObjects;
+
+ QCheckBox* myCBUnpublishIntermediate;
+ QCheckBox* myCBRemoveIntermediate;
+ QCheckBox* myCBKeepSubObjects;
+ QCheckBox* myCBRemoveEmptyFolder;
+ QCheckBox* myCBSoftRemoval;
+
+ std::set myMainEntries;
+
+ QIcon myVisible;
+ QIcon myInvisible;
+
+ bool mySelectAll;
+
+ GEOM_Displayer myDisplayer;
+
+ std::set myParents;
+ std::set mySubObjects;
+ std::set myOthers;
+
+ std::map myMapTreeSelectAll;
+};
+
+#endif