]> git.lyx.org Git - lyx.git/blobdiff - src/graphics/GraphicsCache.cpp
Fix comparing a pointer with a char
[lyx.git] / src / graphics / GraphicsCache.cpp
index 43743535f2504ed8b01e19db2043d01b2245eaf1..d50856389197f057675ebc910068d81ff7c34534 100644 (file)
 #include "GraphicsCacheItem.h"
 #include "GraphicsImage.h"
 
-#include "debug.h"
+#include "Format.h"
 
+#include "frontends/Application.h"
+
+#include "support/debug.h"
+#include "support/FileName.h"
 #include "support/filetools.h"
 
 #include <map>
 
-using std::string;
-
+using namespace std;
+using namespace lyx::support;
 
 namespace lyx {
 
-using support::FileName;
-
 namespace graphics {
 
 /** The cache contains one item per file, so use a map to find the
  *  cache item quickly by filename.
  */
-typedef std::map<FileName, Cache::ItemPtr> CacheType;
+typedef map<FileName, Cache::ItemPtr> CacheType;
 
 class Cache::Impl {
 public:
@@ -56,12 +58,49 @@ Cache::Cache()
 
 
 Cache::~Cache()
-{}
+{
+       delete pimpl_;
+}
 
 
-std::vector<string> Cache::loadableFormats() const
+vector<string> const & Cache::loadableFormats() const
 {
-       return Image::loadableFormats();
+       static vector<string> fmts;
+
+       if (!fmts.empty())
+               return fmts;
+
+       // The formats recognised by LyX
+       Formats::const_iterator begin = formats.begin();
+       Formats::const_iterator end   = formats.end();
+
+       // The formats natively loadable.
+       vector<string> nformat = frontend::loadableImageFormats();
+       
+       vector<string>::const_iterator it = nformat.begin();
+       for (; it != nformat.end(); ++it) {
+               for (Formats::const_iterator fit = begin; fit != end; ++fit) {
+                       if (fit->extension() == *it) {
+                               fmts.push_back(fit->name());
+                               break;
+                       }
+               }
+       }
+
+       if (lyxerr.debugging()) {
+               LYXERR(Debug::GRAPHICS, "LyX recognises the following image formats:");
+
+               vector<string>::const_iterator fbegin = fmts.begin();
+               vector<string>::const_iterator fend = fmts.end();
+               for (vector<string>::const_iterator fit = fbegin; fit != fend; ++fit) {
+                       if (fit != fbegin)
+                               LYXERR(Debug::GRAPHICS, ", ");
+                       LYXERR(Debug::GRAPHICS, *fit);
+               }
+               LYXERR(Debug::GRAPHICS, '\n');
+       }
+
+       return fmts;
 }