applied MIME patch(es) from Chris Elliott
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@9865 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -12,7 +12,6 @@
|
||||
#ifndef _MIMETYPE_IMPL_H
|
||||
#define _MIMETYPE_IMPL_H
|
||||
|
||||
|
||||
#ifdef __GNUG__
|
||||
#pragma interface "mimetype.h"
|
||||
#endif
|
||||
@@ -21,11 +20,9 @@
|
||||
|
||||
#if (wxUSE_FILE && wxUSE_TEXTFILE)
|
||||
|
||||
class MailCapEntry;
|
||||
class wxMimeTypeIconHandler;
|
||||
class wxMimeArrayString;
|
||||
|
||||
WX_DEFINE_ARRAY(wxMimeTypeIconHandler *, ArrayIconHandlers);
|
||||
WX_DEFINE_ARRAY(MailCapEntry *, ArrayTypeEntries);
|
||||
WX_DEFINE_ARRAY(wxMimeArrayString *, wxArrayTypeEntries);
|
||||
|
||||
// this is the real wxMimeTypesManager for Unix
|
||||
class WXDLLEXPORT wxMimeTypesManagerImpl
|
||||
@@ -36,7 +33,11 @@ public:
|
||||
~wxMimeTypesManagerImpl();
|
||||
|
||||
// load all data into memory - done when it is needed for the first time
|
||||
void Initialize();
|
||||
void Initialize(int mailcapStyles,
|
||||
const wxString& extraDir = wxEmptyString);
|
||||
|
||||
// and delete the data here
|
||||
void ClearData();
|
||||
|
||||
// implement containing class functions
|
||||
wxFileType *GetFileTypeFromExtension(const wxString& ext);
|
||||
@@ -61,15 +62,14 @@ public:
|
||||
|
||||
// add a new record to the user .mailcap/.mime.types files
|
||||
wxFileType *Associate(const wxFileTypeInfo& ftInfo);
|
||||
// remove association
|
||||
bool Unassociate(wxFileType *ft);
|
||||
|
||||
// accessors
|
||||
// get the string containing space separated extensions for the given
|
||||
// file type
|
||||
wxString GetExtension(size_t index) { return m_aExtensions[index]; }
|
||||
|
||||
// get the array of icon handlers
|
||||
static ArrayIconHandlers& GetIconHandlers();
|
||||
|
||||
private:
|
||||
void InitIfNeeded()
|
||||
{
|
||||
@@ -82,14 +82,70 @@ private:
|
||||
|
||||
wxArrayString m_aTypes, // MIME types
|
||||
m_aDescriptions, // descriptions (just some text)
|
||||
m_aExtensions; // space separated list of extensions
|
||||
ArrayTypeEntries m_aEntries; // commands and tests for this file type
|
||||
m_aExtensions, // space separated list of extensions
|
||||
m_aIcons; // Icon filenames
|
||||
|
||||
// verb=command pairs for this file type
|
||||
wxArrayTypeEntries m_aEntries;
|
||||
|
||||
// are we initialized?
|
||||
bool m_initialized;
|
||||
|
||||
// head of the linked list of the icon handlers
|
||||
static ArrayIconHandlers ms_iconHandlers;
|
||||
// keep track of the files we had already loaded (this is a bitwise OR of
|
||||
// wxMailcapStyle values)
|
||||
int m_mailcapStylesInited;
|
||||
|
||||
wxString GetCommand(const wxString &verb, size_t nIndex) const;
|
||||
|
||||
// read Gnome files
|
||||
void LoadGnomeDataFromKeyFile(const wxString& filename);
|
||||
void LoadGnomeMimeTypesFromMimeFile(const wxString& filename);
|
||||
void LoadGnomeMimeFilesFromDir(const wxString& dirbase);
|
||||
void GetGnomeMimeInfo(const wxString& sExtraDir);
|
||||
|
||||
// write gnome files
|
||||
bool CheckGnomeDirsExist();
|
||||
bool WriteGnomeKeyFile(int index, bool delete_index);
|
||||
bool WriteGnomeMimeFile(int index, bool delete_index);
|
||||
|
||||
// read KDE
|
||||
void LoadKDELinksForMimeSubtype(const wxString& dirbase,
|
||||
const wxString& subdir,
|
||||
const wxString& filename,
|
||||
const wxArrayString& icondirs);
|
||||
void LoadKDELinksForMimeType(const wxString& dirbase,
|
||||
const wxString& subdir,
|
||||
const wxArrayString& icondirs);
|
||||
void LoadKDELinkFilesFromDir(const wxString& dirbase,
|
||||
const wxArrayString& icondirs);
|
||||
void GetKDEMimeInfo(const wxString& sExtraDir);
|
||||
|
||||
// write KDE
|
||||
bool WriteKDEMimeFile(int index, bool delete_index);
|
||||
bool CheckKDEDirsExist(const wxString & sOK, const wxString& sTest);
|
||||
|
||||
//read write Netscape and MetaMail formats
|
||||
void GetMimeInfo (const wxString& sExtraDir);
|
||||
bool WriteToMailCap (int index, bool delete_index);
|
||||
bool WriteToMimeTypes (int index, bool delete_index);
|
||||
bool WriteToNSMimeTypes (int index, bool delete_index);
|
||||
|
||||
// functions used to do associations
|
||||
|
||||
int AddToMimeData(const wxString& strType,
|
||||
const wxString& strIcon,
|
||||
wxMimeArrayString *entry,
|
||||
const wxArrayString& strExtensions,
|
||||
const wxString& strDesc,
|
||||
bool replaceExisting = TRUE);
|
||||
|
||||
bool DoAssociation(const wxString& strType,
|
||||
const wxString& strIcon,
|
||||
wxMimeArrayString *entry,
|
||||
const wxArrayString& strExtensions,
|
||||
const wxString& strDesc);
|
||||
|
||||
bool WriteMimeInfo(int nIndex, bool delete_mime );
|
||||
|
||||
// give it access to m_aXXX variables
|
||||
friend class WXDLLEXPORT wxFileTypeImpl;
|
||||
@@ -101,6 +157,12 @@ class WXDLLEXPORT wxFileTypeImpl
|
||||
{
|
||||
public:
|
||||
// initialization functions
|
||||
// this is used to construct a list of mimetypes which match;
|
||||
// if built with GetFileTypeFromMimetype index 0 has the exact match and
|
||||
// index 1 the type / * match
|
||||
// if built with GetFileTypeFromExtension, index 0 has the mimetype for
|
||||
// the first extension found, index 1 for the second and so on
|
||||
|
||||
void Init(wxMimeTypesManagerImpl *manager, size_t index)
|
||||
{ m_manager = manager; m_index.Add(index); }
|
||||
|
||||
@@ -109,33 +171,47 @@ public:
|
||||
bool GetMimeType(wxString *mimeType) const
|
||||
{ *mimeType = m_manager->m_aTypes[m_index[0]]; return TRUE; }
|
||||
bool GetMimeTypes(wxArrayString& mimeTypes) const;
|
||||
bool GetIcon(wxIcon *icon) const;
|
||||
bool GetIcon(wxIcon *icon, wxString *iconFile = NULL,
|
||||
int *iconIndex = NULL) const;
|
||||
|
||||
bool GetDescription(wxString *desc) const
|
||||
{ *desc = m_manager->m_aDescriptions[m_index[0]]; return TRUE; }
|
||||
|
||||
bool GetOpenCommand(wxString *openCmd,
|
||||
const wxFileType::MessageParameters& params) const
|
||||
{
|
||||
return GetExpandedCommand(openCmd, params, TRUE);
|
||||
*openCmd = GetExpandedCommand(wxT("open"), params);
|
||||
return (! openCmd -> IsEmpty() );
|
||||
}
|
||||
|
||||
bool GetPrintCommand(wxString *printCmd,
|
||||
const wxFileType::MessageParameters& params) const
|
||||
{
|
||||
return GetExpandedCommand(printCmd, params, FALSE);
|
||||
*printCmd = GetExpandedCommand(wxT("print"), params);
|
||||
return (! printCmd -> IsEmpty() );
|
||||
}
|
||||
|
||||
// return the number of commands defined for this file type, 0 if none
|
||||
size_t GetAllCommands(wxArrayString *verbs, wxArrayString *commands,
|
||||
const wxFileType::MessageParameters& params) const;
|
||||
|
||||
|
||||
// remove the record for this file type
|
||||
bool Unassociate();
|
||||
// probably a mistake to come here, use wxMimeTypesManager.Unassociate (ft) instead
|
||||
bool Unassociate(wxFileType *ft)
|
||||
{
|
||||
return m_manager->Unassociate(ft);
|
||||
}
|
||||
|
||||
// set an arbitrary command, ask confirmation if it already exists and
|
||||
// overwriteprompt is TRUE
|
||||
bool SetCommand(const wxString& cmd, const wxString& verb, bool overwriteprompt = TRUE);
|
||||
bool SetDefaultIcon(const wxString& strIcon = wxEmptyString, int index = 0);
|
||||
|
||||
private:
|
||||
// get the entry which passes the test (may return NULL)
|
||||
MailCapEntry *GetEntry(const wxFileType::MessageParameters& params) const;
|
||||
|
||||
// choose the correct entry to use and expand the command
|
||||
bool GetExpandedCommand(wxString *expandedCmd,
|
||||
const wxFileType::MessageParameters& params,
|
||||
bool open) const;
|
||||
wxString
|
||||
GetExpandedCommand(const wxString & verb,
|
||||
const wxFileType::MessageParameters& params) const;
|
||||
|
||||
wxMimeTypesManagerImpl *m_manager;
|
||||
wxArrayInt m_index; // in the wxMimeTypesManagerImpl arrays
|
||||
|
Reference in New Issue
Block a user