]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
MTN: Realtive mode was added to QtxPathEdit
authorsbh <sbh@opencascade.com>
Wed, 12 Sep 2012 11:11:30 +0000 (11:11 +0000)
committersbh <sbh@opencascade.com>
Wed, 12 Sep 2012 11:11:30 +0000 (11:11 +0000)
src/Qtx/Qtx.h
src/Qtx/QtxPathEdit.cxx
src/Qtx/QtxPathEdit.h

index 907cb5afad0a89dee304443669203a0004871de2..3291b8178872cd0389d335f7a425c311a079c5da 100755 (executable)
@@ -156,6 +156,8 @@ public:
   static QString     dir( const QString&, const bool = true );
   static QString     file( const QString&, const bool = true );
   static QString     extension( const QString&, const bool = false );
+  static QString     relativePath( const QString&, const QString& );
+  static QString     absolutePath( const QString&, const QString& );
 
   static QString     library( const QString& );
 
index c524cbbe17b51b81d4d71f147c64643787a69b99..8e06601f89b03e11651193f7e70ac5c099028463 100644 (file)
@@ -196,6 +196,41 @@ void QtxPathEdit::setValidator( QValidator* v )
   lineEdit()->setValidator( v );
 }
 
+/*!
+  \brief Set base path. If thePath is not empty the editor
+  becomes relative path editor.
+  \param thePath the base path. If thePath is not empty the editor become
+  relative path editor. If thePath is empty the editor become absolute path
+  editor
+*/
+void QtxPathEdit::setBasePath( const QString& theBasePath )
+{
+  if( myBasePath.isEmpty() && !theBasePath.isEmpty() ){
+//Switch to relative path editor
+    QString aNewPath = Qtx::relativePath( theBasePath, myPath->text() );
+    myPath->setText( aNewPath );
+  }
+  if( !myBasePath.isEmpty() && theBasePath.isEmpty() ){
+//Switch to absolute path editor
+    QString aNewPath = Qtx::relativePath( theBasePath, myPath->text() );
+    myPath->setText( aNewPath );
+  }
+  if( !myBasePath.isEmpty() && !theBasePath.isEmpty() ){
+    QString anAbsPath = Qtx::absolutePath( myBasePath, myPath->text() );
+    QString aNewPath = Qtx::relativePath( theBasePath, anAbsPath );
+    myPath->setText( aNewPath );
+  }
+  myBasePath = theBasePath;
+}
+
+/*!
+  \brief Return base path. 
+ */
+QString QtxPathEdit::basePath() const
+{
+  return myBasePath;
+}
+
 /*!
   \brief Called when user clicks "Browse" button.
 
@@ -206,8 +241,12 @@ void QtxPathEdit::setValidator( QValidator* v )
 */
 void QtxPathEdit::onBrowse( bool /*on*/ )
 {
+  emit beforeBrowse();
   QString path;
-  QString initial = QFileInfo( myPath->text() ).path();
+  QString initial = myPath->text();
+  if( !myBasePath.isEmpty()  )
+    initial = Qtx::absolutePath( myBasePath, initial );
+  initial = QFileInfo( initial ).path();
   switch ( pathType() )
   {
   case Qtx::PT_OpenFile:
@@ -222,7 +261,10 @@ void QtxPathEdit::onBrowse( bool /*on*/ )
   }
 
   if ( !path.isEmpty() ) {
-    QString txt = QDir::convertSeparators( path );
+    QString txt = path;
+    if( !myBasePath.isEmpty()  )
+      txt = Qtx::relativePath(myBasePath, path );
+    txt = QDir::convertSeparators( txt );
     bool block = myPath->signalsBlocked();
     myPath->blockSignals( true );
     myPath->setText( txt );
index d85312ce7cfaf6d302d8421c1be26704135f2d5d..4e084573bf5dfc9fa2b0ba517e8308bae245e0bb 100644 (file)
@@ -52,10 +52,14 @@ public:
   const QValidator* validator() const;
   void              setValidator( QValidator* );
 
+  void              setBasePath( const QString& theBasePath );
+  QString           basePath() const;
+
 signals:
   void              returnPressed();
   void              pathChanged( const QString& );
   void              pathSelected( const QString& );
+  void              beforeBrowse();
 
 private slots:
   void              onBrowse( bool = false );
@@ -68,6 +72,7 @@ private:
   QLineEdit*        myPath;
   Qtx::PathType     myType;
   QString           myFilter;
+  QString           myBasePath;
 };
 
 #endif