-// 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
//
// SMESH SMESHGUI : GUI for SMESH component
// Qt includes
#include <QMap>
+#include <QDir>
//#include <QList>
+
// Other includes
#ifdef WNT
#include <windows.h>
namespace SMESH
{
- typedef QMap<QString,HypothesisData*> THypothesisDataMap;
+ typedef IMap<QString,HypothesisData*> THypothesisDataMap;
THypothesisDataMap myHypothesesMap;
THypothesisDataMap myAlgorithmsMap;
-
+
// BUG 0020378
//typedef QMap<QString,SMESHGUI_GenericHypothesisCreator*> THypCreatorMap;
//THypCreatorMap myHypCreatorMap;
}
}
+ //================================================================================
+ /*!
+ * \brief Prepends dimension and appends '[custom]' to the name of hypothesis set
+ */
+ //================================================================================
+
+ static QString mangledHypoSetName(HypothesesSet* hypSet)
+ {
+ QString name = hypSet->name();
+
+ // prepend 'xD: '
+ int dim = hypSet->maxDim();
+ if ( dim > -1 )
+ name = QString("%1D: %2").arg(dim).arg(name);
+
+ // custom
+ if ( hypSet->getIsCustom() )
+ name = QString("%1 [custom]").arg(name);
+
+ return name;
+ }
+
+ //================================================================================
+ /*!
+ * \brief Removes dimension and '[custom]' from the name of hypothesis set
+ */
+ //================================================================================
+
+ static QString demangledHypoSetName(QString name)
+ {
+ name.remove(QRegExp("[0-3]D: "));
+ name.remove(" [custom]");
+ return name;
+ }
void InitAvailableHypotheses()
{
QObject::tr("MESHERS_FILE_NO_VARIABLE"));
return;
}
-
- // loop on files in HypsXml
- QString aNoAccessFiles;
+ // get full names of xml files from HypsXmlList
+ QStringList xmlFiles;
+ xmlFiles.append( QDir::home().filePath("CustomMeshers.xml")); // may be inexistent
for (int i = 0; i < HypsXmlList.count(); i++) {
QString HypsXml = HypsXmlList[ i ];
QString xmlFile = resMgr->path("resources", "SMESH", HypsXml + ".xml");
if ( xmlFile.isEmpty() ) // try PLUGIN resources
xmlFile = resMgr->path("resources", HypsXml, HypsXml + ".xml");
-
+ if ( !xmlFile.isEmpty() )
+ xmlFiles.append( xmlFile );
+ }
+
+ // loop on xmlFiles
+ QString aNoAccessFiles;
+ for (int i = 0; i < xmlFiles.count(); i++)
+ {
+ QString xmlFile = xmlFiles[ i ];
QFile file (xmlFile);
- if (file.exists() && file.open(QIODevice::ReadOnly)) {
+ if (file.exists() && file.open(QIODevice::ReadOnly))
+ {
file.close();
SMESHGUI_XmlHandler* aXmlHandler = new SMESHGUI_XmlHandler();
bool ok = reader.parse(source);
file.close();
if (ok) {
- myHypothesesMap.unite( aXmlHandler->myHypothesesMap );
- myAlgorithmsMap.unite( aXmlHandler->myAlgorithmsMap );
+
+ THypothesisDataMap::ConstIterator it1 = aXmlHandler->myHypothesesMap.begin();
+
+ for( ;it1 != aXmlHandler->myHypothesesMap.end(); it1++)
+ myHypothesesMap.insert( it1.key(), it1.value() );
+
+
+ it1 = aXmlHandler->myAlgorithmsMap.begin();
+ for( ;it1 != aXmlHandler->myAlgorithmsMap.end(); it1++)
+ myAlgorithmsMap.insert( it1.key(), it1.value() );
+
QList<HypothesesSet*>::iterator it, pos = myListOfHypothesesSets.begin();
for ( it = aXmlHandler->myListOfHypothesesSets.begin();
it != aXmlHandler->myListOfHypothesesSets.end();
- ++it ) {
+ ++it )
+ {
+ (*it)->setIsCustom( i == 0 );
myListOfHypothesesSets.insert( pos, *it );
}
}
QObject::tr("INF_PARSE_ERROR"),
QObject::tr(aXmlHandler->errorProtocol().toLatin1().data()));
}
- delete aXmlHandler;
+ delete aXmlHandler;
}
- else {
+ else if ( i > 0 ) { // 1st is ~/CustomMeshers.xml
if (aNoAccessFiles.isEmpty())
aNoAccessFiles = xmlFile;
else
aNoAccessFiles += ", " + xmlFile;
}
- } // end loop
+ } // end loop on xmlFiles
if (!aNoAccessFiles.isEmpty()) {
bool checkGeometry = ( !isNeedGeometry && isAlgo );
// fill list of hypotheses/algorithms
THypothesisDataMap& pMap = isAlgo ? myAlgorithmsMap : myHypothesesMap;
- THypothesisDataMap::iterator anIter;
+ THypothesisDataMap::ConstIterator anIter;
for ( anIter = pMap.begin(); anIter != pMap.end(); anIter++ ) {
HypothesisData* aData = anIter.value();
+ if(!aData || aData->Label.isEmpty()) continue;
if ( ( theDim < 0 || aData->Dim.contains( theDim ) ) && aData->IsAux == isAux) {
if (checkGeometry) {
if (aData->IsNeedGeometry == isNeedGeometry)
}
- QStringList GetHypothesesSets()
+ QStringList GetHypothesesSets(int maxDim)
{
QStringList aSetNameList;
hypoSet != myListOfHypothesesSets.end();
++hypoSet ) {
HypothesesSet* aSet = *hypoSet;
- if ( aSet && aSet->count( true ) ) {
- aSetNameList.append( aSet->name() );
+ if ( aSet &&
+ ( aSet->count( true ) || aSet->count( false )) &&
+ aSet->maxDim() <= maxDim)
+ {
+ aSetNameList.append( mangledHypoSetName( aSet ));
}
}
+ aSetNameList.sort();
+
+ // reverse order of aSetNameList
+ QStringList reversedNames;
+ for ( int i = 0; i < aSetNameList.count(); ++i )
+ reversedNames.prepend( aSetNameList[i] );
- return aSetNameList;
+ return reversedNames;
}
HypothesesSet* GetHypothesesSet(const QString& theSetName)
{
+ QString name = demangledHypoSetName( theSetName );
QList<HypothesesSet*>::iterator hypoSet;
for ( hypoSet = myListOfHypothesesSets.begin();
hypoSet != myListOfHypothesesSets.end();
++hypoSet ) {
HypothesesSet* aSet = *hypoSet;
- if ( aSet && aSet->name() == theSetName )
+ if ( aSet && aSet->name() == name )
return aSet;
}
return 0;
// Init list of available hypotheses, if needed
InitAvailableHypotheses();
- if (myHypothesesMap.find(aHypType) != myHypothesesMap.end()) {
+ if (myHypothesesMap.contains(aHypType)) {
aHypData = myHypothesesMap[aHypType];
}
- else if (myAlgorithmsMap.find(aHypType) != myAlgorithmsMap.end()) {
+ else if (myAlgorithmsMap.contains(aHypType)) {
aHypData = myAlgorithmsMap[aHypType];
}
return aHypData;
// map hypothesis creator to a hypothesis name
// BUG 0020378
//myHypCreatorMap[aHypType] = aCreator;
+
+ //rnv : This dynamic property of the QObject stores the name of the plugin.
+ // It is used to obtain plugin root dir environment variable
+ // in the SMESHGUI_HypothesisDlg class. Plugin root dir environment
+ // variable is used to display documentation.
+ aCreator->setProperty(PLUGIN_NAME,aHypData->PluginName);
}
}
}
if (aHypSObject) {
if (!aHypName.isEmpty())
SMESH::SetName(aHypSObject, aHypName);
+ SMESHGUI::Modified();
SMESHGUI::GetSMESHGUI()->updateObjBrowser();
return aHypothesis._retn();
}