X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FQtx%2FQtx.cxx;h=8d98abdb5f8977230b0d71880ec88eb592d24033;hb=331294345d3e1716fbf79ae25a2851011729be79;hp=cf3dc958f567dd5e3ffb145aede2d4eb737459db;hpb=260f791f6d898b6035f512d5b6a799248ad11a59;p=modules%2Fgui.git diff --git a/src/Qtx/Qtx.cxx b/src/Qtx/Qtx.cxx index cf3dc958f..8d98abdb5 100755 --- a/src/Qtx/Qtx.cxx +++ b/src/Qtx/Qtx.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 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 @@ -38,6 +38,9 @@ #include #include #include +#if QT_VERSION > QT_VERSION_CHECK(5, 0, 0) +#include +#endif #include #include @@ -277,26 +280,31 @@ void Qtx::simplifySeparators( QWidget* wid, const bool recursive ) if ( items.isEmpty() ) return; - QList toRemove; - for ( int i = 1; i < items.count(); i++ ) + bool action = false; + for ( int i = 0; i < items.count(); i++ ) { - if ( items[i]->isSeparator() && items[i - 1]->isSeparator() ) - toRemove.append( items[i] ); - - if ( recursive && items[i]->menu() ) - simplifySeparators( items[i]->menu(), recursive ); + QAction* a = items[i]; + if ( a->isSeparator() ) { + a->setVisible(action); + action = false; + } + else if ( a->isVisible() ) { + action = true; + if ( recursive && a->menu() ) + simplifySeparators( a->menu(), recursive ); + } } - for ( QList::iterator it = toRemove.begin(); it != toRemove.end(); ++it ) - wid->removeAction( *it ); - - items = wid->actions(); - if ( !items.isEmpty() && items[0]->isSeparator() ) - wid->removeAction( items[0] ); - - items = wid->actions(); - if ( !items.isEmpty() && items[items.count() - 1]->isSeparator() ) - wid->removeAction( items[items.count() - 1] ); + action = false; + for ( int i = items.count() - 1; i > 0; i-- ) { + QAction* a = items[i]; + if ( a->isSeparator() ) { + a->setVisible(action); + action = false; + } + else if ( a->isVisible() ) + action = true; + } } /*! @@ -429,13 +437,15 @@ QString Qtx::library( const QString& str ) name = QString( "lib" ) + name; #endif -#ifdef WIN32 +#if defined(WIN32) QString libExt( "dll" ); +#elif defined(__APPLE__) + QString libExt( "dylib" ); #else QString libExt( "so" ); #endif - if ( ext.toLower() != QString( "so" ) && ext.toLower() != QString( "dll" ) ) + if ( ext.toLower() != QString( "so" ) && ext.toLower() != QString( "dll" ) && ext.toLower() != QString( "dylib" ) ) { if ( !name.isEmpty() && !ext.isEmpty() ) name += QString( "." ); @@ -533,14 +543,14 @@ QString Qtx::addSlash( const QString& path ) */ bool Qtx::dos2unix( const QString& absName ) { - FILE* src = ::fopen( absName.toLatin1(), "rb" ); + FILE* src = ::fopen( absName.toUtf8(), "rb" ); if ( !src ) return false; /* we'll use temporary file */ char temp[512] = { '\0' }; QString dir = Qtx::dir( absName ); - FILE* tgt = ::fopen( strcpy( temp, ::tempnam( dir.toLatin1(), "__x" ) ), "wb" ); + FILE* tgt = ::fopen( strcpy( temp, ::tempnam( dir.toUtf8(), "__x" ) ), "wb" ); if ( !tgt ) return false; @@ -651,11 +661,17 @@ QCompleter* Qtx::pathCompleter( const PathType type, const QString& filter ) /*! \brief Parse given string to retrieve environment variable. - Looks through the string for the patterns: ${name} or $(name) or %name%. + Looks through the string for the environment variable patterns. If string contains variable satisfying any pattern, the variable name is returned, start index of the variable is returned in the \a start parameter, and length of the variable is returned in the \a len parameter. + Supported environment variables definitions: + - ${name} or $name : Linux shell variable + - $(name) : GNU make substitution + - %name% : Windows shell variable + - %(name)s : Python substitutions: + \param str string being processed \param start if variable is found, this parameter contains its starting position in the \a str @@ -667,30 +683,22 @@ QString Qtx::findEnvVar( const QString& str, int& start, int& len ) QString varName; len = 0; - QRegExp rx( "(^\\$\\{|[^\\$]\\$\\{)([a-zA-Z]+[a-zA-Z0-9_]*)(\\})|(^\\$\\(|[^\\$]\\$\\()([a-zA-Z]+[a-zA-Z0-9_]*)(\\))|(^\\$|[^\\$]\\$)([a-zA-Z]+[a-zA-Z0-9_]*)|(^%|[^%]%)([a-zA-Z]+[a-zA-Z0-9_]*)(%[^%]|%$)" ); - - int pos = rx.indexIn( str, start ); - if ( pos != -1 ) + QStringList rxList; + rxList << "\\$\\{([a-zA-Z][a-zA-Z_0-9]*)\\}"; // ${name} + rxList << "\\$([a-zA-Z][a-zA-Z_0-9]*)"; // $name + rxList << "\\$\\(([a-zA-Z][a-zA-Z_0-9]*)\\)"; // $(name) + rxList << "%([a-zA-Z][a-zA-Z0-9_]*)%"; // %name% + rxList << "%\\(([a-zA-Z][a-zA-Z_0-9]*)\\)s"; // %(name)s + + for ( int i = 0; i < rxList.count() && varName.isEmpty(); ++i ) { - int i = 1; - while ( i <= rx.captureCount() && varName.isEmpty() ) + QRegExp rx(rxList[i]); + int pos = rx.indexIn( str, start ); + if ( pos != -1 ) { - QString capStr = rx.cap( i ); - if ( !capStr.contains( "%" ) && !capStr.contains( "$" ) ) - varName = capStr; - i++; - } - - if ( !varName.isEmpty() ) - { - int capIdx = i - 1; - start = rx.pos( capIdx ); - int end = start + varName.length(); - if ( capIdx > 1 && rx.cap( capIdx - 1 ).contains( QRegExp( "\\$|%" ) ) ) - start = rx.pos( capIdx - 1 ) + rx.cap( capIdx - 1 ).indexOf( QRegExp( "\\$|%" ) ); - if ( capIdx < rx.captureCount() && !rx.cap( capIdx - 1 ).isEmpty() ) - end++; - len = end - start; + varName = rx.cap( 1 ); + start = pos; + len = rx.matchedLength(); } } return varName; @@ -719,8 +727,8 @@ QString Qtx::makeEnvVarSubst( const QString& str, const SubstMode mode ) break; QString newStr; - if ( ::getenv( envName.toLatin1() ) || mode == Always ) - newStr = QString( ::getenv( envName.toLatin1() ) ); + if ( ::getenv( envName.toUtf8() ) || mode == Always ) + newStr = QString( ::getenv( envName.toUtf8() ) ); if ( newStr.isNull() ) { @@ -2095,7 +2103,18 @@ QString Qtx::qtDir( const QString& context ) return qtPath; } -#ifndef WIN32 +/*! + Creates font from string description +*/ +QFont Qtx::stringToFont( const QString& fontDescription ) +{ + QFont font; + if ( fontDescription.trimmed().isEmpty() || !font.fromString( fontDescription ) ) + font = QFont( "Courier", 11 ); + return font; +} + +#if !defined WIN32 && !defined __APPLE__ #include #include @@ -2165,6 +2184,41 @@ Qt::HANDLE Qtx::getVisual() #endif // WIN32 + +#if QT_VERSION > QT_VERSION_CHECK(5, 0, 0) +/*! + \brief Set default QSurfaceFormat for an application. + + This application property should be set before a creation of the QApplication. +*/ +void Qtx::initDefaultSurfaceFormat() +{ + // Settings from Paraview: + // This piece of code was taken from QVTKOpenGLWidget::defaultFormat() method in + // order to avoid dependency of the SALOME_Session_Server on vtk libraries + QSurfaceFormat fmt; + fmt.setRenderableType(QSurfaceFormat::OpenGL); + fmt.setVersion(3, 2); + fmt.setProfile(QSurfaceFormat::CoreProfile); + fmt.setSwapBehavior(QSurfaceFormat::DoubleBuffer); + fmt.setRedBufferSize(1); + fmt.setGreenBufferSize(1); + fmt.setBlueBufferSize(1); + fmt.setDepthBufferSize(1); + fmt.setStencilBufferSize(0); + fmt.setAlphaBufferSize(1); + fmt.setStereo(false); + fmt.setSamples(0); + + // Settings for OCCT viewer window: + fmt.setDepthBufferSize(16); + fmt.setStencilBufferSize(1); + // fmt.setProfile(QSurfaceFormat::CompatibilityProfile); + + QSurfaceFormat::setDefaultFormat(fmt); +} +#endif + /*! \class Qtx::CmdLineArgs \brief Get access to the command line arguments in the C-like manner. @@ -2201,7 +2255,7 @@ Qtx::CmdLineArgs::CmdLineArgs() Qtx::CmdLineArgs::~CmdLineArgs() { for ( int i = 0; i < myArgc; i++ ) - delete myArgv[i]; + delete[] myArgv[i]; delete[] myArgv; }