]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/xforms/FormFiledialog.C
Tiny clean-ups.
[lyx.git] / src / frontends / xforms / FormFiledialog.C
index e4f3bf51b873c50690682bdf2bb20247f55c12db..3d9d5b05c4c0d608a058e826fb99f0790237c248 100644 (file)
@@ -28,6 +28,7 @@
 #include "lyx_forms.h"
 
 #include <boost/bind.hpp>
+#include <boost/regex.hpp>
 
 #include <algorithm>
 #include <map>
 # endif
 #endif
 
+using lyx::support::AbsolutePath;
+using lyx::support::AddName;
+using lyx::support::ExpandPath;
+using lyx::support::FileInfo;
+using lyx::support::getcwd;
+using lyx::support::GetEnvPath;
+using lyx::support::LyXReadLink;
+using lyx::support::MakeAbsPath;
+using lyx::support::OnlyFilename;
+using lyx::support::split;
+using lyx::support::subst;
+using lyx::support::suffixIs;
+using lyx::support::trim;
+
 using std::max;
 using std::sort;
+using std::string;
 using std::map;
 
-using namespace lyx::support;
-
 
 namespace {
 
@@ -115,7 +129,7 @@ private:
 void UserCache::add(uid_t ID) const
 {
        struct passwd const * entry = getpwuid(ID);
-       users[ID] = entry ? entry->pw_name : tostr(ID);
+       users[ID] = entry ? entry->pw_name : tostr(int(ID));
 }
 
 
@@ -148,7 +162,7 @@ string const & GroupCache::find(gid_t ID) const
 void GroupCache::add(gid_t ID) const
 {
        struct group const * entry = getgrgid(ID);
-       groups[ID] = entry ? entry->gr_name : tostr(ID);
+       groups[ID] = entry ? entry->gr_name : tostr(int(ID));
 }
 
 // local instances
@@ -184,6 +198,31 @@ int FileDialog::Private::minw_ = 0;
 int FileDialog::Private::minh_ = 0;
 
 
+namespace {
+
+boost::regex getRegex(string const & pat)
+{
+       // We massage the pattern a bit so that the usual
+       // shell pattern we all are used to will work.
+       // One nice thing about using a real regex is that
+       // things like "*.*[^~]" will work also.
+       // build the regex string.
+       string pattern = subst(pat, ".", "\\.");
+       pattern = subst(pattern, "*", ".*");
+
+       boost::regex reg(pattern);
+       return reg;
+}
+
+
+bool globMatch(string const & a, boost::regex const & reg)
+{
+       return boost::regex_match(a, reg);
+}
+
+} // namespace anon
+
+
 // Reread: updates dialog list to match class directory
 void FileDialog::Private::Reread()
 {
@@ -224,6 +263,8 @@ void FileDialog::Private::Reread()
        }
 
        // Parses all entries of the given subdirectory
+       boost::regex reg = getRegex(mask_);
+
        time_t curTime = time(0);
        rewinddir(dir);
        while (dirent * entry = readdir(dir)) {
@@ -307,7 +348,7 @@ void FileDialog::Private::Reread()
                    || fileInfo.isChar()
                    || fileInfo.isBlock()
                    || fileInfo.isFifo()) {
-                       if (!regexMatch(fname, mask_))
+                       if (!globMatch(fname, reg))
                                continue;
                } else if (!(isDir = fileInfo.isDir()))
                        continue;