2008-03-08 13:52:38 +00:00
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Name: mimetype.h
|
2008-03-10 15:24:38 +00:00
|
|
|
// Purpose: interface of wxMimeTypesManager
|
2008-03-08 13:52:38 +00:00
|
|
|
// Author: wxWidgets team
|
|
|
|
// RCS-ID: $Id$
|
|
|
|
// Licence: wxWindows license
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
/**
|
|
|
|
@class wxMimeTypesManager
|
|
|
|
@wxheader{mimetype.h}
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
This class allows the application to retrieve the information about all known
|
|
|
|
MIME types from a system-specific location and the filename extensions to the
|
|
|
|
MIME types and vice versa. After initialization the functions
|
2008-03-08 14:43:31 +00:00
|
|
|
wxMimeTypesManager::GetFileTypeFromMimeType
|
|
|
|
and wxMimeTypesManager::GetFileTypeFromExtension
|
2008-03-08 13:52:38 +00:00
|
|
|
may be called: they will return a wxFileType object which
|
|
|
|
may be further queried for file description, icon and other attributes.
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
@b Windows: MIME type information is stored in the registry and no additional
|
|
|
|
initialization is needed.
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
@b Unix: MIME type information is stored in the files mailcap and mime.types
|
|
|
|
(system-wide) and .mailcap and .mime.types in the current user's home directory:
|
|
|
|
all of these files are searched for and loaded if found by default. However,
|
2008-03-08 14:43:31 +00:00
|
|
|
additional functions
|
|
|
|
wxMimeTypesManager::ReadMailcap and
|
2008-03-08 13:52:38 +00:00
|
|
|
wxMimeTypesManager::ReadMimeTypes are
|
|
|
|
provided to load additional files.
|
2008-03-08 14:43:31 +00:00
|
|
|
|
|
|
|
If GNOME or KDE desktop environment is installed, then wxMimeTypesManager
|
2008-03-08 13:52:38 +00:00
|
|
|
gathers MIME information from respective files (e.g. .kdelnk files under KDE).
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-30 23:34:30 +00:00
|
|
|
@note Currently, wxMimeTypesManager is limited to reading MIME type information
|
2008-03-08 13:52:38 +00:00
|
|
|
but it will support modifying it as well in future versions.
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
@library{wxbase}
|
|
|
|
@category{misc}
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-10 15:24:38 +00:00
|
|
|
@see wxFileType
|
2008-03-08 13:52:38 +00:00
|
|
|
*/
|
2008-03-08 14:43:31 +00:00
|
|
|
class wxMimeTypesManager
|
2008-03-08 13:52:38 +00:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
/**
|
|
|
|
Constructor puts the object in the "working" state, no additional initialization
|
|
|
|
are needed - but @ref init() ReadXXX may be used to load
|
|
|
|
additional mailcap/mime.types files.
|
|
|
|
*/
|
|
|
|
wxMimeTypesManager();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Destructor is not virtual, so this class should not be derived from.
|
|
|
|
*/
|
|
|
|
~wxMimeTypesManager();
|
|
|
|
|
|
|
|
/**
|
|
|
|
This function may be used to provide hard-wired fallbacks for the MIME types
|
|
|
|
and extensions that might not be present in the system MIME database.
|
|
|
|
Please see the typetest sample for an example of using it.
|
|
|
|
*/
|
2008-03-09 12:33:59 +00:00
|
|
|
void AddFallbacks(const wxFileTypeInfo* fallbacks);
|
2008-03-08 13:52:38 +00:00
|
|
|
|
|
|
|
/**
|
2008-03-30 23:34:30 +00:00
|
|
|
@note You won't normally need to use more than one wxMimeTypesManager object in a
|
2008-03-08 13:52:38 +00:00
|
|
|
program.
|
|
|
|
@ref ctor() wxMimeTypesManager
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
@ref dtor() ~wxMimeTypesManager
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
Gather information about the files with given extension and return the
|
|
|
|
corresponding wxFileType object or @NULL if the extension
|
|
|
|
is unknown.
|
2008-03-09 12:33:59 +00:00
|
|
|
The @a extension parameter may have, or not, the leading dot, if it has it,
|
2008-03-08 13:52:38 +00:00
|
|
|
it is stripped automatically. It must not however be empty.
|
|
|
|
*/
|
|
|
|
wxFileType* GetFileTypeFromExtension(const wxString& extension);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Gather information about the files with given MIME type and return the
|
|
|
|
corresponding wxFileType object or @NULL if the MIME type
|
|
|
|
is unknown.
|
|
|
|
*/
|
|
|
|
wxFileType* GetFileTypeFromMimeType(const wxString& mimeType);
|
|
|
|
|
|
|
|
/**
|
|
|
|
All of these functions are static (i.e. don't need a wxMimeTypesManager object
|
|
|
|
to call them) and provide some useful operations for string representations of
|
|
|
|
MIME types. Their usage is recommended instead of directly working with MIME
|
|
|
|
types using wxString functions.
|
|
|
|
IsOfType()
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@b Unix: These functions may be used to load additional files (except for the
|
|
|
|
default ones which are loaded automatically) containing MIME
|
|
|
|
information in either mailcap(5) or mime.types(5) format.
|
|
|
|
ReadMailcap()
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
ReadMimeTypes()
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
AddFallbacks()
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2008-03-09 12:33:59 +00:00
|
|
|
This function returns @true if either the given @a mimeType is exactly the
|
|
|
|
same as @a wildcard or if it has the same category and the subtype of
|
|
|
|
@a wildcard is '*'. Note that the '*' wildcard is not allowed in
|
|
|
|
@a mimeType itself.
|
2008-03-08 13:52:38 +00:00
|
|
|
The comparison don by this function is case insensitive so it is not
|
|
|
|
necessary to convert the strings to the same case before calling it.
|
|
|
|
*/
|
|
|
|
bool IsOfType(const wxString& mimeType, const wxString& wildcard);
|
|
|
|
|
|
|
|
/**
|
|
|
|
These functions are the heart of this class: they allow to find a @ref
|
|
|
|
overview_wxfiletype "file type" object
|
|
|
|
from either file extension or MIME type.
|
|
|
|
If the function is successful, it returns a pointer to the wxFileType object
|
|
|
|
which @b must be deleted by the caller, otherwise @NULL will be returned.
|
|
|
|
GetFileTypeFromMimeType()
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
GetFileTypeFromExtension()
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
Load additional file containing information about MIME types and associated
|
|
|
|
information in mailcap format. See metamail(1) and mailcap(5) for more
|
|
|
|
information.
|
2008-03-09 12:33:59 +00:00
|
|
|
@a fallback parameter may be used to load additional mailcap files without
|
2008-03-08 13:52:38 +00:00
|
|
|
overriding the settings found in the standard files: normally, entries from
|
|
|
|
files loaded with ReadMailcap will override the entries from files loaded
|
|
|
|
previously (and the standard ones are loaded in the very beginning), but this
|
|
|
|
will not happen if this parameter is set to @true (default is @false).
|
|
|
|
The return value is @true if there were no errors in the file or @false
|
|
|
|
otherwise.
|
|
|
|
*/
|
2008-03-09 12:33:59 +00:00
|
|
|
bool ReadMailcap(const wxString& filename, bool fallback = false);
|
2008-03-08 13:52:38 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
Load additional file containing information about MIME types and associated
|
|
|
|
information in mime.types file format. See metamail(1) and mailcap(5) for more
|
|
|
|
information.
|
|
|
|
The return value is @true if there were no errors in the file or @false
|
|
|
|
otherwise.
|
|
|
|
*/
|
|
|
|
bool ReadMimeTypes(const wxString& filename);
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2008-03-10 15:24:38 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
/**
|
|
|
|
@class wxFileType
|
|
|
|
@wxheader{mimetype.h}
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
This class holds information about a given @e file type. File type is the same
|
|
|
|
as
|
|
|
|
MIME type under Unix, but under Windows it corresponds more to an extension than
|
|
|
|
to MIME type (in fact, several extensions may correspond to a file type). This
|
|
|
|
object may be created in several different ways: the program might know the file
|
|
|
|
extension and wish to find out the corresponding MIME type or, conversely, it
|
|
|
|
might want to find the right extension for the file to which it writes the
|
|
|
|
contents of given MIME type. Depending on how it was created some fields may be
|
|
|
|
unknown so the return value of all the accessors @b must be checked: @false
|
|
|
|
will be returned if the corresponding information couldn't be found.
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
The objects of this class are never created by the application code but are
|
2008-03-08 14:43:31 +00:00
|
|
|
returned by wxMimeTypesManager::GetFileTypeFromMimeType and
|
2008-03-08 13:52:38 +00:00
|
|
|
wxMimeTypesManager::GetFileTypeFromExtension methods.
|
|
|
|
But it is your responsibility to delete the returned pointer when you're done
|
|
|
|
with it!
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
A brief reminder about what the MIME types are (see the RFC 1341 for more
|
|
|
|
information): basically, it is just a pair category/type (for example,
|
|
|
|
"text/plain") where the category is a basic indication of what a file is.
|
|
|
|
Examples of categories are "application", "image", "text", "binary", and
|
|
|
|
type is a precise definition of the document format: "plain" in the example
|
|
|
|
above means just ASCII text without any formatting, while "text/html" is the
|
|
|
|
HTML document source.
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
A MIME type may have one or more associated extensions: "text/plain" will
|
|
|
|
typically correspond to the extension ".txt", but may as well be associated with
|
|
|
|
".ini" or ".conf".
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
@library{wxbase}
|
|
|
|
@category{FIXME}
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-10 15:24:38 +00:00
|
|
|
@see wxMimeTypesManager
|
2008-03-08 13:52:38 +00:00
|
|
|
*/
|
2008-03-08 14:43:31 +00:00
|
|
|
class wxFileType
|
2008-03-08 13:52:38 +00:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
/**
|
|
|
|
The default constructor is private because you should never create objects of
|
|
|
|
this type: they are only returned by wxMimeTypesManager methods.
|
|
|
|
*/
|
|
|
|
wxFileType();
|
|
|
|
|
|
|
|
/**
|
|
|
|
The destructor of this class is not virtual, so it should not be derived from.
|
|
|
|
*/
|
|
|
|
~wxFileType();
|
|
|
|
|
|
|
|
/**
|
|
|
|
This function is primarily intended for GetOpenCommand and GetPrintCommand
|
|
|
|
usage but may be also used by the application directly if, for example, you want
|
|
|
|
to use some non-default command to open the file.
|
|
|
|
The function replaces all occurrences of
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
format specification
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
with
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
%s
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
the full file name
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
%t
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
the MIME type
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
%{param}
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
the value of the parameter @e param
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
using the MessageParameters object you pass to it.
|
|
|
|
If there is no '%s' in the command string (and the string is not empty), it is
|
|
|
|
assumed that the command reads the data on stdin and so the effect is the same
|
|
|
|
as " %s" were appended to the string.
|
|
|
|
Unlike all other functions of this class, there is no error return for this
|
|
|
|
function.
|
|
|
|
*/
|
|
|
|
static wxString ExpandCommand(const wxString& command,
|
|
|
|
MessageParameters& params);
|
|
|
|
|
|
|
|
/**
|
2008-03-09 12:33:59 +00:00
|
|
|
If the function returns @true, the string pointed to by @a desc is filled
|
2008-03-08 13:52:38 +00:00
|
|
|
with a brief description for this file type: for example, "text document" for
|
|
|
|
the "text/plain" MIME type.
|
|
|
|
*/
|
|
|
|
bool GetDescription(wxString* desc);
|
|
|
|
|
|
|
|
/**
|
2008-03-09 12:33:59 +00:00
|
|
|
If the function returns @true, the array @a extensions is filled
|
2008-03-08 13:52:38 +00:00
|
|
|
with all extensions associated with this file type: for example, it may
|
|
|
|
contain the following two elements for the MIME type "text/html" (notice the
|
|
|
|
absence of the leading dot): "html" and "htm".
|
|
|
|
@b Windows: This function is currently not implemented: there is no
|
|
|
|
(efficient) way to retrieve associated extensions from the given MIME type on
|
|
|
|
this platform, so it will only return @true if the wxFileType object was
|
|
|
|
created
|
2008-03-08 14:43:31 +00:00
|
|
|
by wxMimeTypesManager::GetFileTypeFromExtension
|
2008-03-08 13:52:38 +00:00
|
|
|
function in the first place.
|
|
|
|
*/
|
|
|
|
bool GetExtensions(wxArrayString& extensions);
|
|
|
|
|
|
|
|
/**
|
|
|
|
If the function returns @true, the @c iconLoc is filled with the
|
|
|
|
location of the icon for this MIME type. A wxIcon may be
|
2008-03-09 12:33:59 +00:00
|
|
|
created from @a iconLoc later.
|
2008-03-08 13:52:38 +00:00
|
|
|
@b Windows: The function returns the icon shown by Explorer for the files of
|
|
|
|
the specified type.
|
|
|
|
@b Mac: This function is not implemented and always returns @false.
|
|
|
|
@b Unix: MIME manager gathers information about icons from GNOME
|
|
|
|
and KDE settings and thus GetIcon's success depends on availability
|
|
|
|
of these desktop environments.
|
|
|
|
*/
|
2008-03-09 12:33:59 +00:00
|
|
|
bool GetIcon(wxIconLocation* iconLoc);
|
2008-03-08 13:52:38 +00:00
|
|
|
|
|
|
|
/**
|
2008-03-09 12:33:59 +00:00
|
|
|
If the function returns @true, the string pointed to by @a mimeType is filled
|
2008-03-08 13:52:38 +00:00
|
|
|
with full MIME type specification for this file type: for example, "text/plain".
|
|
|
|
*/
|
|
|
|
bool GetMimeType(wxString* mimeType);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Same as GetMimeType() but returns array of MIME
|
|
|
|
types. This array will contain only one item in most cases but sometimes,
|
|
|
|
notably under Unix with KDE, may contain more MIME types. This happens when
|
|
|
|
one file extension is mapped to different MIME types by KDE, mailcap and
|
|
|
|
mime.types.
|
|
|
|
*/
|
|
|
|
bool GetMimeType(wxArrayString& mimeTypes);
|
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
With the first version of this method, if the @true is returned, the
|
2008-03-09 12:33:59 +00:00
|
|
|
string pointed to by @a command is filled with the command which must be
|
2008-03-10 15:24:38 +00:00
|
|
|
executed (see wxExecute()) in order to open the file of the
|
2008-03-08 13:52:38 +00:00
|
|
|
given type. In this case, the name of the file as well as any other parameters
|
2008-03-08 14:43:31 +00:00
|
|
|
is retrieved from MessageParameters()
|
2008-03-08 13:52:38 +00:00
|
|
|
class.
|
|
|
|
In the second case, only the filename is specified and the command to be used
|
|
|
|
to open this kind of file is returned directly. An empty string is returned to
|
|
|
|
indicate that an error occurred (typically meaning that there is no standard way
|
|
|
|
to open this kind of files).
|
|
|
|
*/
|
|
|
|
bool GetOpenCommand(wxString* command,
|
|
|
|
MessageParameters& params);
|
2008-03-08 14:43:31 +00:00
|
|
|
wxString GetOpenCommand(const wxString& filename);
|
2008-03-08 13:52:38 +00:00
|
|
|
//@}
|
|
|
|
|
|
|
|
/**
|
2008-03-09 12:33:59 +00:00
|
|
|
If the function returns @true, the string pointed to by @a command is filled
|
2008-03-10 15:24:38 +00:00
|
|
|
with the command which must be executed (see wxExecute()) in
|
2008-03-08 13:52:38 +00:00
|
|
|
order to print the file of the given type. The name of the file is
|
|
|
|
retrieved from MessageParameters() class.
|
|
|
|
*/
|
|
|
|
bool GetPrintCommand(wxString* command,
|
|
|
|
MessageParameters& params);
|
|
|
|
|
|
|
|
/**
|
|
|
|
One of the most common usages of MIME is to encode an e-mail message. The MIME
|
|
|
|
type of the encoded message is an example of a @e message parameter. These
|
|
|
|
parameters are found in the message headers ("Content-XXX"). At the very least,
|
|
|
|
they must specify the MIME type and the version of MIME used, but almost always
|
|
|
|
they provide additional information about the message such as the original file
|
|
|
|
name or the charset (for the text documents).
|
|
|
|
These parameters may be useful to the program used to open, edit, view or print
|
|
|
|
the message, so, for example, an e-mail client program will have to pass them to
|
|
|
|
this program. Because wxFileType itself can not know about these parameters,
|
|
|
|
it uses MessageParameters class to query them. The default implementation only
|
|
|
|
requires the caller to provide the file name (always used by the program to be
|
|
|
|
called - it must know which file to open) and the MIME type and supposes that
|
|
|
|
there are no other parameters. If you wish to supply additional parameters, you
|
|
|
|
must derive your own class from MessageParameters and override GetParamValue()
|
|
|
|
function, for example:
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
Now you only need to create an object of this class and pass it to, for example,
|
|
|
|
GetOpenCommand() like this:
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
@b Windows: As only the file name is used by the program associated with the
|
|
|
|
given extension anyhow (but no other message parameters), there is no need to
|
|
|
|
ever derive from MessageParameters class for a Windows-only program.
|
|
|
|
*/
|
|
|
|
};
|
2008-03-10 15:24:38 +00:00
|
|
|
|