add support for multiple extensions to wxImage handlers (closes #10570)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59461 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2009-03-09 23:13:34 +00:00
parent e225e700ef
commit ba4800d3ae
8 changed files with 46 additions and 6 deletions

View File

@@ -375,6 +375,7 @@ All:
- Added wxXmlResource::GetResourceNode(). - Added wxXmlResource::GetResourceNode().
- Optimize wxString::Replace() to use an O(N) algorithm (Kuang-che Wu). - Optimize wxString::Replace() to use an O(N) algorithm (Kuang-che Wu).
- Added support of %l format specifier to wxDateTime::ParseFormat(). - Added support of %l format specifier to wxDateTime::ParseFormat().
- wxImage handlers can now support multiple extensions (Ivan Krestinin).
All (Unix): All (Unix):

View File

@@ -108,10 +108,12 @@ public:
void SetName(const wxString& name) { m_name = name; } void SetName(const wxString& name) { m_name = name; }
void SetExtension(const wxString& ext) { m_extension = ext; } void SetExtension(const wxString& ext) { m_extension = ext; }
void SetAlExtensions(const wxArrayString& exts) { m_altExtensions = exts; }
void SetType(wxBitmapType type) { m_type = type; } void SetType(wxBitmapType type) { m_type = type; }
void SetMimeType(const wxString& type) { m_mime = type; } void SetMimeType(const wxString& type) { m_mime = type; }
const wxString& GetName() const { return m_name; } const wxString& GetName() const { return m_name; }
const wxString& GetExtension() const { return m_extension; } const wxString& GetExtension() const { return m_extension; }
const wxArrayString& GetAltExtensions() const { return m_altExtensions; }
wxBitmapType GetType() const { return m_type; } wxBitmapType GetType() const { return m_type; }
const wxString& GetMimeType() const { return m_mime; } const wxString& GetMimeType() const { return m_mime; }
@@ -138,6 +140,7 @@ protected:
wxString m_name; wxString m_name;
wxString m_extension; wxString m_extension;
wxArrayString m_altExtensions;
wxString m_mime; wxString m_mime;
wxBitmapType m_type; wxBitmapType m_type;

View File

@@ -27,6 +27,8 @@ public:
{ {
m_name = wxT("JPEG file"); m_name = wxT("JPEG file");
m_extension = wxT("jpg"); m_extension = wxT("jpg");
m_altExtensions.Add(wxT("jpeg"));
m_altExtensions.Add(wxT("jpe"));
m_type = wxBITMAP_TYPE_JPEG; m_type = wxBITMAP_TYPE_JPEG;
m_mime = wxT("image/jpeg"); m_mime = wxT("image/jpeg");
} }

View File

@@ -24,6 +24,9 @@ public:
{ {
m_name = wxT("PNM file"); m_name = wxT("PNM file");
m_extension = wxT("pnm"); m_extension = wxT("pnm");
m_altExtensions.Add(wxT("ppm"));
m_altExtensions.Add(wxT("pgm"));
m_altExtensions.Add(wxT("pbm"));
m_type = wxBITMAP_TYPE_PNM; m_type = wxBITMAP_TYPE_PNM;
m_mime = wxT("image/pnm"); m_mime = wxT("image/pnm");
} }

View File

@@ -25,6 +25,7 @@ public:
{ {
m_name = wxT("TGA file"); m_name = wxT("TGA file");
m_extension = wxT("tga"); m_extension = wxT("tga");
m_altExtensions.Add(wxT("tpic"));
m_type = wxBITMAP_TYPE_TGA; m_type = wxBITMAP_TYPE_TGA;
m_mime = wxT("image/tga"); m_mime = wxT("image/tga");
} }

View File

@@ -84,10 +84,21 @@ public:
virtual ~wxImageHandler(); virtual ~wxImageHandler();
/** /**
Gets the file extension associated with this handler. Gets the preferred file extension associated with this handler.
@see GetAltExtensions()
*/ */
const wxString& GetExtension() const; const wxString& GetExtension() const;
/**
Returns the other file extensions associated with this handler.
The preferred extension for this handler is returned by GetExtension().
@since 2.9.0
*/
const wxArrayString& GetAltExtensions() const;
/** /**
If the image file contains more than one image and the image handler is capable If the image file contains more than one image and the image handler is capable
of retrieving these individually, this function will return the number of of retrieving these individually, this function will return the number of
@@ -160,13 +171,27 @@ public:
bool verbose = true); bool verbose = true);
/** /**
Sets the handler extension. Sets the preferred file extension associated with this handler.
@param extension @param extension
Handler extension. File extension without leading dot.
@see SetAltExtensions()
*/ */
void SetExtension(const wxString& extension); void SetExtension(const wxString& extension);
/**
Sets the alternative file extensions associated with this handler.
@param extensions
Array of file extensions.
@see SetExtension()
@since 2.9.0
*/
void SetAltExtensions(const wxArrayString& extensions);
/** /**
Sets the handler MIME type. Sets the handler MIME type.

View File

@@ -2438,9 +2438,11 @@ wxImageHandler *wxImage::FindHandler( const wxString& extension, wxBitmapType bi
while (node) while (node)
{ {
wxImageHandler *handler = (wxImageHandler*)node->GetData(); wxImageHandler *handler = (wxImageHandler*)node->GetData();
if ( (handler->GetExtension().Cmp(extension) == 0) && if ((bitmapType == wxBITMAP_TYPE_ANY) || (handler->GetType() == bitmapType))
( (bitmapType == wxBITMAP_TYPE_ANY) || (handler->GetType() == bitmapType)) )
{ {
if (handler->GetExtension() == extension)
return handler;
if (handler->GetAltExtensions().Index(extension, false) != wxNOT_FOUND)
return handler; return handler;
} }
node = node->GetNext(); node = node->GetNext();
@@ -2503,6 +2505,8 @@ wxString wxImage::GetImageExtWildcard()
{ {
wxImageHandler* Handler = (wxImageHandler*)Node->GetData(); wxImageHandler* Handler = (wxImageHandler*)Node->GetData();
fmts += wxT("*.") + Handler->GetExtension(); fmts += wxT("*.") + Handler->GetExtension();
for (size_t i = 0; i < Handler->GetAltExtensions().size(); i++)
fmts += wxT(";*.") + Handler->GetAltExtensions()[i];
Node = Node->GetNext(); Node = Node->GetNext();
if ( Node ) fmts += wxT(";"); if ( Node ) fmts += wxT(";");
} }

View File

@@ -108,6 +108,7 @@ wxTIFFHandler::wxTIFFHandler()
{ {
m_name = wxT("TIFF file"); m_name = wxT("TIFF file");
m_extension = wxT("tif"); m_extension = wxT("tif");
m_altExtensions.Add(wxT("tiff"));
m_type = wxBITMAP_TYPE_TIF; m_type = wxBITMAP_TYPE_TIF;
m_mime = wxT("image/tiff"); m_mime = wxT("image/tiff");
TIFFSetWarningHandler((TIFFErrorHandler) TIFFwxWarningHandler); TIFFSetWarningHandler((TIFFErrorHandler) TIFFwxWarningHandler);