mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-24 13:48:59 +00:00
Fix bug #7540. Patch based upon one added to bug report by Max Funk.
Basically, patch adds routine that calcuates relative paths to parent rather than child directories. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_2_0_X@38917 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
beae2d3b55
commit
387ad00b61
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -1781,7 +1781,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);
|
||||
|
||||
@ -1837,7 +1837,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())
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
@ -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);
|
||||
|
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user