]> git.lyx.org Git - features.git/commitdiff
Fix bug #7540. Patch based upon one added to bug report by Max Funk.
authorRichard Heck <rgheck@comcast.net>
Wed, 1 Jun 2011 13:18:08 +0000 (13:18 +0000)
committerRichard Heck <rgheck@comcast.net>
Wed, 1 Jun 2011 13:18:08 +0000 (13:18 +0000)
Basically, patch adds routine that calcuates relative paths to parent
rather than child directories.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@38915 a592a061-630c-0410-9148-cb99ea01b6c8

src/frontends/qt4/GuiBibtex.cpp
src/frontends/qt4/GuiCompare.cpp
src/frontends/qt4/GuiDocument.cpp
src/frontends/qt4/GuiExternal.cpp
src/frontends/qt4/GuiGraphics.cpp
src/frontends/qt4/GuiInclude.cpp
src/frontends/qt4/GuiPrefs.cpp
src/frontends/qt4/GuiPrint.cpp
src/frontends/qt4/qt_helpers.h

index 29a86aefca7b93515d30cfe314f89dcc750ff5f9..e6a30ae9a40972dc12083b45a7ecf16785a25099 100644 (file)
@@ -435,7 +435,7 @@ QString GuiBibtex::browseBib(QString const & in_name) const
        QString const label1 = qt_("Documents|#o#O");
        QString const dir1 = toqstr(lyxrc.document_path);
        QStringList const filter(qt_("BibTeX Databases (*.bib)"));
-       return browseRelFile(in_name, bufferFilePath(),
+       return browseRelToParent(in_name, bufferFilePath(),
                qt_("Select a BibTeX database to add"), filter, false, label1, dir1);
 }
 
@@ -445,7 +445,7 @@ QString GuiBibtex::browseBst(QString const & in_name) const
        QString const label1 = qt_("Documents|#o#O");
        QString const dir1 = toqstr(lyxrc.document_path);
        QStringList const filter(qt_("BibTeX Styles (*.bst)"));
-       return browseRelFile(in_name, bufferFilePath(),
+       return browseRelToParent(in_name, bufferFilePath(),
                qt_("Select a BibTeX style"), filter, false, label1, dir1);
 }
 
