1 // Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 #include "HYDROGUI_ImportObstacleFromFileOp.h"
25 #include "HYDROGUI_GeomObjectDlg.h"
26 #include <HYDROGUI_DataObject.h>
27 #include "HYDROGUI_DataModel.h"
28 #include "HYDROGUI_Module.h"
29 #include "HYDROGUI_Tool.h"
30 #include "HYDROGUI_UpdateFlags.h"
32 #include <HYDROData_Obstacle.h>
36 #include <SalomeApp_Study.h>
38 #include <LightApp_Application.h>
39 #include <LightApp_UpdateFlags.h>
41 #include <SUIT_Desktop.h>
42 #include <SUIT_FileDlg.h>
44 static QString lastUsedFilter;
46 HYDROGUI_ImportObstacleFromFileOp::HYDROGUI_ImportObstacleFromFileOp( HYDROGUI_Module* theModule,
47 const bool theIsToShowPanel )
48 : HYDROGUI_Operation( theModule ),
49 myIsToShowPanel ( theIsToShowPanel ),
52 setName( tr( "IMPORT_OBSTACLE_FROM_FILE" ) );
55 HYDROGUI_ImportObstacleFromFileOp::~HYDROGUI_ImportObstacleFromFileOp()
59 void HYDROGUI_ImportObstacleFromFileOp::startOperation()
61 HYDROGUI_Operation::startOperation();
64 HYDROGUI_GeomObjectDlg* aPanel = ::qobject_cast<HYDROGUI_GeomObjectDlg*>( inputPanel() );
67 // Reset the panel state
70 // Pass the existing obstacle names to the panel
71 QStringList anObstacleNames =
72 HYDROGUI_Tool::FindExistingObjectsNames( doc(), KIND_OBSTACLE );
74 aPanel->setObjectNames( anObstacleNames );
76 myFileDlg = new SUIT_FileDlg( module()->getApp()->desktop(), true );
77 myFileDlg->setWindowTitle( getName() );
78 myFileDlg->setFilter( tr("OBSTACLE_FILTER") );
79 if ( !lastUsedFilter.isEmpty() ) {
80 myFileDlg->selectFilter( lastUsedFilter );
83 connect( myFileDlg, SIGNAL( accepted() ), this, SLOT( onApply() ) );
84 connect( myFileDlg, SIGNAL( rejected() ), this, SLOT( onCancel() ) );
90 void HYDROGUI_ImportObstacleFromFileOp::abortOperation()
92 HYDROGUI_Operation::abortOperation();
95 void HYDROGUI_ImportObstacleFromFileOp::commitOperation()
97 HYDROGUI_Operation::commitOperation();
100 bool HYDROGUI_ImportObstacleFromFileOp::processApply( int& theUpdateFlags,
101 QString& theErrorMsg,
102 QStringList& theBrowseObjectsEntries )
105 QString anObstacleName;
106 Handle(HYDROData_Obstacle) anObstacle;
109 HYDROGUI_GeomObjectDlg* aPanel = ::qobject_cast<HYDROGUI_GeomObjectDlg*>( inputPanel() );
111 // Get file name and obstacle name defined by the user
112 aFileName = aPanel->getFileName();
114 QString anEditedName = aPanel->getEditedObjectName().simplified();
116 // Get obstacle to edit
117 if ( !anEditedName.isEmpty() ) {
118 anObstacle = Handle(HYDROData_Obstacle)::DownCast(
119 HYDROGUI_Tool::FindObjectByName( module(), anEditedName, KIND_OBSTACLE ) );
121 } else if ( myFileDlg ) {
122 // Get file name and file filter defined by the user
123 aFileName = myFileDlg->selectedFile();
124 lastUsedFilter = myFileDlg->selectedFilter();
127 // Check the file name
128 if ( aFileName.isEmpty() ) {
131 QFileInfo aFileInfo( aFileName );
132 if ( !aFileInfo.exists() || !aFileInfo.isReadable() ) {
133 theErrorMsg = tr( "FILE_NOT_EXISTS_OR_CANT_BE_READ" ).arg( aFileName );
137 // Check obstacle name
138 anObstacleName = aPanel->getObjectName().simplified();
139 if ( anObstacleName.isEmpty() ) {
140 theErrorMsg = tr( "INCORRECT_OBJECT_NAME" );
144 if( anObstacle.IsNull() || anObstacle->GetName() != anObstacleName ) {
145 // check that there are no other objects with the same name in the document
146 Handle(HYDROData_Entity) anObject = HYDROGUI_Tool::FindObjectByName( module(), anObstacleName );
147 if( !anObject.IsNull() ) {
148 theErrorMsg = tr( "OBJECT_EXISTS_IN_DOCUMENT" ).arg( anObstacleName );
155 // If the obstacle for edit is null - create new obstacle object
156 if ( anObstacle.IsNull() ) {
157 anObstacle = Handle(HYDROData_Obstacle)::DownCast( doc()->CreateObject(KIND_OBSTACLE) );
159 anObstacle->SetFillingColor( HYDROData_Obstacle::DefaultFillingColor() );
160 anObstacle->SetBorderColor( HYDROData_Obstacle::DefaultBorderColor() );
163 if ( !anObstacle.IsNull() ) {
164 if ( anObstacle->ImportFromFile( aFileName ) ) {
166 if ( anObstacleName.isEmpty() ) {
167 anObstacleName = HYDROGUI_Tool::GenerateObjectName(
168 module(), aFileInfo.baseName(), QStringList(), true );
170 if ( anObstacle->GetName() != anObstacleName ) {
171 anObstacle->SetName( anObstacleName );
174 anObstacle->Update();
176 // Set operation status
178 module()->setIsToUpdate( anObstacle );
179 theUpdateFlags = UF_Model | UF_OCCViewer | UF_OCC_Forced | UF_VTKViewer;
180 QString anEntry = HYDROGUI_DataObject::dataObjectEntry( anObstacle );
181 theBrowseObjectsEntries.append( anEntry );
185 theErrorMsg = tr( "BAD_IMPORTED_OBSTACLE_FILE" ).arg( aFileName );
192 HYDROGUI_InputPanel* HYDROGUI_ImportObstacleFromFileOp::createInputPanel() const
194 HYDROGUI_InputPanel* aPanel = 0;
195 if ( myIsToShowPanel ) {
196 aPanel = new HYDROGUI_GeomObjectDlg( module(), getName(),
197 tr( "DEFAULT_OBSTACLE_NAME" ), true );