]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
0021048: [CEA 429] Problem with Dump view in SMESH
authorvsr <vsr@opencascade.com>
Mon, 1 Nov 2010 14:46:10 +0000 (14:46 +0000)
committervsr <vsr@opencascade.com>
Mon, 1 Nov 2010 14:46:10 +0000 (14:46 +0000)
src/Qtx/Qtx.cxx
src/Qtx/Qtx.h
src/SUIT/SUIT_ViewWindow.cxx

index ded4dd5016407c5b07cceb4d950014ecac1cb9d8..a095db966a4fb43e9bec0ea8999bf6bd769f765f 100755 (executable)
@@ -1384,6 +1384,45 @@ bool Qtx::stringToConicalGradient( const QString& str, QConicalGradient& gradien
   return success;
 }
 
+/*!
+  \class Qtx::Localizer
+  \brief Localization helper
+
+  This helper class can be used to solve the localization problems,
+  usually related to the textual files reading/writing, namely when
+  floating point values are read / written with API functions.
+  The problem relates to such locale specific settings as decimal point
+  separator, thousands separator, etc.
+  
+  To use the Localizer class, just create a local variable in the beginning
+  of the code where you need to read / write data from textual file(s).
+  The constructor of the class forces setting "C" locale temporariy.
+  The destructor switches back to the initial locale.
+
+  \code
+  Qtx::Localizer loc;
+  readSomething();
+  writeSomething();
+  \endcode
+*/
+
+/*!
+  \brief Constructor. Forces "C" locale to be set.
+*/
+Qtx::Localizer::Localizer()
+{
+  myCurLocale = setlocale( LC_NUMERIC, 0 );
+  setlocale( LC_NUMERIC, "C" );
+}
+
+/*!
+  \brief Destructor. Reverts back to the initial locale.
+*/
+Qtx::Localizer::~Localizer()
+{
+  setlocale( LC_NUMERIC, myCurLocale.toLatin1().constData() );
+}
+
 #ifndef WIN32
 
 #include <X11/Xlib.h>
index c5bc82b2d11c3b3813341f447dbf9127958ba3c3..85784e6ba990ad645a615273b476a4dc49d87cd6 100755 (executable)
@@ -113,6 +113,15 @@ public:
         Auto    //!< substitute environment variable by it's value if variable exists, and keep it as is otherwise
   } SubstMode;
 
+  class Localizer
+  {
+  public:
+    Localizer();
+    ~Localizer();
+  private:
+    QString myCurLocale;
+  };
+
   static QString     toQString( const char*, const int = -1 );
   static QString     toQString( const short*, const int = -1 );
   static QString     toQString( const unsigned char*, const int = -1 );
index ebf0055c94aa6a9d2e11861fa9271fefb0b50ecf..68d27fb67e197549bf8b59a9881af77a834930fc 100755 (executable)
@@ -119,6 +119,7 @@ bool SUIT_ViewWindow::dumpViewToFormat( const QImage& img, const QString& fileNa
 */
 bool SUIT_ViewWindow::dumpViewToFormat( const QString& fileName, const QString& format )
 {
+  Qtx::Localizer loc;
   return dumpViewToFormat( dumpView(), fileName, format );
 }
 
@@ -185,11 +186,12 @@ bool SUIT_ViewWindow::event( QEvent* e )
       QString fileName = app->getFileName( false, QString(), filter(), tr( "TLT_DUMP_VIEW" ), 0 );
       if ( !fileName.isEmpty() )
       {
-              QString fmt = SUIT_Tools::extension( fileName ).toUpper();
-              bOk = dumpViewToFormat( im, fileName, fmt );
+       QString fmt = SUIT_Tools::extension( fileName ).toUpper();
+       Qtx::Localizer loc;
+       bOk = dumpViewToFormat( im, fileName, fmt );
       }
       else
-              bOk = true; // cancelled
+       bOk = true; // cancelled
     }
     if ( !bOk )
       SUIT_MessageBox::critical( this, tr( "ERROR" ), tr( "ERR_CANT_DUMP_VIEW" ) );