]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Run SALOME with UNICODE path.
authorrnv <rnv@opencascade.com>
Thu, 21 Feb 2019 08:46:02 +0000 (11:46 +0300)
committerrnv <rnv@opencascade.com>
Thu, 21 Feb 2019 08:46:02 +0000 (11:46 +0300)
17 files changed:
src/GLViewer/GLViewer_Widget.cxx
src/HelpBrowser/HelpBrowser.cxx
src/LightApp/LightApp_Application.cxx
src/LightApp/LightApp_Driver.cxx
src/PVViewer/PVViewer_Core.cxx
src/PVViewer/PVViewer_ViewManager.cxx
src/Qtx/Qtx.cxx
src/Qtx/Qtx.h
src/Qtx/QtxResourceMgr.cxx
src/SUIT/SUIT_LicenseDlg.cxx
src/SVTK/SVTK_RecorderDlg.cxx
src/Session/SALOME_Session_Server.cxx
src/Style/Style_ResourceMgr.cxx
src/TOOLSGUI/ToolsGUI_CatalogGeneratorDlg.cxx
src/VTKViewer/VTKViewer_OpenGLHelper.cxx
src/VTKViewer/VTKViewer_OpenGLRenderer.cxx
src/VTKViewer/VTKViewer_PolyDataMapper.cxx

index a12208c73354396fb641b2e98623f518e626505c..4972d64e28e2687f64f32b9154873f3912762406 100644 (file)
@@ -265,7 +265,7 @@ void GLViewer_Widget::initializeGL()
     
     //get image
     QImage buf; 
