From ae3549a5e4390b68ca7189237374c70c6aaa385b Mon Sep 17 00:00:00 2001 From: rnv Date: Thu, 31 Mar 2011 11:16:45 +0000 Subject: [PATCH] Implementation of the "16219: EDF PAL 469: "RemoveFromStudy" Function" issue. --- doc/salome/gui/GEOM/images/ob_popup_menu.png | Bin 13720 -> 15017 bytes doc/salome/gui/GEOM/images/publish_dlg.png | Bin 0 -> 9441 bytes .../gui/GEOM/input/viewing_geom_obj.doc | 10 +- src/GEOMGUI/GEOM_Displayer.cxx | 55 +++ src/GEOMGUI/GEOM_Displayer.h | 3 + src/GEOMGUI/GEOM_msg_en.ts | 55 +++ src/GEOMGUI/GeometryGUI.cxx | 19 + src/GEOMGUI/GeometryGUI_Operations.h | 3 + src/GEOMToolsGUI/GEOMToolsGUI.cxx | 6 + src/GEOMToolsGUI/GEOMToolsGUI.h | 2 + src/GEOMToolsGUI/GEOMToolsGUI_1.cxx | 85 +++- src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.cxx | 389 ++++++++++++++++++ src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.h | 83 ++++ src/GEOMToolsGUI/Makefile.am | 9 +- 14 files changed, 714 insertions(+), 5 deletions(-) create mode 100755 doc/salome/gui/GEOM/images/publish_dlg.png create mode 100644 src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.cxx create mode 100644 src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.h diff --git a/doc/salome/gui/GEOM/images/ob_popup_menu.png b/doc/salome/gui/GEOM/images/ob_popup_menu.png index 1adb3bebb466d779ba76026474801b47d533b439..51ae305d72372e5db3a74aad35957f109464b0e4 100644 GIT binary patch literal 15017 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 GA^!uHzL5$5 diff --git a/doc/salome/gui/GEOM/images/publish_dlg.png b/doc/salome/gui/GEOM/images/publish_dlg.png new file mode 100755 index 0000000000000000000000000000000000000000..46568135191e2061659cc94b1dbaf8f83b1b7b76 GIT binary patch literal 9441 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GEOM/input/viewing_geom_obj.doc b/doc/salome/gui/GEOM/input/viewing_geom_obj.doc index 39a4f9035..ba06d2397 100644 --- a/doc/salome/gui/GEOM/input/viewing_geom_obj.doc +++ b/doc/salome/gui/GEOM/input/viewing_geom_obj.doc @@ -74,9 +74,17 @@ under certain conditions:
  • \subpage work_with_groups_page "Create Group" - allows creating groups of geometrical objects.
  • Hide Children / Show Children - hides / shows child -sub-objects in the Object Browser, if the selected geometr object has +sub-objects in the Object Browser, if the selected geometric object has child objects. When some child objects are hidden, the name of the parent object is hilghlighted with bold font.
  • + +
  • Unpublish - unpublish the selected geometric object from the Object Browser +and erase it from all viewers. To publish unpublished geometric objects select in the +context menu of the Geometry root object Publish... item. +The following dialog box will appear
