-// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2012 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
+// 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 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.
+// 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
+// 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
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
// GEOM GEOMGUI : GUI for Geometry component
#include <SUIT_ViewModel.h>
#include <SUIT_MessageBox.h>
#include <SUIT_OverrideCursor.h>
+#include <SUIT_ResourceMgr.h>
#include <SalomeApp_Module.h>
#include <SalomeApp_Application.h>
// 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 ), isPreview( false ),
+ myIsApplyAndClose( false ), myIsOptimizedBrowsing( false ), myIsWaitCursorEnabled( true ),
+ myIsDisableBrowsing(false)
{
}
if (myDisplayer)
delete myDisplayer;
if ( !CORBA::is_nil( myOperation ) )
- myOperation->Destroy();
+ myOperation->UnRegister();
}
//================================================================
{
// Unset color of shape ( this color may be set during preview displaying )
// Default color will be used
- getDisplayer()->UnsetColor();
+// getDisplayer()->UnsetColor();
getDisplayer()->UnsetWidth();
+
+ MESSAGE("GEOMBase_Helper::display myTexture = "<<getDisplayer()->GetTexture())
// Enable activisation of selection
getDisplayer()->SetToActivate( true );
// Function : displayPreview
// Purpose : Method for displaying preview based on execute() results
//================================================================
-void GEOMBase_Helper::displayPreview( const bool activate,
+void GEOMBase_Helper::displayPreview( const bool display,
+ const bool activate,
const bool update,
const bool toRemoveFromEngine,
const double lineWidth,
const int displayMode,
const int color )
{
+ if(!display) {
+ erasePreview( update );
+ return;
+ }
+
isPreview = true;
QString msg;
if ( !isValid( msg ) )
try {
SUIT_OverrideCursor wc;
ObjectList objects;
+
+ if ( !isWaitCursorEnabled() )
+ wc.suspend();
+
if ( !execute( objects ) || !getOperation()->IsDone() ) {
wc.suspend();
}
GEOM::GEOM_Object_var obj=*it;
displayPreview( obj, true, activate, false, lineWidth, displayMode, color );
if ( toRemoveFromEngine )
- obj->Destroy();
+ obj->UnRegister();
}
}
}
getDisplayer()->SetColor( color == -1 ? Quantity_NOC_VIOLET : color );
// set width of displayed shape
- getDisplayer()->SetWidth( lineWidth );
+ int lw = lineWidth;
+ if(lw == -1) {
+ SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+ lw = resMgr->integerValue("Geometry", "preview_edge_width", -1);
+ }
+ getDisplayer()->SetWidth( lw );
// set display mode of displayed shape
int aPrevDispMode = getDisplayer()->SetDisplayMode( displayMode );
if ( myViewWindow == 0 )
return;
-
+
// Display prs
SUIT_ViewManager* aViewManager = myViewWindow->getViewManager();
if ( aViewManager->getType() == OCCViewer_Viewer::Type() ||
//================================================================
// Function : localSelection
-// Purpose : Activate selection of subshapes in accordance with mode
+// Purpose : Activate selection of sub-shapes in accordance with mode
// theMode is from TopAbs_ShapeEnum
//================================================================
void GEOMBase_Helper::localSelection( const ObjectList& theObjs, const int theMode )
//================================================================
// Function : localSelection
-// Purpose : Activate selection of subshapes in accordance with mode
+// Purpose : Activate selection of sub-shapes in accordance with mode
// theMode is from TopAbs_ShapeEnum
//================================================================
void GEOMBase_Helper::localSelection( GEOM::GEOM_Object_ptr obj, const int mode )
//================================================================
// Function : globalSelection
-// Purpose : Activate selection of subshapes. Set selection filters
+// Purpose : Activate selection of sub-shapes. Set selection filters
// in accordance with mode. theMode is from GEOMImpl_Types
//================================================================
void GEOMBase_Helper::globalSelection( const int theMode, const bool update )
//================================================================
// Function : globalSelection
-// Purpose : Activate selection of subshapes. Set selection filters
+// Purpose : Activate selection of sub-shapes. Set selection filters
// in accordance with mode. theMode is from GEOMImpl_Types
//================================================================
void GEOMBase_Helper::globalSelection( const TColStd_MapOfInteger& theModes,
//================================================================
// Function : globalSelection
-// Purpose : Activate selection of subshapes. Set selection filters
+// Purpose : Activate selection of sub-shapes. Set selection filters
// in accordance with mode. theMode is from GEOMImpl_Types
//================================================================
void GEOMBase_Helper::globalSelection( const TColStd_MapOfInteger& theModes,
// Function : addInStudy
// Purpose : Add object in study
//================================================================
-void GEOMBase_Helper::addInStudy( GEOM::GEOM_Object_ptr theObj, const char* theName )
+QString GEOMBase_Helper::addInStudy( GEOM::GEOM_Object_ptr theObj, const char* theName )
{
if ( !hasCommand() )
- return;
+ return QString();
_PTR(Study) aStudy = getStudy()->studyDS();
if ( !aStudy || theObj->_is_nil() )
- return;
+ return QString();
SALOMEDS::Study_var aStudyDS = GeometryGUI::ClientStudyToStudy(aStudy);
SALOMEDS::SObject_var aSO =
getGeomEngine()->AddInStudy(aStudyDS, theObj, theName, aFatherObj);
+ QString anEntry;
+ if ( !aSO->_is_nil() )
+ anEntry = aSO->GetID();
+
// Each dialog is responsible for this method implementation,
// default implementation does nothing
restoreSubShapes(aStudyDS, aSO);
- aSO->Destroy();
+ aSO->UnRegister();
+
+ return anEntry;
}
//================================================================
{
bool res = false;
if ( !getStudy() || hasCommand() )
+ {
+ MESSAGE("Getting out from openCommand()")
return res;
+ }
GEOM::GEOM_IOperations_var anOp = GEOM::GEOM_IOperations::_narrow( getOperation() );
if ( !anOp->_is_nil() ) {
myCommand->start();
res = true;
}
+ else
+ {
+ MESSAGE("anOp->_is_nil() = true")
+ }
return res;
}
//================================================================
bool GEOMBase_Helper::hasCommand() const
{
+ bool res = (bool) myCommand;
return (bool)myCommand;
}
// It perfroms user input validation, then it
// performs a proper operation and manages transactions, etc.
//================================================================
-bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction )
+bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction, bool erasePreviewFlag )
{
SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
- if ( !appStudy ) return false;
+ if ( !appStudy )
+ {
+ MESSAGE("appStudy is empty")
+ return false;
+ }
_PTR(Study) aStudy = appStudy->studyDS();
bool aLocked = (_PTR(AttributeStudyProperties) (aStudy->GetProperties()))->IsLocked();
showError( msg );
return false;
}
-
- erasePreview( false );
+
+ if(erasePreviewFlag)
+ erasePreview( false );
bool result = false;
showError();
}
else {
- addSubshapesToStudy(); // add Subshapes if local selection
+ addSubshapesToStudy(); // add Sub-shapes if local selection
const int nbObjs = objects.size();
+ QStringList anEntryList;
int aNumber = 1;
for ( ObjectList::iterator it = objects.begin(); it != objects.end(); ++it ) {
GEOM::GEOM_Object_var obj=*it;
if ( aName.isEmpty() )
aName = GEOMBase::GetDefaultName( getPrefix( obj ) );
}
- addInStudy( obj, aName.toLatin1().constData() );
+ anEntryList << addInStudy( obj, aName.toLatin1().constData() );
// updateView=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();
+ obj->UnRegister();
#endif
}
else {
if ( nbObjs ) {
commitCommand();
updateObjBrowser();
- SUIT_Session::session()->activeApplication()->putInfo( QObject::tr("GEOM_PRP_DONE") );
+ if( SUIT_Application* anApp = SUIT_Session::session()->activeApplication() ) {
+ LightApp_Application* aLightApp = dynamic_cast<LightApp_Application*>( anApp );
+ if(aLightApp && !isDisableBrowsing() )
+ aLightApp->browseObjects( anEntryList, isApplyAndClose(), isOptimizedBrowsing() );
+ anApp->putInfo( QObject::tr("GEOM_PRP_DONE") );
+ }
result = true;
}
else
catch( const SALOME::SALOME_Exception& e ) {
SalomeApp_Tools::QtCatchCorbaException( e );
abortCommand();
+ MESSAGE("Exception catched")
}
updateViewer();
+ MESSAGE("result ="<<result)
return result;
}
//================================================================
// Function : addSubshapesToStudy
-// Purpose : Virtual method to add subshapes if needs
+// Purpose : Virtual method to add sub-shapes if needs
//================================================================
void GEOMBase_Helper::addSubshapesToStudy()
{
}
return result;
}
+
+//================================================================
+// Function : setIsApplyAndClose
+// Purpose : Set value of the flag indicating that the dialog is
+// accepted by Apply & Close button
+//================================================================
+void GEOMBase_Helper::setIsApplyAndClose( const bool theFlag )
+{
+ myIsApplyAndClose = theFlag;
+}
+
+//================================================================
+// Function : isApplyAndClose
+// Purpose : Get value of the flag indicating that the dialog is
+// accepted by Apply & Close button
+//================================================================
+bool GEOMBase_Helper::isApplyAndClose() const
+{
+ return myIsApplyAndClose;
+}
+
+//================================================================
+// Function : setIsOptimizedBrowsing
+// Purpose : Set value of the flag switching to optimized
+// browsing mode (to select the first published
+// object only)
+//================================================================
+void GEOMBase_Helper::setIsOptimizedBrowsing( const bool theFlag )
+{
+ myIsOptimizedBrowsing = theFlag;
+}
+
+//================================================================
+// Function : isOptimizedBrowsing
+// Purpose : Get value of the flag switching to optimized
+// browsing mode (to select the first published
+// object only)
+//================================================================
+bool GEOMBase_Helper::isOptimizedBrowsing() const
+{
+ return myIsOptimizedBrowsing;
+}