Changed to use the Converter class instead of hardcoding ImageMagick.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@1874 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Baruch Even 2001-04-02 19:56:48 +00:00
parent 0a736a817a
commit 2f20425459
3 changed files with 61 additions and 24 deletions

View File

@ -1,3 +1,8 @@
2001-04-02 Baruch Even <baruch@lyx.org>
* GraphicsCacheItem.[Ch]: Changed to used the Converter class instead
of hard coding ImageMagick.
2001-03-10 Baruch Even <baruch@lyx.org> 2001-03-10 Baruch Even <baruch@lyx.org>
* GraphicsCache.C: Style change from (*it).field to it->field * GraphicsCache.C: Style change from (*it).field to it->field

View File

@ -19,11 +19,13 @@
#include "graphics/GraphicsCacheItem.h" #include "graphics/GraphicsCacheItem.h"
#include "frontends/support/LyXImage.h" #include "frontends/support/LyXImage.h"
#include "graphics/ImageLoaderXPM.h" #include "graphics/ImageLoaderXPM.h"
#include "converter.h"
#include "support/filetools.h" #include "support/filetools.h"
#include "support/lyxlib.h" #include "support/lyxlib.h"
#include "support/syscall.h" #include "lyx_gui_misc.h"
#include "debug.h" #include "debug.h"
#include "support/LAssert.h"
#include "gettext.h"
using std::endl; using std::endl;
@ -32,9 +34,12 @@ GraphicsCacheItem::GraphicsCacheItem(string const & filename)
{ {
filename_ = filename; filename_ = filename;
renderXPM(filename); bool success = convertImage(filename);
// For now we do it synchronously // For now we do it synchronously
imageConverted(0); if (success)
imageConverted(0);
else
imageStatus_ = ErrorConverting;
} }
@ -62,37 +67,64 @@ GraphicsCacheItem::imageConverted(int retval)
return; return;
} }
// Do the actual image loading from XPM to memory. // Do the actual image loading from file to memory.
loadXPMImage(); loadImage();
} }
bool namespace {
GraphicsCacheItem::renderXPM(string const & filename) string const findTargetFormat(string const & from)
{ {
// Create the command to do the conversion, this depends on ImageMagicks typedef ImageLoader::FormatList FormatList;
// convert program. FormatList formats = ImageLoaderXPM().loadableFormats();
string command = "convert "; Assert(formats.size() > 0); // There must be a format to load from.
command += filename;
command += " XPM:"; FormatList::const_iterator iter = formats.begin();
FormatList::const_iterator end = formats.end();
for (; iter != end; ++iter) {
if (converters.IsReachable(from, *iter))
break;
}
if (iter == end) {
// We do not know how to convert the image to something loadable.
lyxerr << "ERROR: Do not know how to convert image." << std::endl;
string const first(_("Cannot convert image to display format"));
string const second1(_("Need converter from "));
string const second2(_(" to "));
string const second(second1 + from + second2 + formats[0]);
WriteAlert(first, second);
return string();
}
return (*iter);
}
} // anon namespace
bool
GraphicsCacheItem::convertImage(string const & filename)
{
string const from = GetExtension(filename);
string const to = findTargetFormat(from);
if (to.empty())
return false;
// Take only the filename part of the file, without path or extension. // Take only the filename part of the file, without path or extension.
string temp = OnlyFilename(filename); string temp = OnlyFilename(filename);
temp = ChangeExtension(filename, string()); temp = ChangeExtension(filename, string());
// Add some stuff to have it a unique temp file. // Add some stuff to have it a unique temp file.
// This tempfile is deleted in loadXPMImage after it is loaded to memory. // This tempfile is deleted in loadImage after it is loaded to memory.
tempfile = lyx::tempName(string(), temp); tempfile = lyx::tempName(string(), temp);
// Remove the temp file, we only want the name... // Remove the temp file, we only want the name...
lyx::unlink(tempfile); lyx::unlink(tempfile);
tempfile = ChangeExtension(tempfile, ".xpm");
command += tempfile; converters.Convert(0, filename, tempfile, from, to);
// Run the convertor.
lyxerr << "Launching convert to xpm, command=" << command << endl;
Systemcalls syscall;
syscall.startscript(Systemcalls::Wait, command);
return true; return true;
} }
@ -101,7 +133,7 @@ GraphicsCacheItem::renderXPM(string const & filename)
// This function gets called from the callback after the image has been // This function gets called from the callback after the image has been
// converted successfully. // converted successfully.
void void
GraphicsCacheItem::loadXPMImage() GraphicsCacheItem::loadImage()
{ {
lyxerr << "Loading XPM Image... "; lyxerr << "Loading XPM Image... ";

View File

@ -61,8 +61,8 @@ public:
void imageConverted(int retval); void imageConverted(int retval);
private: private:
bool renderXPM(string const & filename); bool convertImage(string const & filename);
void loadXPMImage(); void loadImage();
/** The filename we refer too. /** The filename we refer too.
This is used when removing ourselves from the cache. This is used when removing ourselves from the cache.