X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_SetColorOp.cxx;h=464434b6b61f6363fa182368d84e8768c7c0e3f0;hb=81c9f5cdf82909d0aebd2c491c50fa7516cc80b7;hp=245e11c66425b39a9f7942799f8841b23cb5d7f7;hpb=16f06b749441da906280085ce23c213b175a49b4;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_SetColorOp.cxx b/src/HYDROGUI/HYDROGUI_SetColorOp.cxx index 245e11c6..464434b6 100644 --- a/src/HYDROGUI/HYDROGUI_SetColorOp.cxx +++ b/src/HYDROGUI/HYDROGUI_SetColorOp.cxx @@ -28,6 +28,9 @@ #include "HYDROGUI_Tool.h" #include "HYDROGUI_UpdateFlags.h" +#include +#include + #include #include @@ -44,52 +47,113 @@ HYDROGUI_SetColorOp::~HYDROGUI_SetColorOp() { } +bool HYDROGUI_SetColorOp::CanObjectBeColored( const Handle(HYDROData_Entity)& theObject ) +{ + if ( theObject.IsNull() ) + return false; + + return theObject->IsKind( STANDARD_TYPE(HYDROData_Object) ) || + theObject->IsKind( STANDARD_TYPE(HYDROData_IPolyline) ); +} + void HYDROGUI_SetColorOp::startOperation() { HYDROGUI_Operation::startOperation(); // Get the selected object - myEditedObject = Handle(HYDROData_Object)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) ); + //myEditedObject = Handle(HYDROData_Object)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) ); + myEditedObject = HYDROGUI_Tool::GetSelectedObject( module() ); + if ( !CanObjectBeColored( myEditedObject ) ) + { + abort(); + return; + } - if( !myEditedObject.IsNull() ) { - // Get colors from the object - QColor aFillingColor = myEditedObject->GetFillingColor(); - QColor aBorderColor = myEditedObject->GetBorderColor(); + bool anIsOneColor = false; + + // Get colors from the object + QColor aFirstColor, aSecondColor; + if ( myEditedObject->IsKind( STANDARD_TYPE(HYDROData_Object) ) ) + { + Handle(HYDROData_Object) aGeomObject = + Handle(HYDROData_Object)::DownCast( myEditedObject ); + + if ( myEditedObject->GetKind() == KIND_POLYLINE || + myEditedObject->GetKind() == KIND_PROFILE ) + { + aFirstColor = aGeomObject->GetBorderColor(); + anIsOneColor = true; + } + else + { + aFirstColor = aGeomObject->GetFillingColor(); + aSecondColor = aGeomObject->GetBorderColor(); + } + } + else if ( myEditedObject->IsKind( STANDARD_TYPE(HYDROData_IPolyline) ) ) + { + Handle(HYDROData_IPolyline) aPolyObject = + Handle(HYDROData_IPolyline)::DownCast( myEditedObject ); - // Create color dialog - myColorDlg = new HYDROGUI_ColorDlg( module()->getApp()->desktop() ); - myColorDlg->setModal( true ); - myColorDlg->setWindowTitle( getName() ); + aFirstColor = aPolyObject->GetWireColor(); - // Set colors from the object - myColorDlg->setFillingColor( aFillingColor ); - myColorDlg->setBorderColor( aBorderColor ); + anIsOneColor = true; + } - // Connect the dialog to operation slots - connect( myColorDlg, SIGNAL( accepted() ), this, SLOT( onApply() ) ); - connect( myColorDlg, SIGNAL( rejected() ), this, SLOT( onCancel() ) ); + // Create color dialog + myColorDlg = new HYDROGUI_ColorDlg( module()->getApp()->desktop(), anIsOneColor ); + myColorDlg->setModal( true ); + myColorDlg->setWindowTitle( getName() ); - // Show the dialog - myColorDlg->exec(); - } + // Set colors from the object + myColorDlg->setFirstColor( aFirstColor ); + myColorDlg->setSecondColor( aSecondColor ); + + // Connect the dialog to operation slots + connect( myColorDlg, SIGNAL( accepted() ), this, SLOT( onApply() ) ); + connect( myColorDlg, SIGNAL( rejected() ), this, SLOT( onCancel() ) ); + + // Show the dialog + myColorDlg->exec(); } bool HYDROGUI_SetColorOp::processApply( int& theUpdateFlags, - QString& theErrorMsg ) + QString& theErrorMsg, + QStringList& theBrowseObjectsEntries ) { - bool anIsOk = false; - - if ( myColorDlg && myEditedObject ) { - QColor aFillingColor = myColorDlg->getFillingColor(); - QColor aBorderColor = myColorDlg->getBorderColor(); + if ( !myColorDlg || myEditedObject.IsNull() ) + return false; + + QColor aFirstColor = myColorDlg->getFirstColor(); + QColor aSecondColor = myColorDlg->getSecondColor(); + + if ( myEditedObject->IsKind( STANDARD_TYPE(HYDROData_Object) ) ) + { + Handle(HYDROData_Object) aGeomObject = + Handle(HYDROData_Object)::DownCast( myEditedObject ); + + if ( myEditedObject->GetKind() == KIND_POLYLINE || + myEditedObject->GetKind() == KIND_PROFILE ) + { + aGeomObject->SetBorderColor( aFirstColor ); + } + else + { + aGeomObject->SetFillingColor( aFirstColor ); + aGeomObject->SetBorderColor( aSecondColor ); + } + } + else if ( myEditedObject->IsKind( STANDARD_TYPE(HYDROData_IPolyline) ) ) + { + Handle(HYDROData_IPolyline) aPolyObject = + Handle(HYDROData_IPolyline)::DownCast( myEditedObject ); - myEditedObject->SetFillingColor( aFillingColor ); - myEditedObject->SetBorderColor( aBorderColor ); + aPolyObject->SetWireColor( aFirstColor ); + } - theUpdateFlags = UF_Model | UF_OCCViewer | UF_OCC_Forced; + module()->setIsToUpdate( myEditedObject ); - anIsOk = true; - } + theUpdateFlags = UF_Model | UF_OCCViewer | UF_OCC_Forced | UF_VTKViewer; - return anIsOk; + return true; }