Author: tommaso
Date: Fri Oct 7 10:21:31 2011
New Revision: 39816
URL: http://www.lyx.org/trac/changeset/39816
Log:
Presenting prettyname of formats in filedialog filter dropdown box (instead of
shortnames), sorted.
Modified:
lyx-devel/trunk/src/Format.cpp
lyx-devel/trunk/src/Format.h
lyx-devel/trunk/src/frontends/qt4/GuiView.cpp
Modified: lyx-devel/trunk/src/Format.cpp
==============================================================================
--- lyx-devel/trunk/src/Format.cpp Fri Oct 7 09:59:50 2011 (r39815)
+++ lyx-devel/trunk/src/Format.cpp Fri Oct 7 10:21:31 2011 (r39816)
@@ -77,6 +77,19 @@
string extension_;
};
+
+class FormatPrettyNameEqual : public unary_function<Format, bool> {
+public:
+ FormatPrettyNameEqual(string const & prettyname)
+ : prettyname_(prettyname) {}
+ bool operator()(Format const & f) const
+ {
+ return f.prettyname() == prettyname_;
+ }
+private:
+ string prettyname_;
+};
+
} //namespace anon
@@ -192,6 +205,19 @@
}
+string Formats::getFormatFromPrettyName(string const & prettyname) const
+{
+ if (!prettyname.empty()) {
+ Formats::const_iterator cit =
+ find_if(formatlist.begin(), formatlist.end(),
+ FormatPrettyNameEqual(prettyname));
+ if (cit != formats.end())
+ return cit->name();
+ }
+ return string();
+}
+
+
/// Used to store last timestamp of file and whether it is (was) zipped
struct ZippedInfo {
bool zipped;
Modified: lyx-devel/trunk/src/Format.h
==============================================================================
--- lyx-devel/trunk/src/Format.h Fri Oct 7 09:59:50 2011 (r39815)
+++ lyx-devel/trunk/src/Format.h Fri Oct 7 10:21:31 2011 (r39816)
@@ -141,6 +141,8 @@
std::string getFormatFromFile(support::FileName const & filename) const;
/// Finds a format from a file extension. Returns string() if not found.
std::string getFormatFromExtension(std::string const & ext) const;
+ /// Finds a format by pretty name. Returns string() if not found.
+ std::string getFormatFromPrettyName(std::string const & prettyname)
const;
/** Returns true if the file referenced by \p filename is zipped and
** needs to be unzipped for being handled
** @note For natively zipped formats, such as dia/odg, this returns
false.
Modified: lyx-devel/trunk/src/frontends/qt4/GuiView.cpp
==============================================================================
--- lyx-devel/trunk/src/frontends/qt4/GuiView.cpp Fri Oct 7 09:59:50
2011 (r39815)
+++ lyx-devel/trunk/src/frontends/qt4/GuiView.cpp Fri Oct 7 10:21:31
2011 (r39816)
@@ -2314,10 +2314,17 @@
}
+struct PrettyNameComparator
+{
+ bool operator()(Format const *first, Format const *second) const {
+ return compare_ascii_no_case(first->prettyname(),
second->prettyname()) <= 0;
+ }
+};
+
+
bool GuiView::exportBufferAs(Buffer & b)
{
FileName fname = b.fileName();
- FileName const oldname = fname;
FileDialog dlg(qt_("Choose a filename to export the document as"));
dlg.setButton1(qt_("Documents|#o#O"), toqstr(lyxrc.document_path));
@@ -2325,9 +2332,15 @@
QStringList types;
types << "Any supported format (*.*)";
Formats::const_iterator it = formats.begin();
+ vector<Format const *> export_formats;
for (; it != formats.end(); ++it)
- if (it->documentFormat())
- types << toqstr(it->name() + " (*." + it->extension() +
")");
+ if (it->documentFormat() && it->inExportMenu())
+ export_formats.push_back(&(*it));
+ PrettyNameComparator cmp;
+ sort(export_formats.begin(), export_formats.end(), cmp);
+ vector<Format const *>::const_iterator fit = export_formats.begin();
+ for (; fit != export_formats.end(); ++fit)
+ types << toqstr((*fit)->prettyname() + " (*." +
(*fit)->extension() + ")");
QString filter;
FileDialog::Result result =
dlg.save(toqstr(fname.onlyPath().absFileName()),
@@ -2338,15 +2351,19 @@
return false;
string s = fromqstr(filter);
- size_t pos = s.find(" (");
+ size_t pos = s.find(" (*.");
LASSERT(pos != string::npos, /**/);
- string fmt_name = s.substr(0, pos);
+ string fmt_prettyname = s.substr(0, pos);
+ string fmt_name;
fname.set(fromqstr(result.second));
- if (fmt_name == "Any supported format")
+ if (fmt_prettyname == "Any supported format")
fmt_name = formats.getFormatFromExtension(fname.extension());
- LYXERR(Debug::FILES, "fmt_name=" << fmt_name << ", fname=" <<
fname.absFileName());
+ else
+ fmt_name = formats.getFormatFromPrettyName(fmt_prettyname);
+ LYXERR(Debug::FILES, "fmt_prettyname=" << fmt_prettyname
+ << ", fmt_name=" << fmt_name << ", fname=" <<
fname.absFileName());
- if (fname.empty())
+ if (fmt_name.empty() || fname.empty())
return false;
// fname is now the new Buffer location.