#include <SalomeApp_Module.h>
#include <SalomeApp_Application.h>
#include <SalomeApp_Study.h>
+#include <SalomeApp_Notebook.h>
#include <LightApp_SelectionMgr.h>
#include <LightApp_DataOwner.h>
#include <SalomeApp_Tools.h>
#include <TColStd_MapOfInteger.hxx>
#include <TCollection_AsciiString.hxx>
+//To disable automatic genericobj management, the following line should be commented.
+//Otherwise, it should be uncommented. Refer to KERNEL_SRC/src/SALOMEDSImpl/SALOMEDSImpl_AttributeIOR.cxx
+//#define WITHGENERICOBJ
+
//================================================================
// Function : getActiveView
// Purpose : Get active view window, returns 0 if no open study frame
// Purpose :
//================================================================
GEOMBase_Helper::GEOMBase_Helper( SUIT_Desktop* desktop )
- : myDesktop( desktop ), myViewWindow( 0 ), myDisplayer( 0 ), myCommand( 0 ), isPreview( false )
+ : myDesktop( desktop ), myViewWindow( 0 ), myDisplayer( 0 ), myCommand( 0 ), myNoteBook( 0 ), isPreview( false )
{
+ if( SalomeApp_Application* app = (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )
+ if( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) )
+ myNoteBook = new SalomeApp_Notebook( appStudy );
}
//================================================================
if (myDisplayer)
delete myDisplayer;
+ if ( !CORBA::is_nil( myOperation ) )
+ myOperation->Destroy();
+
+ if( myNoteBook )
+ {
+ delete myNoteBook;
+ myNoteBook = 0;
+ }
}
//================================================================
else {
for ( ObjectList::iterator it = objects.begin(); it != objects.end(); ++it )
{
- displayPreview( *it, true, activate, false, lineWidth, displayMode, color );
+ GEOM::GEOM_Object_var obj=*it;
+ displayPreview( obj, true, activate, false, lineWidth, displayMode, color );
if ( toRemoveFromEngine )
- getGeomEngine()->RemoveObject( *it );
+ obj->Destroy();
}
}
}
// Each dialog is responsible for this method implementation,
// default implementation does nothing
restoreSubShapes(aStudyDS, aSO);
+ aSO->Destroy();
}
//================================================================
}
}
}
- return "";
+ return (char*)"";
}
//================================================================
return false;
myCommand->abort();
+ delete myCommand; // I don't know where to delete this object here ?
myCommand = 0;
return true;
return false;
myCommand->commit();
+ delete myCommand; // I don't know where to delete this object here ?
myCommand = 0;
return true;
const int nbObjs = objects.size();
int aNumber = 1;
for ( ObjectList::iterator it = objects.begin(); it != objects.end(); ++it ) {
+ GEOM::GEOM_Object_var obj=*it;
if ( publish ) {
QString aName = getNewObjectName();
if ( nbObjs > 1 ) {
if (aName.isEmpty())
- aName = getPrefix(*it);
+ aName = getPrefix(obj);
if (nbObjs <= 30) {
// Try to find a unique name
aName = GEOMBase::GetDefaultName(aName);
} else {
// PAL6521: use a prefix, if some dialog box doesn't reimplement getNewObjectName()
if ( aName.isEmpty() )
- aName = GEOMBase::GetDefaultName( getPrefix( *it ) );
+ aName = GEOMBase::GetDefaultName( getPrefix( obj ) );
}
- addInStudy( *it, aName.toLatin1().constData() );
+ addInStudy( obj, aName.toLatin1().constData() );
// updateView=false
- display( *it, false );
+ display( obj, false );
+#ifdef WITHGENERICOBJ
+ // obj has been published in study. Its refcount has been incremented.
+ // It is safe to decrement its refcount
+ // so that it will be destroyed when the entry in study will be removed
+ obj->Destroy();
+#endif
}
else {
// asv : fix of PAL6454. If publish==false, then the original shape
// was modified, and need to be re-cached in GEOM_Client before redisplay
- clearShapeBuffer( *it );
+ clearShapeBuffer( obj );
// withChildren=true, updateView=false
- redisplay( *it, true, false );
+ redisplay( obj, true, false );
}
}