#include <CurveCreator_Displayer.hxx>
#include <HYDROData_Entity.h>
#include <QSet>
+#include <set>
#include <LightApp_Application.h>
#include <LightApp_SelectionMgr.h>
#include <OCCViewer_ViewManager.h>
#include <OCCViewer_ViewModel.h>
#include <OCCViewer_ViewWindow.h>
-
+#include <SUIT_MessageBox.h>
+#include <SUIT_Desktop.h>
#include <OCCViewer_AISSelector.h>
#include <Precision.hxx>
HYDROGUI_ProfileOp::HYDROGUI_ProfileOp( HYDROGUI_Module* theModule, bool theIsEdit )
: HYDROGUI_Operation( theModule ), myIsEdit(theIsEdit),
- myDisplayer (NULL), mySingleProfileMode (false)
+ myDisplayer (NULL)
{
setName( theIsEdit ? tr( "EDIT_PROFILE" ) : tr( "CREATE_PROFILE" ) );
}
for (int i = 0; i < myProfiles.size(); i++)
myProfiles[i] = new HYDROGUI_CurveCreatorProfile();
- mySingleProfileMode = myEditedObjects.IsEmpty() || lenP == 1;
+ //mySingleProfileMode = myEditedObjects.IsEmpty();
HYDROGUI_Operation::startOperation();
HYDROGUI_ProfileDlg* aPanel = (HYDROGUI_ProfileDlg*)inputPanel();
setPreviewManager( aPanel->viewManager() );
setCursor();
- aPanel->SetSingleProfileMode(mySingleProfileMode);
+ //aPanel->SetSingleProfileMode(mySingleProfileMode);
QMap<HYDROGUI_CurveCreatorProfile*, QColor> CurveToColor;
if( lenP )
{
}
int ext = myCurveToProfile.Extent(); //ext should be equal to lenP
QVector<QColor> PColors;
- if (!mySingleProfileMode)
+ if (myIsEdit)
HYDROData_Tool::GenerateRepeatableRandColors(ext, PColors);
else
PColors << QColor(0,0,255); //default color
{
HYDROGUI_CurveCreatorProfile* CC = myProfiles[i];
const Handle(HYDROData_Profile)& CP = myCurveToProfile.Find(CC);
- const QColor& CurCol = PColors[i];
+ QColor CurCol = PColors[i];
+ CP->GetProfileColor(CurCol);
CurveToColor[CC] = CurCol;
const QString& profName = CP->GetName();
const QColor& PColor = CurCol;
- if (!mySingleProfileMode)
+ if (myIsEdit)
aPanel->addProfileName(profName, PColor);
else
aPanel->setProfileName(profName);
int ExistingProfLen = myEditedObjects.Length();
for (int i = 1; i <= aSelectedObj.Length(); i++)
{
- Handle(HYDROData_Entity) CurProf = Handle(HYDROData_Entity)::DownCast(aSelectedObj(i));
+ Handle(HYDROData_Profile) CurProf = Handle(HYDROData_Profile)::DownCast(aSelectedObj.Value(i));
if (CurProf.IsNull())
continue;
if (!edObjNamesMap.contains(CurProf->GetName()))
}
int NewLen = myEditedObjects.Length();
+ bool IsNewPoly = NewLen - ExistingProfLen;
+ if (aSelectedObj.IsEmpty())
+ {
+ SUIT_MessageBox::warning( module()->getApp()->desktop(), tr( "PROFILEOP_WARNING" ), tr ("PROFILES_ARE_NOT_SELECTED") );
+ return;
+ }
+ if (!IsNewPoly)
+ {
+ SUIT_MessageBox::warning( module()->getApp()->desktop(), tr( "PROFILEOP_WARNING" ), tr ("PROFILES_ALREADY_PRESENT") );
+ return;
+ }
myProfiles.resize(myEditedObjects.Length());
for (int i = myProfiles.size() - 1; i < myEditedObjects.Length(); i++)
myProfiles[i] = new HYDROGUI_CurveCreatorProfile();
HYDROGUI_ProfileDlg* aPanel = (HYDROGUI_ProfileDlg*)inputPanel();
QMap<HYDROGUI_CurveCreatorProfile*, QColor> CurveToColor;
- if( NewLen - ExistingProfLen )
+ if( IsNewPoly )
{
//TODO move to ext func!
for (int i = ExistingProfLen + 1; i <= NewLen; i++)
{
Handle(HYDROData_Profile) aCProfile = Handle(HYDROData_Profile)::DownCast(myEditedObjects(i));
+
QString aProfileName;
if( !aCProfile.IsNull() )
{
{
HYDROGUI_CurveCreatorProfile* CC = myProfiles[i];
const Handle(HYDROData_Profile)& CP = myCurveToProfile.Find(CC);
- const QColor& CurCol = PColors[i-ExistingProfLen];
+ QColor CurCol = PColors[i-ExistingProfLen];
+ CP->GetProfileColor(CurCol);
CurveToColor[CC] = CurCol;
const QString& profName = CP->GetName();
const QColor& PColor = CurCol;
- if (!mySingleProfileMode)
+ if (myIsEdit)
aPanel->addProfileName(profName, PColor);
else
aPanel->setProfileName(profName);
HYDROGUI_InputPanel* HYDROGUI_ProfileOp::createInputPanel() const
{
- HYDROGUI_ProfileDlg* aDlg = new HYDROGUI_ProfileDlg( module(), getName(), mySingleProfileMode );
+ HYDROGUI_ProfileDlg* aDlg = new HYDROGUI_ProfileDlg( module(), getName(), myIsEdit );
connect( aDlg, SIGNAL( AddProfiles() ), this,
SLOT( onAddProfiles() ) );
connect( aDlg, SIGNAL( RemoveProfile(int) ), this,
return aDlg;
}
+
bool HYDROGUI_ProfileOp::processApply( int& theUpdateFlags,
QString& theErrorMsg,
QStringList& theBrowseObjectsEntries )
QStringList aProfileNames = aPanel->getProfileNames();
QVector<QString> aProfileNamesFiltered;
int i = 0;
+ // QSet<QString> edObjStrMap = aProfileNames.toSet();
+ QSet<QString> ObjStrMapNE ;
+ HYDROData_SequenceOfObjects allobj = doc()->CollectAllObjects();
+ for (int i=1;i<=allobj.Size();i++ )
+ ObjStrMapNE.insert(allobj(i)->GetName());
+ for (int i=1; i<=myEditedObjects.Size();i++)
+ ObjStrMapNE.remove(myEditedObjects(i)->GetName());
+ bool warn = false;
+ QString title = tr( "PROFILEOP_WARNING" );
+ QString mes = tr("PROFILE_RENAMING_NOTIF") + "\n";
foreach (QString profName, aProfileNames)
{
i++;
- if ( profName.isEmpty() )
- {
- theErrorMsg = tr( "INCORRECT_OBJECT_NAME" ); //?
- continue;
- }
- Handle(HYDROData_Entity) anObject = HYDROGUI_Tool::FindObjectByName( module(), profName );
- if( !myIsEdit || (!anObject.IsNull() && myEditedObjects(i)->GetName() != anObject->GetName() ) )
+ if( !myIsEdit || ObjStrMapNE.contains(profName) || profName.isEmpty() )
{
- profName = HYDROData_Tool::GenerateObjectName(doc(), "Profile");
- //theErrorMsg = tr( "OBJECT_EXISTS_IN_DOCUMENT" ).arg( profName );
- continue;
+ QString newName = HYDROData_Tool::GenerateObjectName(doc(), "Profile");
+ mes += profName + " => " + newName + "\n";
+ profName = newName;
+ warn = true;
}
aProfileNamesFiltered.append(profName);
}
+ if (myIsEdit && warn)
+#ifndef TEST_MODE
+ SUIT_MessageBox::warning( module()->getApp()->desktop(), title, mes );
+#endif
//
theUpdateFlags = UF_Model;
if (myIsEdit)
{
Handle(HYDROData_Profile) HProf = Handle(HYDROData_Profile)::DownCast(myEditedObjects(i));
int stat = CurveCrProfileToHProfile(myProfiles[i-1], HProf, aProfileNamesFiltered[i-1], true);
+ HProf->SetProfileColor(HYDROData_Tool::toQtColor(myProfiles[i-1]->getColorSection(0)));
if (stat == 0)
continue;
else if (stat == -1)
{
Handle(HYDROData_Profile) aNewProfileObj = Handle(HYDROData_Profile)::DownCast( doc()->CreateObject( KIND_PROFILE ) );
int stat = CurveCrProfileToHProfile(myProfiles[0], aNewProfileObj, aProfileNamesFiltered[0], false);
+ aNewProfileObj->SetProfileColor(HYDROData_Tool::toQtColor(myProfiles[0]->getColorSection(0)));
if (stat == 0)
return false;
else if (stat == -1)
return true;
}
-/*void HYDROGUI_ProfileOp::displayPreview()
-{
- /* HYDROGUI_ProfileDlg* aPanel = dynamic_cast<HYDROGUI_ProfileDlg*>( inputPanel() );
- if( aPanel )
- {
- Handle(AIS_InteractiveContext) aCtx = aPanel->getAISContext();
- if( !aCtx.IsNull() )
- {
- CurveCreator_Displayer* aDisplayer = new CurveCreator_Displayer( aCtx );
- myProfile->setDisplayer( aDisplayer );
- aDisplayer->display( myProfile->getAISObject( true ), true );
- }
- }
-}*/
-
-void HYDROGUI_ProfileOp::displayPreviews(
- const QMap<HYDROGUI_CurveCreatorProfile*, QColor>& CurveToColor,
+void HYDROGUI_ProfileOp::displayPreviews(const QMap<HYDROGUI_CurveCreatorProfile*, QColor>& CurveToColor,
int firstIndProf, int lastIndProf, bool createNewDisplayer, bool SwitchToFirstProf)
{
HYDROGUI_ProfileDlg* aPanel = dynamic_cast<HYDROGUI_ProfileDlg*>( inputPanel() );
Quantity_Color CurOCCCol = HYDROData_Tool::toOccColor(QCurCol);
CC->setDisplayer( myDisplayer );
CC->myPointAspectColor = CurOCCCol;
- CC->myCurveColor = CurOCCCol;
+ CC->setColorSectionInternal(0, CurOCCCol);
CC->myLineWidth = 1;
myDisplayer->display( CC->getAISObject( true ), true );
}
}
- if (SwitchToFirstProf && !myProfiles.empty())
+ if (SwitchToFirstProf && myProfiles.size() > 1)
aPanel->switchToFirstProfile();
}
}