+\image html publish_dlg.png
+ +Switch the checkbox near the appropriate object and click Publish or Publish And Close button. */ diff --git a/src/GEOMGUI/GEOM_Displayer.cxx b/src/GEOMGUI/GEOM_Displayer.cxx index aff2f8320..1f3a7e09a 100644 --- a/src/GEOMGUI/GEOM_Displayer.cxx +++ b/src/GEOMGUI/GEOM_Displayer.cxx @@ -48,9 +48,11 @@ #include #include + #include #include #include +#include #include #include @@ -1816,3 +1818,56 @@ SALOMEDS::Color GEOM_Displayer::getColor(GEOM::GEOM_Object_var theGeomObject, bo } return aSColor; } + + +void GEOM_Displayer::EraseWithChildren(const Handle(SALOME_InteractiveObject)& theIO, + const bool eraseOnlyChildren) { + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if ( !app ) + return; + + SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); + if ( !appStudy ) + return; + + LightApp_DataObject* parent = appStudy->findObjectByEntry(theIO->getEntry()); + + if( !parent) + return; + + // Erase from all views + QList views; + SALOME_View* view; + ViewManagerList vmans = app->viewManagers(); + SUIT_ViewManager* vman; + foreach ( vman, vmans ) { + SUIT_ViewModel* vmod = vman->getViewModel(); + view = dynamic_cast ( vmod ); + if ( view ) + views.append( view ); + } + + if( views.count() == 0 ) + return; + + //Erase childrens w/o update views + DataObjectList listObj = parent->children( true ); + SUIT_DataObject* obj; + foreach( obj, listObj ) { + LightApp_DataObject* l_obj = dynamic_cast(obj); + if(l_obj) + foreach ( view, views ) { + Handle(SALOME_InteractiveObject) anIO = + new SALOME_InteractiveObject(qPrintable(l_obj->entry()), "GEOM", ""); + Erase(anIO, false, false, view); + } + } + + //Erase parent with view update or repaint views + foreach ( view, views ) { + if(!eraseOnlyChildren) + Erase(theIO, false, true, view); + else + view->Repaint(); + } +} diff --git a/src/GEOMGUI/GEOM_Displayer.h b/src/GEOMGUI/GEOM_Displayer.h index 7b5977046..56676d375 100644 --- a/src/GEOMGUI/GEOM_Displayer.h +++ b/src/GEOMGUI/GEOM_Displayer.h @@ -98,6 +98,9 @@ public: const bool forced = false, const bool updateViewer = true ); + void EraseWithChildren(const Handle(SALOME_InteractiveObject)& theIO, + const bool eraseOnlyChildren = false); + /* Display/Erase list of objects methods */ void Display ( const SALOME_ListIO& theIOList, diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index 51e009ed2..b4725cbe5 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -2473,6 +2473,14 @@ Please, select face, shell or solid and try again MEN_POP_HIDE_CHILDREN Hide Children + + MEN_POP_UNPUBLISH_OBJ + Unpublish + + + MEN_POP_PUBLISH_OBJ + Publish... + MEN_POP_ISOS Isos @@ -3109,6 +3117,14 @@ Please, select face, shell or solid and try again STB_POP_SHOW_CHILDREN Show child objects + + STB_POP_UNPUBLISH_OBJ + Unpublish object + + + STB_POP_PUBLISH_OBJ + Publish object + STB_POP_HIDE_CHILDREN Hide child objects @@ -3637,6 +3653,14 @@ Please, select face, shell or solid and try again TOP_POP_SHOW_CHILDREN Show Children + + TOP_POP_UNPUBLISH_OBJ + Unpublish object + + + TOP_POP_PUBLISH_OBJ + Publish object + TOP_POP_HIDE_CHILDREN Hide Children @@ -4820,4 +4844,35 @@ Would you like to continue? New L2 + + GEOMToolsGUI_PublishDlg + + GEOM_PUBLISH_OBJECTS_TLT + Publish Objects + + + OBJECT_NAME + Name + + + OBJECT_ENTRY + Entry + + + UNSELECT_ALL + U&nselect All + + + SELECT_ALL + Select &All + + + GEOM_PUBLISH_BTN + &Publish + + + GEOM_PUBLISH_CLOSE_BTN + P&ublish And Close + + diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index b7b0bcc28..4ecb54520 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -358,6 +358,8 @@ void GeometryGUI::OnGUIEvent( int id ) << GEOMOp::OpShowOnly << GEOMOp::OpShowChildren << GEOMOp::OpHideChildren + << GEOMOp::OpUnpublishObject + << GEOMOp::OpPublishObject << GEOMOp::OpPointMarker; if ( !ViewOCC && !ViewVTK && !NotViewerDependentCommands.contains( id ) ) return; @@ -398,6 +400,8 @@ void GeometryGUI::OnGUIEvent( int id ) case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR case GEOMOp::OpShowChildren: // POPUP MENU - SHOW CHILDREN case GEOMOp::OpHideChildren: // POPUP MENU - HIDE CHILDREN + case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH + case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER case GEOMOp::OpRename: // POPUP MENU - RENAME libName = "GEOMToolsGUI"; @@ -785,6 +789,8 @@ void GeometryGUI::initialize( CAM_Application* app ) createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" ); createGeomAction( GEOMOp::OpShowChildren, "POP_SHOW_CHILDREN" ); createGeomAction( GEOMOp::OpHideChildren, "POP_HIDE_CHILDREN" ); + createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" ); + createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" ); createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" ); createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" ); @@ -975,6 +981,8 @@ void GeometryGUI::initialize( CAM_Application* app ) createMenu( GEOMOp::OpShowAll, viewId, -1 ); createMenu( GEOMOp::OpHideAll, viewId, -1 ); createMenu( separator(), viewId, -1 ); + createMenu( GEOMOp::OpPublishObject, viewId, -1 ); + createMenu( separator(), viewId, -1 ); /* PAL9111: @@ -1091,6 +1099,7 @@ void GeometryGUI::initialize( CAM_Application* app ) "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true"; QtxPopupMgr* mgr = popupMgr(); + mgr->insert( action( GEOMOp::OpRename ), -1, -1 ); // rename mgr->setRule( action( GEOMOp::OpRename ), QString("$type in {'Shape' 'Group'} and selcount=1"), QtxPopupMgr::VisibleRule ); mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete @@ -1099,6 +1108,7 @@ void GeometryGUI::initialize( CAM_Application* app ) mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule ); mgr->insert( action( GEOMOp::OpShowChildren ), -1, -1 ); // show children mgr->setRule( action( GEOMOp::OpShowChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasHiddenChildren=true"), QtxPopupMgr::VisibleRule ); + mgr->insert( action( GEOMOp::OpHideChildren ), -1, -1 ); // hide children mgr->setRule( action( GEOMOp::OpHideChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasShownChildren=true"), QtxPopupMgr::VisibleRule ); mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group @@ -1180,6 +1190,15 @@ void GeometryGUI::initialize( CAM_Application* app ) mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule ); mgr->insert( separator(), -1, -1 ); + mgr->insert( separator(), -1, -1 ); // ----------- + mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object + mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule ); + + + mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object + mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule ); + + mgr->hide( mgr->actionId( action( myEraseAll ) ) ); } diff --git a/src/GEOMGUI/GeometryGUI_Operations.h b/src/GEOMGUI/GeometryGUI_Operations.h index ce4f9edbd..4d86e9bdd 100644 --- a/src/GEOMGUI/GeometryGUI_Operations.h +++ b/src/GEOMGUI/GeometryGUI_Operations.h @@ -51,6 +51,9 @@ namespace GEOMOp { OpShowChildren = 1250, // POPUP MENU - SHOW CHILDREN OpHideChildren = 1251, // POPUP MENU - HIDE CHILDREN OpRename = 1252, // POPUP MENU - RENAME + OpUnpublishObject = 1253, // POPUP MENU - UNPUBLISH + OpPublishObject = 1254, // GEOM ROOT OBJECT - POPUP MENU - PUBLISH + // DisplayGUI ----------------//-------------------------------- OpDisplayMode = 2000, // MENU VIEW - DISPLAY MODE - WIREFRAME/SHADING OpSwitchVectors = 2001, // MENU VIEW - DISPLAY MODE - SHOW/HIDE EDGE DIRECTION diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.cxx b/src/GEOMToolsGUI/GEOMToolsGUI.cxx index 5f8442776..cbde99ce1 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI.cxx @@ -362,6 +362,12 @@ bool GEOMToolsGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent) case GEOMOp::OpPointMarker: // POPUP - POINT MARKER OnPointMarker(); break; + case GEOMOp::OpUnpublishObject:// POPUP - UNPUBLISH + OnUnpublishObject(); + break; + case GEOMOp::OpPublishObject:// GEOM ROOT OBJECT - POPUP - PUBLISH + OnPublishObject(); + break; default: SUIT_Session::session()->activeApplication()->putInfo(tr("GEOM_PRP_COMMAND").arg(theCommandID)); break; diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.h b/src/GEOMToolsGUI/GEOMToolsGUI.h index 09cdbd4e8..25516496a 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI.h +++ b/src/GEOMToolsGUI/GEOMToolsGUI.h @@ -73,6 +73,8 @@ private: void OnDeflection(); void OnSelectOnly(int mode); void OnShowHideChildren( bool ); + void OnUnpublishObject(); + void OnPublishObject() ; void OnPointMarker(); // Shortcut commands diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx index a37613070..8f434de96 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx @@ -31,6 +31,7 @@ #include "GEOMToolsGUI_NbIsosDlg.h" #include "GEOMToolsGUI_DeflectionDlg.h" #include "GEOMToolsGUI_MarkerDlg.h" +#include "GEOMToolsGUI_PublishDlg.h" #include #include @@ -795,7 +796,12 @@ void GEOMToolsGUI::OnShowHideChildren( bool show ) SALOME_ListIO selected; SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); - if ( app ) { + + SalomeApp_Module* mod = app ? dynamic_cast(app->activeModule()) : 0; + + GEOM_Displayer* disp = mod ? dynamic_cast(mod->displayer()) : 0; + + if ( app && disp ) { LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); if ( aSelMgr && appStudy ) { @@ -820,6 +826,8 @@ void GEOMToolsGUI::OnShowHideChildren( bool show ) if ( obj ) { _PTR(AttributeExpandable) aExp = B->FindOrCreateAttribute( obj, "AttributeExpandable" ); aExp->SetExpandable( show ); + if(!show) + disp->EraseWithChildren(IObject,true); } // if ( obj ) } // iterator } @@ -834,3 +842,78 @@ void GEOMToolsGUI::OnPointMarker() GEOMToolsGUI_MarkerDlg dlg( SUIT_Session::session()->activeApplication()->desktop() ); dlg.exec(); } + + +void GEOMToolsGUI::OnUnpublishObject() { + SALOME_ListIO selected; + SalomeApp_Application* app = + dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + + SalomeApp_Module* mod = app ? dynamic_cast(app->activeModule()) : 0; + + GEOM_Displayer* disp = mod ? dynamic_cast(mod->displayer()) : 0; + + if ( app && disp ) { + LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); + SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); + if ( aSelMgr && appStudy ) { + aSelMgr->selectedObjects( selected ); + if ( !selected.IsEmpty() ) { + _PTR(Study) aStudy = appStudy->studyDS(); + _PTR(StudyBuilder) B = aStudy->NewBuilder(); + + bool aLocked = ( _PTR(AttributeStudyProperties)( aStudy->GetProperties() ) )->IsLocked(); + if ( aLocked ) { + SUIT_MessageBox::warning( app->desktop(), + QObject::tr( "WRN_WARNING" ), + QObject::tr( "WRN_STUDY_LOCKED" ) ); + return; + } + + for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { + Handle(SALOME_InteractiveObject) IObject = It.Value(); + + _PTR(SObject) obj ( aStudy->FindObjectID( IObject->getEntry() ) ); + _PTR(GenericAttribute) anAttr; + if ( obj ) { + _PTR(AttributeDrawable) aDrw = B->FindOrCreateAttribute( obj, "AttributeDrawable" ); + aDrw->SetDrawable( false ); + disp->EraseWithChildren(IObject); + } // if ( obj ) + } // iterator + aSelMgr->clearSelected(); + } + } + app->updateObjectBrowser( false ); + app->updateActions(); + } + +} + +void GEOMToolsGUI::OnPublishObject() { + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if(!app) + return; + + SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); + if(!appStudy) + return; + + _PTR(Study) aStudy = appStudy->studyDS(); + + if(!aStudy) + return; + + //Check lock of the study + bool aLocked = ( _PTR(AttributeStudyProperties)( aStudy->GetProperties() ) )->IsLocked(); + if ( aLocked ) { + SUIT_MessageBox::warning( app->desktop(), + QObject::tr( "WRN_WARNING" ), + QObject::tr( "WRN_STUDY_LOCKED" ) ); + return; + } + + GEOMToolsGUI_PublishDlg * publishDlg = + new GEOMToolsGUI_PublishDlg( SUIT_Session::session()->activeApplication()->desktop() ); + publishDlg->exec(); +} diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.cxx new file mode 100644 index 000000000..7852c0563 --- /dev/null +++ b/src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.cxx @@ -0,0 +1,389 @@ +// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// 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. +// +// 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 +// + +// GEOM GEOMGUI : GUI for Geometry component +// File : GEOMToolsGUI_PublishDlg.cxx +// Author : Roman NIKOLAEV, Open CASCADE S.A.S. +// + +#include "GEOMToolsGUI_PublishDlg.h" + +//SALOME GUI includes +#include +#include + +#include + +#include + +#include +#include +#include + + +//QT includes +#include +#include +#include + +#define DEFAULT_MARGIN 11 +#define DEFAULT_SPACING 6 + +GEOMToolsGUI_PublishDlg::GEOMToolsGUI_PublishDlg(QWidget* parent): + QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint) +{ + setObjectName( "GEOMToolsGUI_PublishDlg" ); + setModal( true ); + setWindowTitle( tr( "GEOM_PUBLISH_OBJECTS_TLT" ) ); + + setAttribute(Qt::WA_DeleteOnClose); + + //List of the objects + myTreeWidget = new QTreeWidget(this); + //myTreeWidget->setRootIsDecorated(false); + //myTreeWidget->setUniformRowHeights(true); + myTreeWidget->setAllColumnsShowFocus(true); + myTreeWidget->setColumnCount(2); + + QStringList columnNames; + columnNames.append(tr("OBJECT_NAME")); + columnNames.append(tr("OBJECT_ENTRY")); + QTreeWidgetItem * headerItem = new QTreeWidgetItem(columnNames); + myTreeWidget->setHeaderItem ( headerItem ); + + //Select All button + QPushButton* selectAllButton = new QPushButton( tr("SELECT_ALL"),this ); + + //Unselect Select All button + QPushButton* unselectAllButton = new QPushButton( tr("UNSELECT_ALL"),this ); + + //Publish button + QPushButton* publishButton = new QPushButton( tr("GEOM_PUBLISH_BTN"),this ); + + //Publish and Close button + QPushButton* publishCloseButton = new QPushButton( tr("GEOM_PUBLISH_CLOSE_BTN"), this ); + + //Close button + QPushButton* closeButton = new QPushButton( tr("GEOM_BUT_CLOSE"), this ); + + QGridLayout* gridLayout = new QGridLayout(this); + gridLayout->setMargin(DEFAULT_MARGIN); + gridLayout->setSpacing(DEFAULT_SPACING); + + gridLayout->addWidget(myTreeWidget, 0, 0, 3, 3); + gridLayout->addWidget(selectAllButton, 0, 3, 1, 1); + gridLayout->addWidget(unselectAllButton, 1, 3, 1, 1); + gridLayout->addItem( new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding), 2, 3, 1, 1); + gridLayout->addWidget(publishCloseButton, 3, 0, 1, 1); + gridLayout->addWidget(publishButton, 3, 1, 1, 1); + gridLayout->addItem( new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum), 3, 2, 1, 1); + gridLayout->addWidget(closeButton, 3, 3, 1, 1); + + //Connect signals and slots + connect( selectAllButton, SIGNAL(clicked()), this, SLOT(clickOnSelectAll()) ); + connect( unselectAllButton, SIGNAL(clicked()), this, SLOT(clickOnUnSelectAll()) ); + + connect(publishCloseButton, SIGNAL(clicked()), this, SLOT(clickOnOk())); + connect(publishButton, SIGNAL(clicked()), this, SLOT(clickOnApply())); + connect(closeButton, SIGNAL(clicked()), this, SLOT(reject())); + + initData(); +} + +//================================================================================= +// function : ~GEOMToolsGUI_PublishDlg() +// purpose : Destroys the object and frees any allocated resources +//================================================================================= +GEOMToolsGUI_PublishDlg::~GEOMToolsGUI_PublishDlg() +{ +} + +//================================================================================= +// function : initData() +// purpose : Fill dialog after opening +//================================================================================= +void GEOMToolsGUI_PublishDlg::initData() { + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if(!app) + return; + + SalomeApp_Module* module = dynamic_cast(app->activeModule()); + + if(!module) + return; + + CAM_DataModel* dataModel = module->dataModel(); + if(!dataModel) + return; + + myGeomRoot = dynamic_cast(dataModel->root()); + + if(!myGeomRoot) + return; + + SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); + if(!appStudy ) + return; + + _PTR(Study) aStudy = appStudy->studyDS(); + if(!aStudy) + return; + + buildTree(aStudy, myGeomRoot); + + + myTreeWidget->resizeColumnToContents(0); + myTreeWidget->resizeColumnToContents(1); +} + +//================================================================================= +// function : buildTree() +// purpose : +//================================================================================= +QTreeWidgetItem* GEOMToolsGUI_PublishDlg::createItem(QTreeWidgetItem* theParent, Pair theAttributes, bool isCheckable) { + QStringList aList; + aList<setCheckState(0, Qt::Unchecked); + else { + anItem->setFlags(anItem->flags() & ~Qt::ItemIsUserCheckable); + } + + if(theParent) + theParent->addChild(anItem); + else + myTreeWidget->addTopLevelItem(anItem); + + myEntryToItem.insert(theAttributes.first, anItem); + + anItem->setExpanded(true); + return anItem; +} + +//================================================================================= +// function : buildTree() +// purpose : +//================================================================================= +QTreeWidgetItem* GEOMToolsGUI_PublishDlg::findParentItem(_PTR(Study) theStudy, SalomeApp_DataObject* theObject, BufferedList& theList ) { + + QTreeWidgetItem* aResult = NULL; + SalomeApp_DataObject* aParrent = dynamic_cast(theObject->parent()); + if(aParrent) { + QString targetEntry = aParrent->entry(); + if( !(aResult = myEntryToItem.value(targetEntry)) ) { + if( aParrent != myGeomRoot ) { + QString aName; + _PTR(SObject) aSO ( theStudy->FindObjectID(qPrintable(aParrent->entry()))); + _PTR(GenericAttribute) anAttr; + if ( aSO->FindAttribute(anAttr, "AttributeName") ) { + _PTR(AttributeName) anAttrName (anAttr); + aName = anAttrName->Value().c_str(); + } + theList.push_front(qMakePair(targetEntry, aName)); + aResult = findParentItem(theStudy,aParrent,theList); + } else { + //Publish List + for(int i = 0; i < theList.size(); i++ ) { + aResult = createItem(aResult, theList[i], false); + } + theList.clear(); + } + } else { + //Publish List + for(int i = 0; i < theList.size(); i++ ) { + aResult = createItem(aResult, theList[i], false); + } + theList.clear(); + } + } + return aResult; +} + +//================================================================================= +// function : buildTree() +// purpose : +//================================================================================= +void GEOMToolsGUI_PublishDlg::buildTree(_PTR(Study) theStudy, SalomeApp_DataObject* theItem) { + if(!theItem || theItem->isReference()) + return; + + if(theItem != myGeomRoot) { + + //If object hasn't "AttributeDrawable" => it visible + bool isDrawable = true; + _PTR(SObject) SO ( theStudy->FindObjectID(qPrintable(theItem->entry()))); + _PTR(GenericAttribute) anAttr; + if ( SO && SO->FindAttribute(anAttr, "AttributeDrawable") ) { + _PTR(AttributeDrawable) aDrw (anAttr); + isDrawable = aDrw->IsDrawable(); + } + + if(!isDrawable) { + QString aName; + if ( SO->FindAttribute(anAttr, "AttributeName") ) { + _PTR(AttributeName) aAttrName (anAttr); + aName = aAttrName->Value().c_str(); + } + BufferedList aList; + QTreeWidgetItem* parentItem = findParentItem(theStudy, theItem, aList); + createItem(parentItem,qMakePair(theItem->entry(),aName),true); + } + } + + DataObjectList listObj = theItem->children( false ); + DataObjectList::iterator itr = listObj.begin(); + while( itr != listObj.end()) { + buildTree(theStudy, dynamic_cast(*itr)); + itr++; + } +} + +//================================================================================= +// function : clickOnApply() +// purpose : Called then "Publish" button clicked +//================================================================================= +void GEOMToolsGUI_PublishDlg::clickOnApply() { + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if(!app) + return; + + SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); + if(!appStudy ) + return; + + _PTR(Study) aStudy = appStudy->studyDS(); + if(!aStudy) + return; + + + QList toProcess; + getDrawableList(myTreeWidget->invisibleRootItem(), toProcess); + + _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder(); + for( int i = 0; i < toProcess.count(); i++) { + QTreeWidgetItem* item = toProcess[i]; + if(item) { + QString entry = myEntryToItem.key(item); + _PTR(SObject) SO ( aStudy->FindObjectID(qPrintable(entry)) ); + if(!SO) continue; + _PTR(AttributeDrawable) aDrw = aBuilder->FindOrCreateAttribute( SO, "AttributeDrawable" ); + aDrw->SetDrawable( true ); + //Remove or change item + if( item != myTreeWidget->invisibleRootItem() ){ + if( item->data(0,Qt::UserRole).toBool() ) { + delete item; + } else { + item->setFlags(item->flags() & ~Qt::ItemIsUserCheckable); + item->setData(0,Qt::CheckStateRole,QVariant()); + } + } + } + } + toProcess.clear(); + getTails(myTreeWidget->invisibleRootItem(), toProcess); + for( int i = 0; i < toProcess.count(); i++) { + if( toProcess[i] != myTreeWidget->invisibleRootItem() ) + delete toProcess[i]; + } + + app->updateObjectBrowser( false ); + app->updateActions(); +} + +//================================================================================= +// function : clickOnOk() +// purpose : Called then "Publish And Close" button clicked +//================================================================================= +void GEOMToolsGUI_PublishDlg::clickOnOk() { + clickOnApply(); + accept(); +} + +//================================================================================= +// function : clickOnSelectAll() +// purpose : Called then "Select All" button clicked +//================================================================================= +void GEOMToolsGUI_PublishDlg::clickOnSelectAll() { + processAll(myTreeWidget->invisibleRootItem(),Qt::Checked); +} + +//================================================================================= +// function : clickOnUnSelectAll() +// purpose : Called then "Unselect All" button clicked +//================================================================================= +void GEOMToolsGUI_PublishDlg::clickOnUnSelectAll() { + processAll(myTreeWidget->invisibleRootItem(),Qt::Unchecked); +} + +//================================================================================= +// function : processAll() +// purpose : +//================================================================================= +void GEOMToolsGUI_PublishDlg::processAll(QTreeWidgetItem* theItem, Qt::CheckState state) { + + + if((theItem->flags() & Qt::ItemIsUserCheckable)) + theItem->setCheckState(0,state); + + int i = 0; + while(i < theItem->childCount()) { + processAll(theItem->child(i), state); + i++; + } +} + +//================================================================================= +// function : processAll() +// purpose : +//================================================================================= +void GEOMToolsGUI_PublishDlg::getDrawableList(QTreeWidgetItem* theItem, QList& theList) { + + theItem->setData(0, Qt::UserRole, true); + + if((theItem->flags() & Qt::ItemIsUserCheckable) ) { + theItem->setData(0, Qt::UserRole,theItem->checkState(0) == Qt::Checked); + } + + int i = 0; + while(i < theItem->childCount()) { + getDrawableList(theItem->child(i), theList); + theItem->setData( 0, Qt::UserRole, (theItem->data(0,Qt::UserRole).toBool() && theItem->child(i)->data(0,Qt::UserRole).toBool()) ); + i++; + } + + if( (theItem->flags() & Qt::ItemIsUserCheckable) && (theItem->checkState(0) == Qt::Checked)) + theList.push_back(theItem); +} + + +void GEOMToolsGUI_PublishDlg::getTails(QTreeWidgetItem* theItem, QList& theList) { + int i = 0; + while(i < theItem->childCount()) { + getTails(theItem->child(i),theList); + i++; + } + + if(theItem->data(0,Qt::UserRole).toBool()) + theList.push_back(theItem); +} diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.h b/src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.h new file mode 100644 index 000000000..f78cd927f --- /dev/null +++ b/src/GEOMToolsGUI/GEOMToolsGUI_PublishDlg.h @@ -0,0 +1,83 @@ +// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// 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. +// +// 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 +// + +// GEOM GEOMGUI : GUI for Geometry component +// File : GEOMToolsGUI_PublishDlg.h +// Author : Roman NIKOLAEV, Open CASCADE S.A.S. +// + +#ifndef GEOMTOOLSGUI_PUBLISHDLG_H +#define GEOMTOOLSGUI_PUBLISHDLG_H + +#include "GEOM_ToolsGUI.hxx" + +#include +#include +#include +#include + + + + +#include + +class QTreeWidget; +class QTreeWidgetItem; + +class SalomeApp_DataObject; + +typedef QPair Pair; +typedef QList BufferedList; +typedef QMap Entry2ItemMap; + +class GEOMTOOLSGUI_EXPORT GEOMToolsGUI_PublishDlg : public QDialog +{ + Q_OBJECT + +public: + GEOMToolsGUI_PublishDlg( QWidget* ); + ~GEOMToolsGUI_PublishDlg(); + +protected: + void initData(); + void buildTree(_PTR(Study) theStudy, SalomeApp_DataObject* theItem); + QTreeWidgetItem* findParentItem(_PTR(Study) theStudy, SalomeApp_DataObject* theItem, BufferedList& theList); + QTreeWidgetItem* createItem(QTreeWidgetItem* theItem, Pair theAttributes, bool isCheckable); + void getDrawableList(QTreeWidgetItem* theItem, QList& theList); + void getTails(QTreeWidgetItem* theItem, QList& theList); + +protected slots: + void clickOnOk(); + void clickOnApply(); + void clickOnSelectAll(); + void clickOnUnSelectAll(); + +private: + QTreeWidget* myTreeWidget; + SalomeApp_DataObject* myGeomRoot; + Entry2ItemMap myEntryToItem; + void processAll(QTreeWidgetItem* theItem, Qt::CheckState state); +}; + + + +#endif //GEOMTOOLSGUI_PUBLISHDLG_H diff --git a/src/GEOMToolsGUI/Makefile.am b/src/GEOMToolsGUI/Makefile.am index 8f3ffbbd4..fb214b448 100644 --- a/src/GEOMToolsGUI/Makefile.am +++ b/src/GEOMToolsGUI/Makefile.am @@ -34,7 +34,8 @@ salomeinclude_HEADERS = \ GEOMToolsGUI_DeflectionDlg.h \ GEOMToolsGUI_TransparencyDlg.h \ GEOMToolsGUI_DeleteDlg.h \ - GEOMToolsGUI_MarkerDlg.h + GEOMToolsGUI_MarkerDlg.h \ + GEOMToolsGUI_PublishDlg.h dist_libGEOMToolsGUI_la_SOURCES = \ GEOMToolsGUI.cxx \ @@ -43,14 +44,16 @@ dist_libGEOMToolsGUI_la_SOURCES = \ GEOMToolsGUI_NbIsosDlg.cxx \ GEOMToolsGUI_DeflectionDlg.cxx \ GEOMToolsGUI_DeleteDlg.cxx \ - GEOMToolsGUI_MarkerDlg.cxx + GEOMToolsGUI_MarkerDlg.cxx \ + GEOMToolsGUI_PublishDlg.cxx MOC_FILES = \ GEOMToolsGUI_TransparencyDlg_moc.cxx \ GEOMToolsGUI_NbIsosDlg_moc.cxx \ GEOMToolsGUI_DeflectionDlg_moc.cxx \ GEOMToolsGUI_DeleteDlg_moc.cxx \ - GEOMToolsGUI_MarkerDlg_moc.cxx + GEOMToolsGUI_MarkerDlg_moc.cxx \ + GEOMToolsGUI_PublishDlg_moc.cxx nodist_libGEOMToolsGUI_la_SOURCES = \ $(MOC_FILES)