-    QString aPicturePath = getenv("GLViewer__Background_Picture");
+    QString aPicturePath = Qtx::getenv("GLViewer__Background_Picture");
     
     if ( !aPicturePath.isEmpty() && buf.load( aPicturePath ) ) 
     {  // Load first image from file
index 9848af0baa1c37bf2bfee3b0d31eab977a313def..03cb8f5f3b9a88a75febf62fe76f39a0c02daf1e 100644 (file)
@@ -261,7 +261,7 @@ int main( int argc, char **argv )
 
   // Load file specified via command line
   if ( helpfile.isEmpty() ) {
-    QString docdir = qgetenv( "DOCUMENTATION_ROOT_DIR" );
+    QString docdir = Qtx::getenv( "DOCUMENTATION_ROOT_DIR" );
     if ( !docdir.isEmpty() )
       helpfile = QDir::toNativeSeparators( QString( "%1/index.html" ).arg( docdir ) );
   }
index 21cc6176ff1e14314251da8f9fd45e7d3b358ebb..9f5f38e45257f0a00bec350ac7006620e12526fd 100644 (file)
@@ -659,7 +659,7 @@ void LightApp_Application::createActions()
     QString modName = moduleName( aModule );                         // module name
     if ( modName.isEmpty() ) modName = aModule;                      // for KERNEL and GUI
     QString rootDir = QString( "%1_ROOT_DIR" ).arg( modName );       // module root dir env variable
-    QString modDir  = getenv( rootDir.toUtf8().constData() );        // module root dir path
+    QString modDir  = Qtx::getenv( rootDir.toUtf8().constData() );        // module root dir path
     QString docSection;
     if (resMgr->hasValue( modName, "documentation" ) )
       docSection = resMgr->stringValue(modName, "documentation");
@@ -1283,7 +1283,7 @@ void LightApp_Application::onHelpContextModule( const QString& component,
     QFileInfo fi( url );
     if ( fi.isRelative() && !component.isEmpty() )
     {
-      QString rootDir = getenv( (component + "_ROOT_DIR").toLatin1().constData() );
+      QString rootDir = Qtx::getenv( (component + "_ROOT_DIR").toLatin1().constData() );
       if ( !rootDir.isEmpty() )
       {
        path = (QStringList() << rootDir << "share" << "doc" << "salome" << "gui" << component << url).join( QDir::separator() );
@@ -3969,11 +3969,11 @@ bool LightApp_Application::checkModule( const QString& title )
 
   QStringList paths;
 #if defined(WIN32)
-  paths = QString( ::getenv( "PATH" ) ).split( ";", QString::SkipEmptyParts );
+  paths = QString( Qtx::getenv( "PATH" ) ).split( ";", QString::SkipEmptyParts );
 #elif defined(__APPLE__)
-  paths = QString( ::getenv( "DYLD_LIBRARY_PATH" ) ).split( ":", QString::SkipEmptyParts );
+  paths = QString( Qtx::getenv( "DYLD_LIBRARY_PATH" ) ).split( ":", QString::SkipEmptyParts );
 #else
-  paths = QString( ::getenv( "LD_LIBRARY_PATH" ) ).split( ":", QString::SkipEmptyParts );
+  paths = QString( Qtx::getenv( "LD_LIBRARY_PATH" ) ).split( ":", QString::SkipEmptyParts );
 #endif
 
   bool isFound = false;
index 957af1f870dc6987ce980260570479af829dc140..cc14d57a9c840a5dde764d6f6e315a819f8f065d 100644 (file)
@@ -33,6 +33,8 @@
 #include <QFileInfo>
 #include <QDir>
 
+#include <Qtx.h>
+
 #ifdef WIN32
 #include <time.h>
 #endif
index c249d8a6734830d561372780c1886a4e2e80519e..d32e73fb8e545e710890f6681e0525e81ea5765c 100644 (file)
@@ -25,6 +25,8 @@
 #include "PVViewer_Behaviors.h"
 #include "PVViewer_Core.h"
 
+#include <Qtx.h>
+
 #include <QApplication>
 #include <QStringList>
 #include <QDir>
@@ -64,7 +66,7 @@ bool PVViewer_Core::ParaviewInitApp(QMainWindow * aDesktop)
       // Obtain command-line arguments
       int argc = 0;
       char** argv = 0;
-      QString aOptions = getenv("PARAVIEW_OPTIONS");
+      QString aOptions = Qtx::getenv("PARAVIEW_OPTIONS");
       QStringList aOptList = aOptions.split(":", QString::SkipEmptyParts);
       argv = new char*[aOptList.size() + 3];
       QStringList args = QApplication::arguments();
index 29eddef95e8f2d6d91664b360247a13fcbb18d47..647ea96d9e2a8c23522198216a5b5e6500aa1122 100644 (file)
@@ -95,7 +95,7 @@ bool PVViewer_ViewManager::ConnectToExternalPVServer(QMainWindow* desktop)
   std::stringstream msg;
 
   // Try to connect to the external PVServer - gives priority to an externally specified URL:
-  QString serverUrlEnv = getenv("PARAVIEW_PVSERVER_URL");
+  QString serverUrlEnv = Qtx::getenv("PARAVIEW_PVSERVER_URL");
   std::string serverUrl;
   if (!serverUrlEnv.isEmpty())
   {
index e976086b150139a09a35429643cefd4aefa9e43e..8170e34a27c40f1bac3a7a03c7715cafc9dde428 100755 (executable)
 #include <stdarg.h>
 #include <clocale>
 
+#ifdef WIN32
+#include <windows.h>
+#define MAX_VALUE_SIZE 32767 // Limit according to http://msdn.microsoft.com/en-us/library/ms683188.aspx
+#endif
+
+#include <iostream>
+
 #define BICOLOR_CHANGE_HUE
 
 /*!
@@ -484,18 +491,18 @@ QString Qtx::library( const QString& str )
 */
 QString Qtx::tmpDir()
 {
-  const char* tmpdir = ::getenv( "TEMP" );
-  if ( !tmpdir )
-    tmpdir = ::getenv ( "TMP" );
-  if ( !tmpdir )
+  QString tmpdir = getenv( "TEMP" );
+  if ( tmpdir.isEmpty() )
+    tmpdir = getenv ( "TMP" );
+  if ( tmpdir.isEmpty() )
   {
 #ifdef WIN32
-    tmpdir = "C:\\";
+    tmpdir = QString("C:\\");
 #else
-    tmpdir = "/tmp";
+    tmpdir = QString("/tmp");
 #endif
   }
-  return QString( tmpdir );
+  return tmpdir;
 }
 
 /*!
@@ -746,8 +753,8 @@ QString Qtx::makeEnvVarSubst( const QString& str, const SubstMode mode )
         break;
 
       QString newStr;
-      if ( ::getenv( envName.toUtf8() ) || mode == Always )
-        newStr = QString( ::getenv( envName.toUtf8() ) );
+      if ( getenv( envName ).isEmpty() || mode == Always )
+        newStr = QString( getenv( envName ) );
 
       if ( newStr.isNull() )
       {
@@ -2113,10 +2120,12 @@ long Qtx::versionToId( const QString& version )
 
 QString Qtx::qtDir( const QString& context )
 {
-  const char* vars[] = { "QT5_ROOT_DIR", "QT4_ROOT_DIR", "QT_ROOT_DIR", "QTDIR" };
+
+  QStringList vars = { "QT5_ROOT_DIR", "QT4_ROOT_DIR", "QT_ROOT_DIR", "QTDIR" };
   QString qtPath;
-  for (uint i = 0; i < sizeof(vars)/sizeof(vars[0]) && qtPath.isEmpty(); i++ )
-    qtPath = qgetenv( vars[i] );
+  for (uint i = 0; i < vars.length() && qtPath.isEmpty(); i++ ) {
+    qtPath = getenv(vars[i]);
+  }
   if ( !qtPath.isEmpty() && !context.isEmpty() )
     qtPath = QDir( qtPath ).absoluteFilePath( context );
   return qtPath;
@@ -2133,6 +2142,36 @@ QFont Qtx::stringToFont( const QString& fontDescription )
   return font;
 }
 
+QString Qtx::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;
+}
+
 #if !defined WIN32 && !defined __APPLE__ 
 
 #include <X11/Xlib.h>
index 164b46c042dce5f94e8eeb728a9c18f4f8af8d5c..19b1c3d8facb4f595cff1ae54a79c3c6d93e197f 100755 (executable)
@@ -279,6 +279,8 @@ public:
 
   static QFont   stringToFont( const QString& fontDescription );
 
+  static QString     getenv( const QString& envVar );
+
 #ifndef WIN32
   static void*       getDisplay();
   static Qt::HANDLE  getVisual();
index c5cd1d74ec0ae36a0d4bd509dfdac4ee842b8a6a..748032a35299bada450fb60af499941dafed6b33 100644 (file)
@@ -462,8 +462,9 @@ QString QtxResourceMgr::Resources::makeSubstitution( const QString& str, const Q
     QString newStr = constants.value( envName, QString() );
 
     // Then we check for environment variable
-    if ( newStr.isEmpty() && ::getenv( envName.toLatin1() ) )
-      newStr = QString( ::getenv( envName.toLatin1() ) );
+       QString tmpValue = Qtx::getenv( envName );
+    if ( newStr.isEmpty() && !tmpValue.isEmpty() )
+      newStr = tmpValue;
 
     if ( newStr.isEmpty() )
     {
@@ -1251,8 +1252,9 @@ QtxResourceMgr::QtxResourceMgr( const QString& appName, const QString& resVarTem
     envVar = envVar.arg( appName );
 
   QString dirs;
-  if ( ::getenv( envVar.toLatin1() ) )
-    dirs = ::getenv( envVar.toLatin1() );
+  QString tmpValue = Qtx::getenv( envVar );
+  if ( !tmpValue.isEmpty() )
+    dirs = tmpValue;
 #ifdef WIN32
   QString dirsep = ";";      // for Windows: ";" is used as directories separator
 #else
index 6a2c7dbac636055d786cc929b0bacc5dffebc1a5..7c5765cc247a0bcba07eb76fe4be679dca95b30e 100755 (executable)
@@ -32,6 +32,8 @@
 
 #include <math.h>
 
+#include <Qtx.h>
+
 #ifdef WIN32
 #include <UserEnv.h>
 #endif
@@ -47,10 +49,7 @@ SUIT_LicenseDlg::SUIT_LicenseDlg( bool firstShow, QWidget* parent, const char* n
 {
   setObjectName( name );
   setModal( modal );
-  QString env;
-  if ( ::getenv( "SALOME_LICENSE_FILE" ) )
-    env = ::getenv( "SALOME_LICENSE_FILE" );
+  QString env = Qtx::getenv( "SALOME_LICENSE_FILE" ); 
   QFile file( env ); // Read the text from a file
   
   if ( !file.exists() || !file.open( QIODevice::ReadOnly ) )
index 366e70aed347105e1a9d4ab27bab44509300f12a..9d13282e03c85d29af08c562db1c87e71eaea2e7 100644 (file)
@@ -25,6 +25,8 @@
 #include <SUIT_ResourceMgr.h>
 #include <SUIT_Session.h>
 
+#include <Qtx.h>
+
 #include <QtxDoubleSpinBox.h>
 #include <QtxIntSpinBox.h>
 
@@ -173,7 +175,7 @@ bool SVTK_RecorderDlg::onBrowseFile()
   aFilter.append( tr( "FLT_AVI_FILES" ) );
   aFilter.append( tr( "FLT_ALL_FILES" ) );
 
-  QString aFileName = SUIT_FileDlg::getFileName( this, getenv( "HOME" ), aFilter,
+  QString aFileName = SUIT_FileDlg::getFileName( this, Qtx::getenv( "HOME" ), aFilter,
                                                  tr( "FILE_NAME" ), false );
 
   if( aFileName.isNull() )
index 7e1c32f05a40fbab8db4e6a250019330fb5ff553..fcb5509f026127d393423001445c5736986d0a1d 100755 (executable)
@@ -67,6 +67,9 @@
 
 #ifdef WIN32
 #define sleep _sleep
+#include <windows.h>
+#include <stdio.h>
+#include <shellapi.h>
 #endif
 
 #include <time.h>
@@ -79,6 +82,8 @@
 #include <QRegExp>
 #include <QTextStream>
 
+#include <Basics_Utils.hxx> 
+
 /*! - read arguments, define list of server to launch with their arguments.
  * - wait for naming service
  * - create and run a thread for launch of all servers
@@ -397,7 +402,7 @@ int main( int argc, char **argv )
   _qappl.setApplicationVersion( salomeVersion() );
 
   // Add application library path (to search style plugin etc...)
-  QString path = QDir::toNativeSeparators( SUIT_Tools::addSlash( QString( ::getenv( "GUI_ROOT_DIR" ) ) ) + QString( "bin/salome" ) );
+  QString path = QDir::toNativeSeparators( SUIT_Tools::addSlash( QString( Qtx::getenv( "GUI_ROOT_DIR" ) ) ) + QString( "bin/salome" ) );
   _qappl.addLibraryPath( path );
 
   bool isGUI    = isFound( "GUI",    argc, argv );
@@ -442,7 +447,9 @@ int main( int argc, char **argv )
   SALOME_NamingService* _NS = 0;
   GetInterfaceThread* guiThread = 0;
   Session_ServerLauncher* myServerLauncher = 0;
-
+#if defined(WIN32) && defined(UNICODE)
+  char** new_argv = NULL;
+#endif
   try {
     // ...initialize Python (only once)
     int   _argc   = 1;
@@ -499,7 +506,21 @@ int main( int argc, char **argv )
     // ...lock mutex to block embedded servers launching thread until wait( mutex )
     _GUIMutex.lock();  
     // ...create launcher
+#if defined(WIN32) && defined(UNICODE)
+       LPWSTR *szArglist = NULL;
+       int nArgs;
+       int i;
+       szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);      
+       new_argv = new char*[nArgs];
+       for (i = 0; i < nArgs; i++) {
+               new_argv[i] = (char*) Kernel_Utils::utf8_encode(szArglist[i]);
+       }
+       // Free memory allocated for CommandLineToArgvW arguments.
+       LocalFree(szArglist);
+       myServerLauncher = new Session_ServerLauncher(nArgs, new_argv, orb, poa, &_GUIMutex, &_ServerLaunch, &_SessionMutex, &_SessionStarted); 
+#else
     myServerLauncher = new Session_ServerLauncher( argc, argv, orb, poa, &_GUIMutex, &_ServerLaunch, &_SessionMutex, &_SessionStarted );
+#endif
     // ...block this thread until launcher is ready
     _ServerLaunch.wait( &_GUIMutex );
     
@@ -656,6 +677,9 @@ int main( int argc, char **argv )
   delete guiThread;
   delete myServerLauncher;
   delete _NS;
+#if defined(WIN32) && defined(UNICODE)
+  delete[] new_argv;
+#endif
 
   try  {
     orb->shutdown(0);
index 133fc45ef06676792a26d9d06264d85799a4e362..7551a91bf586469e4cae56001e785c89683aa843 100644 (file)
@@ -43,8 +43,9 @@
 Style_ResourceMgr::Style_ResourceMgr()
   : QtxResourceMgr( "SalomeStyle", "%1Config" )
 {
-  if ( dirList().isEmpty() && ::getenv( "GUI_ROOT_DIR" ) )
-    setDirList( QStringList() << Qtx::addSlash( ::getenv( "GUI_ROOT_DIR" ) ) + "share/salome/resources/gui" );
+  QString gui_root = Qtx::getenv( "GUI_ROOT_DIR" );
+  if ( dirList().isEmpty() && !gui_root.isEmpty() )
+    setDirList( QStringList() << Qtx::addSlash( gui_root ) + "share/salome/resources/gui" );
   setCurrentFormat( "xml" );
 }
 
index 29446ccb744f22c33672aeb28059bc4a81486069..7c6d9c337a2198ca416157e681399de264449bb8 100755 (executable)
@@ -43,6 +43,8 @@
 #include <QIntValidator>
 #include <QFile>
 
+#include <Qtx.h>
+
 #include <OSD_Process.hxx>
 #include <OSD_Path.hxx>
 #include <TCollection_AsciiString.hxx>
@@ -399,8 +401,9 @@ void ToolsGUI_CatalogGeneratorDlg::onApply()
     }
     else {
       QString command = "";
-      if ( getenv("KERNEL_ROOT_DIR")  )
-        command = QString( getenv( "KERNEL_ROOT_DIR" ) ) + "/bin/salome/runIDLparser -K " + IDLpath + " -Wbcatalog=" + XmlFile;
+      QString kernel_root = Qtx::getenv("KERNEL_ROOT_DIR"); 
+      if ( !kernel_root.isEmpty() )
+        command = kernel_root + "/bin/salome/runIDLparser -K " + IDLpath + " -Wbcatalog=" + XmlFile;
       else {
         SUIT_MessageBox::critical( this, 
                                    tr("TOOLS_ERR_ERROR"), 
index d299db78ea6ef3469bfbef140ae12689f36dd16c..c6ab4c6c65736e9321082022f24f7d29e834a461 100644 (file)
@@ -22,6 +22,7 @@
 
 
 #include "VTKViewer_OpenGLHelper.h"
+#include <Basics_Utils.hxx>
 
 #ifndef WIN32
 # ifndef GLX_GLXEXT_LEGACY
@@ -219,8 +220,12 @@ namespace GUI_OPENGL
 {
        char* readFromFile( std::string fileName )
        {
+#if defined(WIN32) && defined(UNICODE)
+         const wchar_t* wFileName = Kernel_Utils::utf8_decode( fileName.c_str() );
+         FILE* file = _wfopen( wFileName, L"r" );
+#else
          FILE* file = fopen( fileName.c_str(), "r" );
-
+#endif
          char* content = NULL;
          int count = 0;
 
index 60e9b0fd1c8cada5ea45a9429e00d95a6d19de6b..fa51ad06008f05783a4921cc2fe0e4e6cffd9d54 100644 (file)
@@ -41,6 +41,8 @@
 #include <vtkOpenGL.h>
 #include <vtkObjectFactory.h>
 
+#include <Basics_Utils.hxx>
+
 vtkStandardNewMacro(VTKViewer_OpenGLRenderer);
 
 VTKViewer_OpenGLRenderer::VTKViewer_OpenGLRenderer()
@@ -74,7 +76,13 @@ void VTKViewer_OpenGLRenderer::Clear(void)
   {
     if (this->BackgroundProgram == 0)
     {
-      std::string filePath = std::string( getenv( "GUI_ROOT_DIR") ) + "/share/salome/resources/gui/Background";
+#if defined(WIN32) && defined(UNICODE)
+       std::wstring wFilePath = std::wstring( _wgetenv(L"GUI_ROOT_DIR") ) + L"/share/salome/resources/gui/Background";
+       std::string filePath = Kernel_Utils::utf8_encode_s( wFilePath );
+#else
+       std::string filePath = std::string(getenv("GUI_ROOT_DIR")) + "/share/salome/resources/gui/Background";
+#endif
+      
       if (!this->OpenGLHelper.CreateShaderProgram (filePath,
                                                    this->BackgroundProgram,
                                                    this->BackgroundVertexShader,
index 84f3dd8e6bd6663f3e4f965da4e6a984a9df079c..2423e46bbca27a34e0d3b9fe64e398c7e2ad9636 100644 (file)
@@ -42,6 +42,8 @@
 #include <vtkCommand.h>
 #include <vtkCellData.h>
 
+#include <Basics_Utils.hxx>
+
 #ifndef WIN32
 # ifndef GLX_GLXEXT_LEGACY
 #  define GLX_GLXEXT_LEGACY
@@ -157,7 +159,12 @@ VTKViewer_PolyDataMapper::~VTKViewer_PolyDataMapper()
 int VTKViewer_PolyDataMapper::InitShader()
 {
 #ifdef VTK_OPENGL2
+#if defined(WIN32) && defined(UNICODE)
+       std::wstring wFilePath = std::wstring(_wgetenv(L"GUI_ROOT_DIR")) + L"/share/salome/resources/gui/Point";
+       std::string filePath = Kernel_Utils::utf8_encode_s(wFilePath.c_str());
+#else
   std::string filePath = std::string( getenv( "GUI_ROOT_DIR") ) + "/share/salome/resources/gui/Point";
+#endif
   if( !this->OpenGLHelper.CreateShaderProgram(filePath, this->PointProgram, this->VertexShader, this->FragmentShader) )
     return false;
 
@@ -174,9 +181,14 @@ int VTKViewer_PolyDataMapper::InitShader()
   this->OpenGLHelper.vglUseProgramObjectARB( current_program );
 
   this->OpenGLHelper.vglGenVertexArraysARB(1, &this->VertexArrayObject);
+#else
+#if defined(WIN32) && defined(UNICODE)
+       std::wstring wFilePath = std::wstring(_wgetenv( L"GUI_ROOT_DIR" ) ) + L"/share/salome/resources/gui/Vertex_Program_ARB.txt";
+       std::string fileName = Kernel_Utils::utf8_encode( wFilePath.c_str() );
 #else
   std::string fileName = std::string( getenv( "GUI_ROOT_DIR") ) +
                          "/share/salome/resources/gui/Vertex_Program_ARB.txt";
+#endif
 
   char* shader = GUI_OPENGL::readFromFile( fileName );