CAM CASCatch DDS Event LightApp LogWindow ObjBrowser
QDS qtx SalomePrs SalomeStyle std SUITApp suit ViewerTools ViewerData
ImageComposer
+ SalomeApprc_utils
)
IF(SALOME_USE_OCCVIEWER OR SALOME_USE_VTKVIEWER OR SALOME_USE_GLVIEWER)
ADD_SUBDIRECTORY(ViewerTools)
ADD_SUBDIRECTORY(ImageComposer)
ADD_SUBDIRECTORY(GUI_PY)
+ADD_SUBDIRECTORY(SalomeApprc_utils)
##
# SALOME object
${PROJECT_SOURCE_DIR}/src/STD
${PROJECT_SOURCE_DIR}/src/SUIT
${PROJECT_SOURCE_DIR}/src/Style
+ ${PROJECT_SOURCE_DIR}/src/SalomeApprc_utils
)
IF(SALOME_USE_SALOMEOBJECT)
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/src/OBJECT)
${OpenCASCADE_FoundationClasses_LIBRARIES}
${QT_LIBRARIES}
${HDF5_LIBRARIES}
- CASCatch qtx suit std SalomeStyle SalomePrs CAM LogWindow ObjBrowser Event
+ CASCatch qtx suit std SalomeStyle SalomePrs CAM LogWindow ObjBrowser Event
+ SalomeApprc_utils
${KERNEL_SalomeHDFPersist} ${KERNEL_SALOMELocalTrace}
${GRAPHVIZ_LIBRARIES}
)
#include <QtxMap.h>
#include <LogWindow.h>
+#include <SalomeApprc_utils.h>
#ifndef DISABLE_GLVIEWER
#include <GLViewer_Viewer.h>
// b. here we add custom modules (manually added by the user)
if ( HAS_SALOME_ON_DEMAND )
{
+ // Update SalomeApprc.X.X.X with SALOME_APPLICATION_DIR
+ updateSalomeApprc();
QStringList modList = resourceMgr()->stringValue( "launch", "user_modules" ).split( ";", QString::SkipEmptyParts );
foreach ( QString aModule, modList )
addUserModule( aModule, resourceMgr()->stringValue( "user_modules", aModule ) );
}
}
+void LightApp_Application::updateSalomeApprc()
+{
+ SUIT_ResourceMgr* resMgr = resourceMgr();
+ auto extRootDir = getenv(salomeAppDir);
+
+ QString salomemodules(getenv("SALOME_MODULES"));
+ if(salomemodules.isEmpty())
+ AddComponents_from_salomeappdir( QDir(extRootDir), resMgr );
+ else
+ AddComponents_from_salomemodules(salomemodules, QDir(extRootDir), resMgr);
+}
+
/*!On module activation action.*/
void LightApp_Application::onModuleActivation( const QString& modTitle )
{
QList<QToolBar*> findToolBars( const QStringList& names = QStringList() );
void createHelpItems( const QString& );
void removeHelpItems( const QString& );
+ void updateSalomeApprc();
QByteArray processState(QByteArray& input,
const bool processWin,
+++ /dev/null
-{
- "files.associations": {
- "array": "cpp",
- "atomic": "cpp",
- "strstream": "cpp",
- "*.tcc": "cpp",
- "bitset": "cpp",
- "cctype": "cpp",
- "chrono": "cpp",
- "clocale": "cpp",
- "cmath": "cpp",
- "complex": "cpp",
- "cstdarg": "cpp",
- "cstddef": "cpp",
- "cstdint": "cpp",
- "cstdio": "cpp",
- "cstdlib": "cpp",
- "cstring": "cpp",
- "ctime": "cpp",
- "cwchar": "cpp",
- "cwctype": "cpp",
- "deque": "cpp",
- "list": "cpp",
- "unordered_map": "cpp",
- "vector": "cpp",
- "exception": "cpp",
- "algorithm": "cpp",
- "functional": "cpp",
- "iterator": "cpp",
- "map": "cpp",
- "memory": "cpp",
- "memory_resource": "cpp",
- "numeric": "cpp",
- "optional": "cpp",
- "random": "cpp",
- "ratio": "cpp",
- "set": "cpp",
- "string": "cpp",
- "string_view": "cpp",
- "system_error": "cpp",
- "tuple": "cpp",
- "type_traits": "cpp",
- "utility": "cpp",
- "fstream": "cpp",
- "initializer_list": "cpp",
- "iomanip": "cpp",
- "iosfwd": "cpp",
- "iostream": "cpp",
- "istream": "cpp",
- "limits": "cpp",
- "new": "cpp",
- "ostream": "cpp",
- "sstream": "cpp",
- "stdexcept": "cpp",
- "streambuf": "cpp",
- "thread": "cpp",
- "cfenv": "cpp",
- "cinttypes": "cpp",
- "typeindex": "cpp",
- "typeinfo": "cpp"
- }
-}
\ No newline at end of file
+++ /dev/null
-# Copyright (C) 2012-2022 CEA/DEN, EDF R&D, OPEN CASCADE
-#
-# 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
-#
-
-# Common CMake macros
-# ===================
-SET(CONFIGURATION_ROOT_DIR $ENV{CONFIGURATION_ROOT_DIR} CACHE PATH "Path to the Salome CMake configuration files")
-IF(EXISTS ${CONFIGURATION_ROOT_DIR})
- LIST(APPEND CMAKE_MODULE_PATH "${CONFIGURATION_ROOT_DIR}/cmake")
- INCLUDE(SalomeMacros NO_POLICY_SCOPE)
-ELSE()
- MESSAGE(FATAL_ERROR "We absolutely need the Salome CMake configuration files, please define CONFIGURATION_ROOT_DIR !")
-ENDIF()
-
-SET(GUI_ROOT_DIR $ENV{GUI_ROOT_DIR} CACHE PATH "Path to the Salome CMake GUI files")
-IF(EXISTS ${GUI_ROOT_DIR})
- SET(GUI_INCLUDE_DIRS ${GUI_ROOT_DIR}/include/salome)
- LINK_DIRECTORIES(${GUI_ROOT_DIR}/lib/salome)
-ELSE()
- MESSAGE(FATAL_ERROR "We absolutely need the GUI installation, please define GUI_ROOT_DIR !")
-ENDIF()
-
-FIND_PACKAGE(SalomeQt5)
-
-# additional include directories
-INCLUDE_DIRECTORIES(
- ${QT_INCLUDES}
- ${PYTHON_INCLUDE_DIRS}
- ${GUI_INCLUDE_DIRS}
-)
-# additional preprocessor / compiler flags
-ADD_DEFINITIONS(${QT_DEFINITIONS} ${PYTHON_DEFINITIONS})
-
-# libraries to link to
-SET(_link_LIBRARIES ${QT_LIBRARIES} ${PYTHON_LIBRARIES} qtx suit)
-
-## --- headers ---
-#
-# header files / to be processed by moc
-SET(_moc_HEADERS
- SalomeApprc_utils.h
-)
-#
-# header files / to install
-SET(SalomeApprc_tool_HEADERS ${_moc_HEADERS})
-
-# sources / moc wrappings
-QT5_WRAP_CPP(_moc_SOURCES SalomeApprc_tool.cxx SalomeApprc_utils.cxx)
-
-# --- rules ---
-
-ADD_EXECUTABLE(SalomeApprc_tool SalomeApprc_tool.cxx SalomeApprc_utils.cxx)
-TARGET_LINK_LIBRARIES(SalomeApprc_tool ${_link_LIBRARIES})
-INSTALL(TARGETS SalomeApprc_tool DESTINATION bin)
-
+++ /dev/null
-#include "SalomeApprc_utils.h"
-
-QDir salomeappdir(getenv("SALOME_APPLICATION_DIR"));
-SUIT_ResourceMgr ResMgr("SalomeApp");
-
-int main(int argc, char** argv)
-{
- QString salome_version;
- if (QString::compare(salomeappdir.dirName(), ".") == 0)
- {
- qWarning() << "SALOME_APPLICATION_DIR must not be empty!!";
- return 1;
- }
- if (argc >2)
- {
- qWarning() << "Too many arguments!! This function accept only one arg for the version name";
- return 1;
- }
- else if (argc < 2)
- {
- qInfo() << "Enter the salome version:";
- bool ok_input = false;
- while(!ok_input)
- {
- QTextStream in (stdin);
- salome_version = in.readLine();
- if (!salome_version.contains(" "))
- ok_input = true;
- else
- qWarning() << "The version string must not contain a blank space. Please re-enter the salome version";
- }
- }
- else
- {
- salome_version = (QString)argv[1];
- }
-
- QApplication app(argc, argv);
- app.setOrganizationName("salome");
- ResMgr.setVersion(salome_version);
-
- QString salomemodules(getenv("SALOME_MODULES"));
- if(salomemodules.isEmpty())
- AddComponents_from_salomeappdir();
- else
- AddComponents_from_salomemodules(salomemodules);
- ResMgr.setCurrentFormat("xml");
- ResMgr.save();
- return 0;
-}
+++ /dev/null
-#include "SalomeApprc_utils.h"
-
-QString getenv(const QString & envVar)
-{
- QString value;
-#ifndef WIN32
- value = qgetenv(envVar.toLocal8Bit().constData());
-#else
- LPTSTR buff = new TCHAR[MAX_VALUE_SIZE];
-#ifdef UNICODE
- LPTSTR anEnvVar = new TCHAR[envVar.length() + 1];
- anEnvVar[envVar.toWCharArray(anEnvVar)] = '\0';
-#else
- const TCHAR* anEnvVar = envVar.toLocal8Bit(buff).constData();
-#endif
- const DWORD ret = GetEnvironmentVariable(anEnvVar, buff, MAX_VALUE_SIZE);
- buff[ret] = '\0';
- if (ret > 0) {
-#ifdef UNICODE
- value = QString::fromWCharArray(buff);
-#else
- value = QString::fromLocal8Bit(buff);
-#endif
- }
- delete buff;
-#ifdef UNICODE
- delete anEnvVar;
-#endif
-#endif
- return value;
-}
-
-void AddComponents_from_salomeappdir()
-{
- QFileInfoList salomexd_list = salomeappdir.entryInfoList(QStringList() << "*.salomexd",QDir::Files);
-
- foreach(QFileInfo filename, salomexd_list)
- {
- QFile file( filename.filePath() );
- if ( !file.open( QFile::ReadOnly ) )
- {
- qWarning() << "file " << filename.fileName() << " is not accessible";
- continue;
- }
-
- QJsonDocument document = QJsonDocument::fromJson( file.readAll() );
- if ( document.isNull() )
- {
- qWarning() << "invalid json file. Filename: " << filename.fileName();
- continue;
- }
- QJsonObject root = document.object();
- QJsonValue components = root.value( "components");
- AddComponents_from_extmodule(components);
- }
-}
-
-void AddComponents_from_extmodule(const QJsonValue & components )
-{
- QString root(salomeappdir.path() + "/__SALOME_EXT__");
- if ( components.isArray() )
- {
- foreach ( auto comp, components.toArray())
- {
- AddGuiComponent(comp.toString(), root);
- }
- }
- else
- {
- QJsonObject compObj = components.toObject();
- foreach ( QString key, compObj.keys() )
- {
- if ( QString::compare(key, ITERACTIVE_EXTCOMPONENT_KEY) == 0 )
- {
- foreach (auto comp, compObj.value(key).toArray() )
- AddGuiComponent(comp.toString(), root);
- }
- }
- }
-}
-
-void AddComponents_from_salomemodules(const QString & salomemodules)
-{
- QRegularExpression sep(":|,");
- QStringList components_list = salomemodules.split(sep,QString::SkipEmptyParts);
- foreach (QString comp, components_list)
- {
- QString comp_root_dir = getenv(comp + "_ROOT_DIR");
-
- qWarning() << comp;
- qWarning() << comp_root_dir;
- if (comp_root_dir.isEmpty())
- comp_root_dir = salomeappdir.path() + "/__SALOME_EXT__";
- AddGuiComponent(comp, comp_root_dir);
- }
-
-
-}
-void AddGuiComponent(const QString& comp, const QString& CompRoot)
-{
- QStringList CompsResMgr = ResMgr.stringValue("launch", "user_modules").split(";", QString::SkipEmptyParts);
- if (!CompsResMgr.contains(comp))
- {
- ResMgr.setValue( "user_modules", comp, CompRoot );
- }
-
- CompsResMgr << comp;
- CompsResMgr.removeDuplicates();
- ResMgr.setValue( "launch", "user_modules", CompsResMgr.join( ";" ) );
-}
\ No newline at end of file
+++ /dev/null
-#include <QtCore>
-#include <QApplication>
-#include <QDir>
-#include <QJsonDocument>
-#include <QJsonObject>
-#include <SUIT_ResourceMgr.h>
-
-#include <iostream>
-
-extern QDir salomeappdir;
-const QString ITERACTIVE_EXTCOMPONENT_KEY("salome_interactive");
-extern SUIT_ResourceMgr ResMgr;
-
-QString getenv(const QString & envVar);
-void AddComponents_from_extmodule (const QJsonValue & components );
-void AddComponents_from_salomeappdir();
-void AddComponents_from_salomemodules(const QString & salomemodules);
-void AddGuiComponent(const QString& comp, const QString& CompRoot);
--- /dev/null
+{
+ "files.associations": {
+ "array": "cpp",
+ "atomic": "cpp",
+ "strstream": "cpp",
+ "*.tcc": "cpp",
+ "bitset": "cpp",
+ "cctype": "cpp",
+ "chrono": "cpp",
+ "clocale": "cpp",
+ "cmath": "cpp",
+ "complex": "cpp",
+ "cstdarg": "cpp",
+ "cstddef": "cpp",
+ "cstdint": "cpp",
+ "cstdio": "cpp",
+ "cstdlib": "cpp",
+ "cstring": "cpp",
+ "ctime": "cpp",
+ "cwchar": "cpp",
+ "cwctype": "cpp",
+ "deque": "cpp",
+ "list": "cpp",
+ "unordered_map": "cpp",
+ "vector": "cpp",
+ "exception": "cpp",
+ "algorithm": "cpp",
+ "functional": "cpp",
+ "iterator": "cpp",
+ "map": "cpp",
+ "memory": "cpp",
+ "memory_resource": "cpp",
+ "numeric": "cpp",
+ "optional": "cpp",
+ "random": "cpp",
+ "ratio": "cpp",
+ "set": "cpp",
+ "string": "cpp",
+ "string_view": "cpp",
+ "system_error": "cpp",
+ "tuple": "cpp",
+ "type_traits": "cpp",
+ "utility": "cpp",
+ "fstream": "cpp",
+ "initializer_list": "cpp",
+ "iomanip": "cpp",
+ "iosfwd": "cpp",
+ "iostream": "cpp",
+ "istream": "cpp",
+ "limits": "cpp",
+ "new": "cpp",
+ "ostream": "cpp",
+ "sstream": "cpp",
+ "stdexcept": "cpp",
+ "streambuf": "cpp",
+ "thread": "cpp",
+ "cfenv": "cpp",
+ "cinttypes": "cpp",
+ "typeindex": "cpp",
+ "typeinfo": "cpp"
+ }
+}
\ No newline at end of file
--- /dev/null
+# Copyright (C) 2012-2022 CEA/DEN, EDF R&D, OPEN CASCADE
+#
+# 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
+#
+
+# Common CMake macros
+# ===================
+SET(CONFIGURATION_ROOT_DIR $ENV{CONFIGURATION_ROOT_DIR} CACHE PATH "Path to the Salome CMake configuration files")
+IF(EXISTS ${CONFIGURATION_ROOT_DIR})
+ LIST(APPEND CMAKE_MODULE_PATH "${CONFIGURATION_ROOT_DIR}/cmake")
+ INCLUDE(SalomeMacros NO_POLICY_SCOPE)
+ELSE()
+ MESSAGE(FATAL_ERROR "We absolutely need the Salome CMake configuration files, please define CONFIGURATION_ROOT_DIR !")
+ENDIF()
+
+FIND_PACKAGE(SalomeQt5)
+
+# additional include directories
+INCLUDE_DIRECTORIES(
+ ${QT_INCLUDES}
+ ${PROJECT_SOURCE_DIR}/src/Qtx
+ ${PROJECT_SOURCE_DIR}/src/SUIT
+)
+# additional preprocessor / compiler flags
+ADD_DEFINITIONS(${QT_DEFINITIONS} ${PYTHON_DEFINITIONS})
+
+# libraries to link to
+SET(_link_LIBRARIES ${QT_LIBRARIES} qtx suit)
+
+## --- headers ---
+#
+# header files / to be processed by moc
+SET(_moc_HEADERS
+ SalomeApprc_utils.h
+)
+#
+# header files / to install
+SET(SalomeApprc_utils_HEADERS ${_moc_HEADERS})
+
+# sources / moc wrappings
+QT5_WRAP_CPP(_moc_SOURCES SalomeApprc_utils.cxx)
+
+# --- rules ---
+
+ADD_LIBRARY(SalomeApprc_utils SalomeApprc_utils.cxx)
+
+TARGET_LINK_LIBRARIES(SalomeApprc_utils ${_link_LIBRARIES})
+INSTALL(TARGETS SalomeApprc_utils EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS})
+#INSTALL(TARGETS suit EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS})
+
+INSTALL(FILES ${SalomeApprc_utils_HEADERS} DESTINATION ${SALOME_INSTALL_HEADERS})
--- /dev/null
+#include "SalomeApprc_utils.h"
+
+QDir salomeappdir(getenv("SALOME_APPLICATION_DIR"));
+SUIT_ResourceMgr ResMgr("SalomeApp");
+
+int main(int argc, char** argv)
+{
+ QString salome_version;
+ if (QString::compare(salomeappdir.dirName(), ".") == 0)
+ {
+ qWarning() << "SALOME_APPLICATION_DIR must not be empty!!";
+ return 1;
+ }
+ if (argc >2)
+ {
+ qWarning() << "Too many arguments!! This function accept only one arg for the version name";
+ return 1;
+ }
+ else if (argc < 2)
+ {
+ qInfo() << "Enter the salome version:";
+ bool ok_input = false;
+ while(!ok_input)
+ {
+ QTextStream in (stdin);
+ salome_version = in.readLine();
+ if (!salome_version.contains(" "))
+ ok_input = true;
+ else
+ qWarning() << "The version string must not contain a blank space. Please re-enter the salome version";
+ }
+ }
+ else
+ {
+ salome_version = (QString)argv[1];
+ }
+
+ QApplication app(argc, argv);
+ app.setOrganizationName("salome");
+ ResMgr.setVersion(salome_version);
+
+ QString salomemodules(getenv("SALOME_MODULES"));
+ if(salomemodules.isEmpty())
+ AddComponents_from_salomeappdir();
+ else
+ AddComponents_from_salomemodules(salomemodules);
+ ResMgr.setCurrentFormat("xml");
+ ResMgr.save();
+ return 0;
+}
--- /dev/null
+#include "SalomeApprc_utils.h"
+
+void AddComponents_from_salomeappdir(const QDir& salomeappdir, SUIT_ResourceMgr* ResMgr)
+{
+ QFileInfoList salomexd_list = salomeappdir.entryInfoList(QStringList() << "*.salomexd",QDir::Files);
+ foreach(QFileInfo filename, salomexd_list)
+ {
+ QFile file( filename.filePath() );
+ if ( !file.open( QFile::ReadOnly ) )
+ {
+ qWarning() << "file " << filename.fileName() << " is not accessible";
+ continue;
+ }
+
+ QJsonDocument document = QJsonDocument::fromJson( file.readAll() );
+ if ( document.isNull() )
+ {
+ qWarning() << "invalid json file. Filename: " << filename.fileName();
+ continue;
+ }
+ QJsonObject salomexd_dict = document.object();
+ QJsonValue components = salomexd_dict.value( "components");
+
+ QString root(salomeappdir.path() + "/__SALOME_EXT__");
+ if ( components.isArray() )
+ {
+ // In the case that we have a list of components. We consider that all of them are GUI module
+ foreach ( auto comp, components.toArray())
+ {
+ AddGuiComponent(comp.toString(), root, ResMgr);
+ }
+ }
+ else
+ {
+ // In the case that we have a dict of several component group
+ QJsonObject compObj = components.toObject();
+ foreach ( QString key, compObj.keys() )
+ {
+ if ( QString::compare(key, ITERACTIVE_EXTCOMPONENT_KEY) == 0 )
+ {
+ foreach (auto comp, compObj.value(key).toArray() )
+ AddGuiComponent(comp.toString(), root, ResMgr);
+ }
+ }
+ }
+ }
+}
+
+void AddComponents_from_salomemodules(const QString& salomemodules, const QDir& salomeappdir, SUIT_ResourceMgr* ResMgr)
+{
+ QRegularExpression sep(":|,");
+ QStringList components_list = salomemodules.split(sep,QString::SkipEmptyParts);
+ foreach (QString comp, components_list)
+ {
+ QString comp_root_dir = Qtx::getenv(comp + "_ROOT_DIR");
+
+ qWarning() << comp;
+ qWarning() << comp_root_dir;
+ if (comp_root_dir.isEmpty())
+ comp_root_dir = salomeappdir.path() + "/__SALOME_EXT__";
+ AddGuiComponent(comp, comp_root_dir, ResMgr);
+ }
+
+
+}
+void AddGuiComponent(const QString& comp, const QString& CompRoot, SUIT_ResourceMgr* ResMgr)
+{
+ QStringList CompsResMgr = ResMgr->stringValue("launch", "user_modules").split(";", QString::SkipEmptyParts);
+ if (!CompsResMgr.contains(comp))
+ {
+ ResMgr->setValue( "user_modules", comp, CompRoot );
+ }
+
+ CompsResMgr << comp;
+ CompsResMgr.removeDuplicates();
+ ResMgr->setValue( "launch", "user_modules", CompsResMgr.join( ";" ) );
+}
\ No newline at end of file
--- /dev/null
+#ifndef SALOMEAPPRC_UTILS_H
+#define SALOMEAPPRC_UTILS_H
+
+#include <QtCore>
+#include <QDir>
+#include <QJsonDocument>
+#include <QJsonObject>
+
+#include <Qtx.h>
+#include <SUIT_ResourceMgr.h>
+
+const QString ITERACTIVE_EXTCOMPONENT_KEY("salome_interactive");
+
+void AddComponents_from_salomeappdir(const QDir& salomeappdir, SUIT_ResourceMgr* ResMgr);
+void AddComponents_from_salomemodules(const QString& salomemodules, const QDir& salomeappdir, SUIT_ResourceMgr* ResMgr);
+void AddGuiComponent(const QString& comp, const QString& CompRoot, SUIT_ResourceMgr* ResMgr );
+
+#endif
\ No newline at end of file