X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSHAPERGUI%2FSHAPERGUI_DataModel.cpp;h=efb30f936765a43c170cefea155ee697679e16a2;hb=02018d26c9d5f1f36661ac3c8b40182ab9f98d98;hp=ac9a06edc83aca8e048e79dc0aed2db0ee98d145;hpb=967a64d215e520780ad9298d2b28272c5d713c54;p=modules%2Fshaper.git diff --git a/src/SHAPERGUI/SHAPERGUI_DataModel.cpp b/src/SHAPERGUI/SHAPERGUI_DataModel.cpp index ac9a06edc..efb30f936 100644 --- a/src/SHAPERGUI/SHAPERGUI_DataModel.cpp +++ b/src/SHAPERGUI/SHAPERGUI_DataModel.cpp @@ -1,4 +1,21 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D +// Copyright (C) 2014-2019 CEA/DEN, EDF R&D +// +// 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, or (at your option) any later version. +// +// 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 +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// #include "SHAPERGUI_DataModel.h" #include "SHAPERGUI.h" @@ -58,20 +75,10 @@ bool SHAPERGUI_DataModel::open(const QString& thePath, CAM_Study* theStudy, QStr QString aFileName = *anIt; QString aCurrentFile = SUIT_Tools::addSlash(aTmpDir) + aFileName; - QString aNewFile = SUIT_Tools::addSlash(aNewTmpDir) + aFileName; - if (!QFile::copy(aCurrentFile, aNewFile)) - isDone = false; - } - if (isDone) { - myTmpDirectory = aNewTmpDir; - } - else { - removeDirectory(aNewTmpDir); - myTmpDirectory = ""; + XGUI_Workshop* aWorkShop = myModule->workshop(); + aWorkShop->openFile(aCurrentFile); } - SessionPtr aMgr = ModelAPI_Session::get(); - aMgr->load(qPrintable(aNewTmpDir)); myModule->setIsOpened(true); return true; } @@ -92,17 +99,21 @@ bool SHAPERGUI_DataModel::save(QStringList& theFiles) bool isMultiFile = aResMgr ? aResMgr->booleanValue("Study", "multi_file", false) : false; std::string aTmpDir = aStudy->GetTmpDir(qPrintable(myStudyPath), isMultiFile); - //std::string aTmpDir = aStudy->GetTmpDir("", false);//true ); - theFiles.append(QString(aTmpDir.c_str())); - - aWorkShop->saveDocument(QString(aTmpDir.c_str()), aFileNames); - std::list::iterator aIt; - for (aIt = aFileNames.begin(); aIt != aFileNames.end(); ++aIt) { - QString aName((*aIt).c_str()); - aName.replace(QChar('\\'), QChar('/')); - int aN = aName.lastIndexOf('/'); - theFiles.append(aName.right(aName.length() - aN - 1)); - } + QString aTmp = QString(aTmpDir.c_str()); + theFiles.append(aTmp); + + SessionPtr aMgr = ModelAPI_Session::get(); + if (aMgr->isAutoUpdateBlocked()) + aMgr->blockAutoUpdate(false); + + //aWorkShop->saveDocument(QString(aTmpDir.c_str()), aFileNames); + aWorkShop->setCurrentDataFile(aTmp + "shaper.shaper"); + aWorkShop->onSave(); + QString aName = aWorkShop->currentDataFile(); + aName.replace(QChar('\\'), QChar('/')); + int aN = aName.lastIndexOf('/'); + theFiles.append(aName.right(aName.length() - aN - 1)); + return true; } @@ -115,8 +126,6 @@ bool SHAPERGUI_DataModel::saveAs(const QString& thePath, CAM_Study* theStudy, QS bool SHAPERGUI_DataModel::close() { myModule->workshop()->closeDocument(); - removeDirectory(myTmpDirectory); - myTmpDirectory = ""; return LightApp_DataModel::close(); } @@ -159,7 +168,7 @@ void SHAPERGUI_DataModel::removeDirectory(const QString& theDirectoryName) Qtx::rmDir(theDirectoryName); } -bool SHAPERGUI_DataModel::dumpPython(const QString& thePath, CAM_Study* theStudy, +bool SHAPERGUI_DataModel::dumpPython(const QString& thePath, CAM_Study* theStudy, bool isMultiFile, QStringList& theListOfFiles) { LightApp_Study* aStudy = dynamic_cast(theStudy); @@ -178,41 +187,44 @@ bool SHAPERGUI_DataModel::dumpPython(const QString& thePath, CAM_Study* theStudy } AttributeStringPtr aAttr = aFeature->string(ExchangePlugin_Dump::FILE_PATH_ID()); - if (aAttr.get()) + if (aAttr.get()) aAttr->setValue(aFileName); aAttr = aFeature->string(ExchangePlugin_Dump::FILE_FORMAT_ID()); - if (aAttr.get()) + if (aAttr.get()) aAttr->setValue(".py"); + ModelAPI_Session::get()->finishOperation(); if (QFile::exists(aFileName.c_str())) { - if (isMultiFile) { QFile aInFile(aFileName.c_str()); - if (!aInFile.open(QIODevice::ReadOnly | QIODevice::Text)) - return false; - QTextStream aText(&aInFile); - QString aTrace(aText.readAll()); - aInFile.close(); + if (!aInFile.open(QIODevice::ReadOnly | QIODevice::Text)) + return false; + QTextStream aText(&aInFile); + QString aTrace(aText.readAll()); + aInFile.close(); + if (isMultiFile) { QStringList aBuffer; - aBuffer.push_back(QString("def RebuildData( theStudy ):")); + aBuffer.push_back(QString("def RebuildData():")); QStringList aList(aTrace.split("\n")); foreach(QString aStr, aList) { QString s = " " + aStr; aBuffer.push_back(s); } aTrace = aBuffer.join("\n"); + } - QFile aOutFile(aFileName.c_str()); - if (!aOutFile.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)) - return false; + QFile aOutFile(aFileName.c_str()); + // binary for SALOME, issue 16931 + if (!aOutFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) + return false; + + QTextStream aOut(&aOutFile); + aOut << aTrace.toStdString().c_str() << "\n"; + aOut.flush(); + aOutFile.close(); - QTextStream aOut(&aOutFile); - aOut << aTrace.toStdString().c_str() << "\n"; - aOut.flush(); - aOutFile.close(); - } theListOfFiles.append(aTmpDir.c_str()); theListOfFiles.append(DUMP_NAME); return true;