index 3b97aa1106827381d17920f40993e7aaf927872c..83ffd5ace4240800f6ec039db3778a551a496384 100644 (file)
@@ -158,11 +158,11 @@ QString GuiCompare::browse(QString const & in_name) const
        QString filename;
        if (lyxview().documentBufferView()) {
                QString path = bufferFilePath();
-               filename = browseRelFile(in_name, path, title, filters, false, 
+               filename = browseRelToParent(in_name, path, title, filters, false,
                        qt_("Documents|#o#O"), toqstr(lyxrc.document_path));
        } else {
                QString path = toqstr(lyxrc.document_path);
-               QString rel_filename = browseRelFile(in_name, path, title, filters, false, 
+               QString rel_filename = browseRelToParent(in_name, path, title, filters, false,
                        qt_("Documents|#o#O"), toqstr(lyxrc.document_path));
                filename = makeAbsPath(rel_filename, path);
        }
index 98b5bf88dc512427b3d760f4e885112004025f68..5ddeb84f125557da88c00e022b30b50c2c3b7197 100644 (file)
@@ -1817,7 +1817,7 @@ void GuiDocument::browseLayout()
        QString const label1 = qt_("Layouts|#o#O");
        QString const dir1 = toqstr(lyxrc.document_path);
        QStringList const filter(qt_("LyX Layout (*.layout)"));
-       QString file = browseRelFile(QString(), bufferFilePath(),
+       QString file = browseRelToParent(QString(), bufferFilePath(),
                qt_("Local layout file"), filter, false,
                label1, dir1);
 
@@ -1873,7 +1873,7 @@ void GuiDocument::browseMaster()
        QString const old = latexModule->childDocLE->text();
        QString const docpath = toqstr(support::onlyPath(buffer().absFileName()));
        QStringList const filter(qt_("LyX Files (*.lyx)"));
-       QString file = browseRelFile(old, docpath, title, filter, false,
+       QString file = browseRelToSub(old, docpath, title, filter, false,
                qt_("Documents|#o#O"), toqstr(lyxrc.document_path));
 
        if (!file.isEmpty())
index 59916545006902939115291da44e1d4b76492738..e71504d27b34d9756d8bf45790aed0ad69c348f2 100644 (file)
@@ -639,7 +639,7 @@ QString GuiExternal::browse(QString const & input,
        QString const label1 = qt_("Documents|#o#O");
        QString const dir1 = toqstr(lyxrc.document_path);
 
-       return browseRelFile(input, bufpath, title, filter, false, label1, dir1);
+       return browseRelToParent(input, bufpath, title, filter, false, label1, dir1);
 }
 
 
index 054b9bb891cb8a76eeb332471ae948c155923422..465ffcea34406d8d5e0804b8962e1fe3838e9526 100644 (file)
@@ -793,7 +793,7 @@ QString GuiGraphics::browse(QString const & in_name) const
        if (!clip.isDirectory())
                clipdir = addName(package().system_support().absFileName(), "clipart");
 
-       return browseRelFile(in_name, bufferFilePath(),
+       return browseRelToParent(in_name, bufferFilePath(),
                title, fileFilters(QString()), false, 
                qt_("Clipart|#C#c"), toqstr(clipdir),
                qt_("Documents|#o#O"), toqstr(lyxrc.document_path));
index 266fa25f91d5d698c7e6bf79bbd9c02175572e46..7f5c96bd1894ac0b2a4d5dd2c2917c1209d401a9 100644 (file)
@@ -328,7 +328,7 @@ QString GuiInclude::browse(QString const & in_name, Type in_type) const
 
        QString const docpath = toqstr(support::onlyPath(buffer().absFileName()));
 
-       return browseRelFile(in_name, docpath, title, filters, false, 
+       return browseRelToParent(in_name, docpath, title, filters, false,
                qt_("Documents|#o#O"), toqstr(lyxrc.document_path));
 }
 
index fbc128e4710057758a5039a9749cc7e809fc21b5..d77893f67c25b06b8b1261c3e0c3467931370ef7 100644 (file)
@@ -90,7 +90,7 @@ namespace frontend {
 /** Launch a file dialog and return the chosen file.
        filename: a suggested filename.
        title: the title of the dialog.
-       pattern: *.ps etc.
+       filters: *.ps etc.
        dir1 = (name, dir), dir2 = (name, dir): extra buttons on the dialog.
 */
 QString browseFile(QString const & filename,
@@ -194,19 +194,18 @@ QString browseDir(QString const & pathname,
 } // namespace frontend
 
 
-QString browseRelFile(QString const & filename, QString const & refpath,
+QString browseRelToParent(QString const & filename, QString const & relpath,
        QString const & title, QStringList const & filters, bool save,
        QString const & label1, QString const & dir1,
        QString const & label2, QString const & dir2)
 {
-       QString const fname = makeAbsPath(filename, refpath);
-
+       QString const fname = makeAbsPath(filename, relpath);
 
        QString const outname =
                frontend::browseFile(fname, title, filters, save, label1, dir1, label2, dir2);
 
        QString const reloutname =
-               toqstr(makeRelPath(qstring_to_ucs4(outname), qstring_to_ucs4(refpath)));
+               toqstr(makeRelPath(qstring_to_ucs4(outname), qstring_to_ucs4(relpath)));
 
        if (reloutname.startsWith("../"))
                return outname;
@@ -215,6 +214,29 @@ QString browseRelFile(QString const & filename, QString const & refpath,
 }
 
 
+QString browseRelToSub(QString const & filename, QString const & relpath,
+       QString const & title, QStringList const & filters, bool save,
+       QString const & label1, QString const & dir1,
+       QString const & label2, QString const & dir2)
+{
+       QString const fname = makeAbsPath(filename, relpath);
+
+       QString const outname =
+               frontend::browseFile(fname, title, filters, save, label1, dir1, label2, dir2);
+
+       QString const reloutname =
+               toqstr(makeRelPath(qstring_to_ucs4(outname), qstring_to_ucs4(relpath)));
+
+       QString testname = reloutname;
+       testname.remove(QRegExp("^(\\.\\./)+"));
+       
+       if (testname.contains("/"))
+               return outname;
+       else
+               return reloutname;
+}
+
+
 
 /////////////////////////////////////////////////////////////////////
 //
index 120d1d2c980853a27a2f08299a970cdc464b2729..b0fd8718aa2233ea73d627a9b7b921a27f3eae8a 100644 (file)
@@ -84,7 +84,7 @@ void GuiPrint::change_adaptor()
 void GuiPrint::browseClicked()
 {
        QString file =
-               browseRelFile(QString(), bufferFilePath(), qt_("Print to file"),
+               browseRelToParent(QString(), bufferFilePath(), qt_("Print to file"),
                             QStringList(qt_("PostScript files (*.ps)")), true);
        if (!file.isEmpty()) {
                fileED->setText(file);
index 5c410ea08673c9b51af353b4babcfe649522c066..d7a471ca069bce8c4d2b98585afe70c49ba0ce3e 100644 (file)
@@ -84,14 +84,29 @@ support::FileName libFileSearch(QString const & dir, QString const & name,
 support::FileName imageLibFileSearch(QString & dir, QString const & name,
                                     QString const & ext = QString());
 
-/** Wrapper around browseFile which tries to provide a filename
-       relative to relpath.  If the relative path is of the form "foo.txt"
-       or "bar/foo.txt", then it is returned as relative. OTOH, if it is
-       of the form "../baz/foo.txt", an absolute path is returned. This is
-       intended to be useful for insets which encapsulate files/
+/** Wrappers around browseFile which try to provide a filename
+       relative to relpath.
+
+\param title: title for dialog
+       
+\param filters: *.ps, etc
+
+\param save: whether to save dialog info (current path, etc) for next use.
+
+The \param labelN and \param dirN arguments provide for extra buttons 
+in the dialog (e.g., "Templates" and a path to that directory).
+
+The difference between the functions concerns when we think we have a 
+relative path. 
+
+In \c browseRelToParent, we return a relative path only if it IS NOT of 
+       the form "../../foo.txt".
+
+In \c browseRelToSub, we return a relative path only if it IS of the
+ form "../../foo.txt".
 */
-QString browseRelFile(QString const & filename,
-       QString const & refpath,
+QString browseRelToParent(QString const & filename,
+       QString const & relpath,
        QString const & title,
        QStringList const & filters,
        bool save = false,
@@ -100,6 +115,15 @@ QString browseRelFile(QString const & filename,
        QString const & label2 = QString(),
        QString const & dir2 = QString());
 
+QString browseRelToSub(QString const & filename,
+       QString const & relpath,
+       QString const & title,
+       QStringList const & filters,
+       bool save = false,
+       QString const & label1 = QString(),
+       QString const & dir1 = QString(),
+       QString const & label2 = QString(),
+       QString const & dir2 = QString());
 
 /** Build filelists of all availabe bst/cls/sty-files. Done through
 *  kpsewhich and an external script, saved in *Files.lst.