// Created: 23.09.98
// RCS-ID: $Id$
// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
-// Licence: wxWindows license (part of wxExtra library)
+// Licence: wxWindows licence (part of wxExtra library)
/////////////////////////////////////////////////////////////////////////////
// known bugs; there may be others!! chris elliott, biol75@york.ac.uk 27 Mar 01
// headers
// ----------------------------------------------------------------------------
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "mimetype.h"
#endif
#ifndef WX_PRECOMP
#include "wx/string.h"
- #if wxUSE_GUI
- #include "wx/icon.h"
-
- #endif
#endif //WX_PRECOMP
#include "wx/dir.h"
#include "wx/utils.h"
#include "wx/tokenzr.h"
+#include "wx/iconloc.h"
+#include "wx/filename.h"
#include "wx/unix/mimetype.h"
// add a new verb with the command or replace the old value
void AddOrReplaceVerb(const wxString& verb, const wxString& cmd)
{
- int n = m_verbs.Index(verb, FALSE /* ignore case */);
+ int n = m_verbs.Index(verb, false /* ignore case */);
if ( n == wxNOT_FOUND )
{
m_verbs.Add(verb);
wxMimeTextFile () : wxTextFile () {};
wxMimeTextFile (const wxString& strFile) : wxTextFile (strFile) { };
- int pIndexOf(const wxString & sSearch, bool bIncludeComments = FALSE, int iStart = 0)
+ int pIndexOf(const wxString & sSearch, bool bIncludeComments = false, int iStart = 0)
{
size_t i = iStart;
int nResult = wxNOT_FOUND;
bool CommentLine(int nIndex)
{
- if (nIndex <0) return FALSE;
- if (nIndex >= (int)GetLineCount() ) return FALSE;
+ if (nIndex <0) return false;
+ if (nIndex >= (int)GetLineCount() ) return false;
GetLine(nIndex) = GetLine(nIndex).Prepend(wxT("#"));
- return TRUE;
+ return true;
}
bool CommentLine(const wxString & sTest)
{
int nIndex = pIndexOf(sTest);
- if (nIndex <0) return FALSE;
- if (nIndex >= (int)GetLineCount() ) return FALSE;
+ if (nIndex <0) return false;
+ if (nIndex >= (int)GetLineCount() ) return false;
GetLine(nIndex) = GetLine(nIndex).Prepend(wxT("#"));
- return TRUE;
+ return true;
}
wxString GetVerb (size_t i)
if (!wxMkdir ( sTmp ))
{
wxLogError(_("Failed to create directory %s/.gnome."), sTmp.c_str());
- return FALSE;
+ return false;
}
}
sTmp = sTmp + wxT("/mime-info");
if (!wxMkdir ( sTmp ))
{
wxLogError(_("Failed to create directory %s/mime-info."), sTmp.c_str());
- return FALSE;
+ return false;
}
}
- return TRUE;
+ return true;
}
if (! outfile.Open () )
#endif
{
- if (delete_index) return FALSE;
- if (!CheckGnomeDirsExist() ) return FALSE;
+ if (delete_index) return false;
+ if (!CheckGnomeDirsExist() ) return false;
outfile.Create ();
}
wxMimeTypeCommands sOld;
size_t nOld = nIndex + 1;
- bool oldEntryEnd = FALSE;
- while ( (nOld < outfile.GetLineCount() )&& (oldEntryEnd == FALSE ))
+ bool oldEntryEnd = false;
+ while ( (nOld < outfile.GetLineCount() )&& (!oldEntryEnd))
{
sTmp = outfile.GetLine(nOld);
if ( (sTmp[0u] == wxT('\t')) || (sTmp[0u] == wxT('#')) )
}
// next mimetpye ??or blank line
else
- oldEntryEnd = TRUE;
+ oldEntryEnd = true;
}
// list of entries in our data; these should all be in sOld,
// though sOld may also contain other entries , eg flags
// create it anyway as a private mime store
if (! outfile.Open () )
{
- if (delete_index) return FALSE;
- if (!CheckGnomeDirsExist() ) return FALSE;
+ if (delete_index) return false;
+ if (!CheckGnomeDirsExist() ) return false;
outfile.Create ();
}
wxString strType = m_aTypes[index];
else if (sTmp.Contains( wxT("icon_filename=") ) )
{
curIconFile = sTmp.AfterFirst(wxT('='));
+
if (!wxFileExists(curIconFile))
{
size_t nDirs = dirs.GetCount();
for (size_t nDir = 0; nDir < nDirs; nDir++)
{
- wxString newFile;
- newFile.Printf(wxT("%s/pixmaps/document-icons/%s.png"),
- dirs[nDir].c_str(),
- curIconFile.c_str());
- if (wxFileExists(newFile))
- curIconFile = newFile;
+ wxFileName newFile( curIconFile );
+ newFile.SetPath( dirs[nDir] );
+ newFile.AppendDir( wxT("pixmaps") );
+ newFile.AppendDir( wxT("document-icons") );
+ newFile.SetExt( wxT("png") );
+ if (newFile.FileExists())
+ curIconFile = newFile.GetFullPath();
}
}
}
// for now ignore lines with flags in...FIX
sTmp = sTmp.AfterLast(wxT(']'));
sTmp = sTmp.AfterLast(wxT('\t'));
- sTmp.Trim(FALSE).Trim();
+ sTmp.Trim(false).Trim();
if (0 == sTmp.Replace ( wxT("%f"), wxT("%s") )) sTmp = sTmp + wxT(" %s");
entry->Add(sTmp);
// ignore blank lines
nLine ++;
} // end of while, save any data
+
if (! curMimeType.empty())
- {
AddToMimeData ( curMimeType, curIconFile, entry, strExtensions, strDesc);
- }
-
}
void wxMimeTypesManagerImpl::LoadGnomeMimeTypesFromMimeFile(const wxString& filename)
{
wxTextFile textfile(filename);
-#if defined(__WXGTK20__) && wxUSE_UNICODE
- if ( !textfile.Open( wxConvUTF8) )
-#else
if ( !textfile.Open() )
-#endif
return;
- wxLogTrace(TRACE_MIME, wxT("--- Opened Gnome file %s ---"),
- filename.c_str());
+
+ wxLogTrace(TRACE_MIME,
+ wxT("--- Opened Gnome file %s ---"),
+ filename.c_str());
// values for the entry being parsed
wxString curMimeType, curExtList;
if ( !pc || !*pc )
{
// end of the entry
- if ( !!curMimeType && !!curExtList )
+ if ( !curMimeType.empty() && !curExtList.empty() )
{
- wxLogTrace(TRACE_MIME, wxT("--- At end of Gnome file finding mimetype %s ---"),
- curMimeType.c_str());
+ wxLogTrace(TRACE_MIME,
+ wxT("--- At end of Gnome file finding mimetype %s ---"),
+ curMimeType.c_str());
AddMimeTypeInfo(curMimeType, curExtList, wxEmptyString);
}
// this is a field=value ling
pc++; // skip leading TAB
- static const int lenField = 4; // strlen("ext:")
- if ( wxStrncmp(pc, wxT("ext:"), lenField) == 0 )
+ static const int lenField = 5; // strlen("ext: ")
+ if ( wxStrncmp(pc, wxT("ext: "), lenField) == 0 )
{
- // skip ' ' which follows and take everything left until the end
- // of line
- curExtList = pc + lenField + 1;
+ // skip it and take everything left until the end of line
+ curExtList = pc + lenField;
}
//else: some other field, we don't care
}
else
{
// this is the start of the new section
- wxLogTrace(TRACE_MIME, wxT("--- In Gnome file finding mimetype %s ---"),
- curMimeType.c_str());
+ wxLogTrace(TRACE_MIME,
+ wxT("--- In Gnome file finding mimetype %s ---"),
+ curMimeType.c_str());
if (! curMimeType.empty())
AddMimeTypeInfo(curMimeType, curExtList, wxEmptyString);
void wxMimeTypesManagerImpl::LoadGnomeMimeFilesFromDir(
const wxString& dirbase, const wxArrayString& dirs)
{
- wxASSERT_MSG( !!dirbase && !wxEndsWithPathSeparator(dirbase),
+ wxASSERT_MSG( !dirbase.empty() && !wxEndsWithPathSeparator(dirbase),
_T("base directory shouldn't end with a slash") );
wxString dirname = dirbase;
dirname += wxT('/');
wxString filename;
- bool cont = dir.GetFirst(&filename, _T("*.mime"), wxDIR_FILES);
+ bool cont;
+ cont = dir.GetFirst(&filename, _T("*.mime"), wxDIR_FILES);
while ( cont )
{
LoadGnomeMimeTypesFromMimeFile(dirname + filename);
cont = dir.GetNext(&filename);
}
-}
+ // Hack alert: We scan all icons and deduce the
+ // mime-type from the file name.
+ dirname = dirbase;
+ dirname << wxT("/pixmaps/document-icons");
+ // these are always empty in this file
+ wxArrayString strExtensions;
+ wxString strDesc;
+
+ if ( !wxDir::Exists(dirname) )
+ {
+ // Jst test for default GPE dir also
+ dirname = wxT("/usr/share/gpe/pixmaps/default/filemanager/document-icons");
+
+ if ( !wxDir::Exists(dirname) )
+ return;
+ }
+
+ wxDir dir2( dirname );
+
+ cont = dir2.GetFirst(&filename, wxT("gnome-*.png"), wxDIR_FILES);
+ while ( cont )
+ {
+ wxString mimeType = filename;
+ mimeType.Remove( 0, 6 ); // remove "gnome-"
+ mimeType.Remove( mimeType.Len()-4, 4 ); // remove ".png"
+ int pos = mimeType.Find( wxT("-") );
+ if (pos != wxNOT_FOUND)
+ {
+ mimeType.SetChar( pos, wxT('/') );
+ wxString iconFile = dirname;
+ iconFile << wxT("/");
+ iconFile << filename;
+ AddToMimeData ( mimeType, iconFile, NULL, strExtensions, strDesc, true );
+ }
+ cont = dir2.GetNext(&filename);
+ }
+}
void wxMimeTypesManagerImpl::GetGnomeMimeInfo(const wxString& sExtraDir)
{
wxArrayString dirs;
+
+ wxString gnomedir = wxGetenv( wxT("GNOMEDIR") );;
+ if (!gnomedir.empty())
+ {
+ gnomedir << wxT("/share");
+ dirs.Add( gnomedir );
+ }
+
dirs.Add(wxT("/usr/share"));
dirs.Add(wxT("/usr/local/share"));
- wxString gnomedir;
- wxGetHomeDir( &gnomedir );
- gnomedir += wxT("/.gnome");
+ gnomedir = wxGetHomeDir();
+ gnomedir << wxT("/.gnome");
dirs.Add( gnomedir );
+
if (!sExtraDir.empty()) dirs.Add( sExtraDir );
size_t nDirs = dirs.GetCount();
// kde writing; see http://webcvs.kde.org/cgi-bin/cvsweb.cgi/~checkout~/kdelibs/kio/DESKTOP_ENTRY_STANDARD
// for now write to .kdelnk but should eventually do .desktop instead (in preference??)
-bool wxMimeTypesManagerImpl::CheckKDEDirsExist ( const wxString & sOK, const wxString & sTest )
-
- {
+bool wxMimeTypesManagerImpl::CheckKDEDirsExist ( const wxString &sOK, const wxString &sTest )
+{
if (sTest.empty())
- {
- if (wxDir::Exists(sOK)) return TRUE;
- else return FALSE;
- }
+ {
+ if (wxDir::Exists(sOK))
+ return true;
+ else
+ return false;
+ }
else
- {
- wxString sStart = sOK + wxT("/") + sTest.BeforeFirst(wxT('/'));
- if (!wxDir::Exists(sStart)) wxMkdir(sStart);
- wxString sEnd = sTest.AfterFirst(wxT('/'));
- return CheckKDEDirsExist(sStart, sEnd);
+ {
+ wxString sStart = sOK + wxT("/") + sTest.BeforeFirst(wxT('/'));
+ if (!wxDir::Exists(sStart)) wxMkdir(sStart);
+ wxString sEnd = sTest.AfterFirst(wxT('/'));
+ return CheckKDEDirsExist(sStart, sEnd);
}
}
{
bTemp = mimeoutfile.Create (sTmp);
// some unknown error eg out of disk space
- if (!bTemp) return FALSE;
+ if (!bTemp) return false;
}
sTmp = wxT(".kde/share/applnk/");
{
bTemp = appoutfile.Create (sTmp);
// some unknown error eg out of disk space
- if (!bTemp) return FALSE;
+ if (!bTemp) return false;
}
// fixed data; write if new file
//other actions as well as open
}
- bTemp = FALSE;
- if (mimeoutfile.Write ()) bTemp = TRUE;
+ bTemp = false;
+ if (mimeoutfile.Write ()) bTemp = true;
mimeoutfile.Close ();
- if (appoutfile.Write ()) bTemp = TRUE;
+ if (appoutfile.Write ()) bTemp = true;
appoutfile.Close ();
return bTemp;
-
-
}
void wxMimeTypesManagerImpl::LoadKDELinksForMimeSubtype(const wxString& dirbase,
wxLogTrace(TRACE_MIME, wxT("loading KDE file %s"),
(dirbase+filename).c_str());
-
+
wxMimeTypeCommands * entry = new wxMimeTypeCommands;
wxArrayString sExts;
wxString mimetype, mime_desc, strIcon;
nIndex = file.pIndexOf(_T("Patterns="));
if ( nIndex != wxNOT_FOUND )
{
- wxString exts = file.GetCmd (nIndex);;
+ wxString exts = file.GetCmd (nIndex);
wxStringTokenizer tokenizer(exts, _T(";"));
while ( tokenizer.HasMoreTokens() )
}
sExts.Add(mime_extension);
-
// ok, now we can take care of icon:
nIndex = file.pIndexOf(_T("Icon="));
strIcon = file.GetCmd(nIndex);
wxLogTrace(TRACE_MIME, wxT(" icon %s"), strIcon.c_str());
//it could be the real path, but more often a short name
+
+
if (!wxFileExists(strIcon))
{
// icon is just the short name
// in many locations, at least ~/.kde and $KDEDIR
size_t nDir, nDirs = icondirs.GetCount();
for ( nDir = 0; nDir < nDirs; nDir++ )
- if (wxFileExists(icondirs[nDir] + strIcon))
+ {
+ wxFileName fnameIcon( strIcon );
+ wxFileName fname( icondirs[nDir], fnameIcon.GetName() );
+ fname.SetExt( wxT("png") );
+ if (fname.FileExists())
{
- strIcon.Prepend(icondirs[nDir]);
+ strIcon = fname.GetFullPath();
wxLogTrace(TRACE_MIME, wxT(" iconfile %s"), strIcon.c_str());
break;
}
+ }
}
}
}
wxLogTrace(TRACE_MIME, wxT("--- Loading from KDE directory %s ---"),
dirname.c_str());
-
+
dirname += _T('/');
wxString filename;
void wxMimeTypesManagerImpl::LoadKDELinkFilesFromDir(const wxString& dirbase,
const wxArrayString& icondirs)
{
- wxASSERT_MSG( !!dirbase && !wxEndsWithPathSeparator(dirbase),
+ wxASSERT_MSG( !dirbase.empty() && !wxEndsWithPathSeparator(dirbase),
_T("base directory shouldn't end with a slash") );
wxString dirname = dirbase;
wxArrayString dirs;
wxArrayString icondirs;
+ // FIXME: This code is heavily broken. There are three bugs in it:
+ // 1) it uses only KDEDIR, which is deprecated, instead of using
+ // list of paths from KDEDIRS and using KDEDIR only if KDEDIRS
+ // is not set
+ // 2) it doesn't look into ~/.kde/share/config/kdeglobals where
+ // user's settings are stored and thus *ignores* user's settings
+ // instead of respecting them
+ // 3) it "tries to guess KDEDIR" and "tries a few likely theme
+ // names", both of which is completely arbitrary; instead, the
+ // code should give up if KDEDIR(S) is not set and/or the icon
+ // theme cannot be determined, because it means that the user is
+ // not using KDE (and thus is not interested in KDE icons anyway)
+
+ // the variable $KDEDIR is set when KDE is running
+ wxString kdedir = wxGetenv( wxT("KDEDIR") );
+
+ if (!kdedir.empty())
+ {
+ // $(KDEDIR)/share/config/kdeglobals holds info
+ // the current icons theme
+ wxFileName configFile( kdedir, wxEmptyString );
+ configFile.AppendDir( wxT("share") );
+ configFile.AppendDir( wxT("config") );
+ configFile.SetName( wxT("kdeglobals") );
+
+ wxTextFile config;
+ if (configFile.FileExists() && config.Open(configFile.GetFullPath()))
+ {
+ // $(KDEDIR)/share/config -> $(KDEDIR)/share
+ configFile.RemoveDir( configFile.GetDirCount()-1 );
+ // $(KDEDIR)/share/ -> $(KDEDIR)/share/icons
+ configFile.AppendDir( wxT("icons") );
+
+ // Check for entry
+ wxString theme(wxT("default.kde"));
+ size_t cnt = config.GetLineCount();
+ for (size_t i = 0; i < cnt; i++)
+ {
+ if (config[i].StartsWith(wxT("Theme="), &theme/*rest*/))
+ break;
+ }
+ configFile.AppendDir(theme);
+ }
+ else
+ {
+ // $(KDEDIR)/share/config -> $(KDEDIR)/share
+ configFile.RemoveDir( configFile.GetDirCount()-1 );
+ // $(KDEDIR)/share/ -> $(KDEDIR)/share/icons
+ configFile.AppendDir( wxT("icons") );
+ // $(KDEDIR)/share/icons -> $(KDEDIR)/share/icons/default.kde
+ configFile.AppendDir( wxT("default.kde") );
+ }
+
+ configFile.SetName( wxEmptyString );
+ configFile.AppendDir( wxT("32x32") );
+ configFile.AppendDir( wxT("mimetypes") );
+
+ // Just try a few likely icons theme names
+
+ int pos = configFile.GetDirCount()-3;
+
+ if (!wxDir::Exists(configFile.GetPath()))
+ {
+ configFile.RemoveDir( pos );
+ configFile.InsertDir( pos, wxT("default.kde") );
+ }
+
+ if (!wxDir::Exists(configFile.GetPath()))
+ {
+ configFile.RemoveDir( pos );
+ configFile.InsertDir( pos, wxT("default") );
+ }
+
+ if (!wxDir::Exists(configFile.GetPath()))
+ {
+ configFile.RemoveDir( pos );
+ configFile.InsertDir( pos, wxT("crystalsvg") );
+ }
+
+ if (!wxDir::Exists(configFile.GetPath()))
+ {
+ configFile.RemoveDir( pos );
+ configFile.InsertDir( pos, wxT("crystal") );
+ }
+
+ if (wxDir::Exists(configFile.GetPath()))
+ icondirs.Add( configFile.GetFullPath() );
+ }
+
// settings in ~/.kde have maximal priority
dirs.Add(wxGetHomeDir() + wxT("/.kde/share"));
icondirs.Add(wxGetHomeDir() + wxT("/.kde/share/icons/"));
- // the variable KDEDIR is set when KDE is running
- const wxChar *kdedir = wxGetenv( wxT("KDEDIR") );
- if ( kdedir )
+ if (kdedir)
{
dirs.Add( wxString(kdedir) + wxT("/share") );
icondirs.Add( wxString(kdedir) + wxT("/share/icons/") );
return wxFileType::ExpandCommand(sTmp, params);
}
-bool wxFileTypeImpl::GetIcon(wxIcon *icon,
- wxString *iconFile /*= NULL */,
- int *iconIndex /*= NULL*/) const
+bool wxFileTypeImpl::GetIcon(wxIconLocation *iconLoc) const
{
-#if wxUSE_GUI
wxString sTmp;
size_t i = 0;
while ( (i < m_index.GetCount() ) && sTmp.empty() )
sTmp = m_manager->m_aIcons[m_index[i]];
i ++;
}
- if ( sTmp.empty () ) return FALSE;
-
- wxIcon icn;
+ if ( sTmp.empty () )
+ return false;
- if (sTmp.Right(4).MakeUpper() == _T(".XPM"))
- icn = wxIcon(sTmp);
- else
- icn = wxIcon(sTmp, wxBITMAP_TYPE_ANY);
-
- if ( icn.Ok() )
+ if ( iconLoc )
{
- *icon = icn;
- if (iconFile) *iconFile = sTmp;
- if (iconIndex) *iconIndex = 0;
- return TRUE;
+ iconLoc->SetFileName(sTmp);
}
-#endif // wxUSE_GUI
- return FALSE;
+ return true;
}
mimeTypes.Clear();
for (size_t i = 0; i < m_index.GetCount(); i++)
mimeTypes.Add(m_manager->m_aTypes[m_index[i]]);
- return TRUE;
+ return true;
}
}
}
- return TRUE;
+ return true;
}
// set an arbitrary command,
// could adjust the code to ask confirmation if it already exists and
-// overwriteprompt is TRUE, but this is currently ignored as *Associate* has
+// overwriteprompt is true, but this is currently ignored as *Associate* has
// no overwrite prompt
-bool wxFileTypeImpl::SetCommand(const wxString& cmd, const wxString& verb, bool overwriteprompt /*= TRUE*/)
+bool wxFileTypeImpl::SetCommand(const wxString& cmd, const wxString& verb, bool overwriteprompt /*= true*/)
{
wxArrayString strExtensions;
wxString strDesc, strIcon;
wxArrayString strTypes;
GetMimeTypes (strTypes);
- if (strTypes.GetCount() < 1) return FALSE;
+ if (strTypes.GetCount() < 1) return false;
size_t i;
- bool Ok = TRUE;
+ bool Ok = true;
for (i = 0; i < strTypes.GetCount(); i++)
{
if (!m_manager->DoAssociation (strTypes[i], strIcon, entry, strExtensions, strDesc))
- Ok = FALSE;
+ Ok = false;
}
return Ok;
// ignore index on the grouds that we only have one icon in a Unix file
bool wxFileTypeImpl::SetDefaultIcon(const wxString& strIcon /*= wxEmptyString*/, int /*index = 0*/)
{
- if (strIcon.empty()) return FALSE;
+ if (strIcon.empty()) return false;
wxArrayString strExtensions;
wxString strDesc;
wxArrayString strTypes;
GetMimeTypes (strTypes);
- if (strTypes.GetCount() < 1) return FALSE;
+ if (strTypes.GetCount() < 1) return false;
size_t i;
- bool Ok = TRUE;
+ bool Ok = true;
for (i = 0; i < strTypes.GetCount(); i++)
{
if (!m_manager->DoAssociation (strTypes[i], strIcon, entry, strExtensions, strDesc))
- Ok = FALSE;
+ Ok = false;
}
return Ok;
wxMimeTypesManagerImpl::wxMimeTypesManagerImpl()
{
- m_initialized = FALSE;
+ m_initialized = false;
m_mailcapStylesInited = 0;
}
+void wxMimeTypesManagerImpl::InitIfNeeded()
+{
+ if ( !m_initialized )
+ {
+ // set the flag first to prevent recursion
+ m_initialized = true;
+
+#if 0
+ wxString wm = wxGetenv( wxT("WINDOWMANAGER") );
+
+ if (wm.Find( wxT("kde") ) != wxNOT_FOUND)
+ Initialize( wxMAILCAP_KDE|wxMAILCAP_STANDARD );
+ else if (wm.Find( wxT("gnome") ) != wxNOT_FOUND)
+ Initialize( wxMAILCAP_GNOME|wxMAILCAP_STANDARD );
+ else
+#endif
+ Initialize();
+ }
+}
+
// read system and user mailcaps and other files
void wxMimeTypesManagerImpl::Initialize(int mailcapStyles,
const wxString& sExtraDir)
GetMimeInfo(sExtraDir);
// read GNOME tables
- if ( mailcapStyles & wxMAILCAP_GNOME)
+ if (mailcapStyles & wxMAILCAP_GNOME)
GetGnomeMimeInfo(sExtraDir);
// read KDE tables
- if ( mailcapStyles & wxMAILCAP_KDE)
+ if (mailcapStyles & wxMAILCAP_KDE)
GetKDEMimeInfo(sExtraDir);
m_mailcapStylesInited |= mailcapStyles;
{
// check we have the right manager
if (! ( m_mailcapStylesInited & wxMAILCAP_STANDARD) )
- return FALSE;
+ return false;
bool bTemp;
wxString strHome = wxGetenv(wxT("HOME"));
}
else
{
- if (delete_index) return FALSE;
+ if (delete_index) return false;
bTemp = file.Create(strUserMailcap);
}
if (bTemp)
{
int nIndex;
- // test for netscape's header and return FALSE if its found
+ // test for netscape's header and return false if its found
nIndex = file.pIndexOf (wxT("#--Netscape"));
if (nIndex != wxNOT_FOUND)
{
- wxASSERT_MSG(FALSE,wxT("Error in .mime.types \nTrying to mix Netscape and Metamail formats\nFile not modiifed"));
- return FALSE;
+ wxASSERT_MSG(false,wxT("Error in .mime.types \nTrying to mix Netscape and Metamail formats\nFile not modiifed"));
+ return false;
}
// write it in alternative format
// get rid of unwanted entries
{
//check we have the right managers
if (! ( m_mailcapStylesInited & wxMAILCAP_NETSCAPE) )
- return FALSE;
+ return false;
bool bTemp;
wxString strHome = wxGetenv(wxT("HOME"));
}
else
{
- if (delete_index) return FALSE;
+ if (delete_index) return false;
bTemp = file.Create(strUserMailcap);
}
if (bTemp)
// write it in the format that Netscape uses
int nIndex;
// test for netscape's header and insert if required...
- // this is a comment so use TRUE
- nIndex = file.pIndexOf (wxT("#--Netscape"), TRUE);
+ // this is a comment so use true
+ nIndex = file.pIndexOf (wxT("#--Netscape"), true);
if (nIndex == wxNOT_FOUND)
{
// either empty file or metamail format
// metamail entreies
if (file.GetLineCount () > 0)
{
- wxASSERT_MSG(FALSE, wxT(".mime.types File not in Netscape format\nNo entries written to\n.mime.types or to .mailcap"));
- return FALSE;
+ wxASSERT_MSG(false, wxT(".mime.types File not in Netscape format\nNo entries written to\n.mime.types or to .mailcap"));
+ return false;
}
file.InsertLine (wxT( "#--Netscape Communications Corporation MIME Information" ), 0);
nIndex = 0;
}
}
wxString sExts = m_aExtensions.Item(index);
- sTmp = wxT("exts=\"") + sExts.Trim(FALSE).Trim() + wxT("\"");
+ sTmp = wxT("exts=\"") + sExts.Trim(false).Trim() + wxT("\"");
if (!delete_index)
{
nIndex ++;
//check we have the right managers
if ( !( ( m_mailcapStylesInited & wxMAILCAP_NETSCAPE) ||
( m_mailcapStylesInited & wxMAILCAP_STANDARD) ) )
- return FALSE;
+ return false;
bool bTemp;
wxString strHome = wxGetenv(wxT("HOME"));
}
else
{
- if (delete_index) return FALSE;
+ if (delete_index) return false;
bTemp = file.Create(strUserMailcap);
}
if (bTemp)
s = sT.GetNextToken();
while ( ! s.empty() )
{
- bool bKnownToken = FALSE;
- if (s.Contains(wxT("description="))) bKnownToken = TRUE;
- if (s.Contains(wxT("x11-bitmap="))) bKnownToken = TRUE;
+ bool bKnownToken = false;
+ if (s.Contains(wxT("description="))) bKnownToken = true;
+ if (s.Contains(wxT("x11-bitmap="))) bKnownToken = true;
size_t i;
for (i=0; i < entries->GetCount(); i++)
{
- if (s.Contains(entries->GetVerb(i))) bKnownToken = TRUE;
+ if (s.Contains(entries->GetVerb(i))) bKnownToken = true;
}
if (!bKnownToken)
{
{
sExt = sA_Exts.Item(i);
//clean up to just a space before and after
- sExt.Trim().Trim(FALSE);
+ sExt.Trim().Trim(false);
sExt = wxT(' ') + sExt + wxT(' ');
for (nIndex = 0; nIndex < m_aExtensions.GetCount(); nIndex ++)
{
const wxArrayString& strExtensions,
const wxString& strDesc)
{
- int nIndex = AddToMimeData(strType, strIcon, entry, strExtensions, strDesc, TRUE);
+ int nIndex = AddToMimeData(strType, strIcon, entry, strExtensions, strDesc, true);
if ( nIndex == wxNOT_FOUND )
- return FALSE;
+ return false;
- return WriteMimeInfo (nIndex, FALSE);
+ return WriteMimeInfo (nIndex, false);
}
bool wxMimeTypesManagerImpl::WriteMimeInfo(int nIndex, bool delete_mime )
{
- bool ok = TRUE;
+ bool ok = true;
if ( m_mailcapStylesInited & wxMAILCAP_STANDARD )
{
// write in metamail format;
if (WriteToMimeTypes (nIndex, delete_mime) )
if ( WriteToMailCap (nIndex, delete_mime) )
- ok = FALSE;
+ ok = false;
}
if ( m_mailcapStylesInited & wxMAILCAP_NETSCAPE )
{
// write in netsacpe format;
if (WriteToNSMimeTypes (nIndex, delete_mime) )
if ( WriteToMailCap (nIndex, delete_mime) )
- ok = FALSE;
+ ok = false;
}
if (m_mailcapStylesInited & wxMAILCAP_GNOME)
{
// write in Gnome format;
if (WriteGnomeMimeFile (nIndex, delete_mime) )
if (WriteGnomeKeyFile (nIndex, delete_mime) )
- ok = FALSE;
+ ok = false;
}
if (m_mailcapStylesInited & wxMAILCAP_KDE)
{
// write in KDE format;
if (WriteKDEMimeFile (nIndex, delete_mime) )
- ok = FALSE;
+ ok = false;
}
return ok;
m_aEntries.Add(entry ? entry : new wxMimeTypeCommands);
// change nIndex so we can use it below to add the extensions
- nIndex = m_aExtensions.Add(wxEmptyString);
+ m_aExtensions.Add(wxEmptyString);
+ nIndex = m_aExtensions.size() - 1;
m_aDescriptions.Add(strDesc);
}
entryOld->AddOrReplaceVerb(verb, entry->GetCmd(i));
}
}
+
+ // as we don't store it anywhere, it won't be deleted later as
+ // usual -- do it immediately instead
+ delete entry;
}
}
}
while ( tk.HasMoreTokens() )
{
// consider extensions as not being case-sensitive
- if ( tk.GetNextToken().IsSameAs(ext, FALSE /* no case */) )
+ if ( tk.GetNextToken().IsSameAs(ext, false /* no case */) )
{
// found
wxFileType *fileType = new wxFileType;
wxString sTmp = strExtensions;
wxArrayString sExts;
- sTmp.Trim().Trim(FALSE);
+ sTmp.Trim().Trim(false);
while (!sTmp.empty())
{
sTmp = sTmp.BeforeLast(wxT(' '));
}
- AddToMimeData (strMimeType, strIcon, NULL, sExts, strDesc, TRUE);
+ AddToMimeData (strMimeType, strIcon, NULL, sExts, strDesc, true);
}
void wxMimeTypesManagerImpl::AddMailcapInfo(const wxString& strType,
wxString strIcon;
wxArrayString strExtensions;
- AddToMimeData (strType, strIcon, entry, strExtensions, strDesc, TRUE);
+ AddToMimeData (strType, strIcon, entry, strExtensions, strDesc, true);
}
#else
if ( !file.Open() )
#endif
- return FALSE;
+ return false;
// the information we extract
wxString strMimeType, strDesc, strExtensions;
// the string is quoted and ends at the matching quote
pEnd = wxStrchr(++pc, wxT('"'));
if ( pEnd == NULL ) {
- wxLogWarning(_("Mime.types file %s, line %d: unterminated "
- "quoted string."),
+ wxLogWarning(_("Mime.types file %s, line %d: unterminated quoted string."),
strFileName.c_str(), nLine + 1);
}
}
// if there is something left, it may be either a '\\' to continue
// the line or the next field of the same entry
bool entryEnded = *pc == wxT('\0'),
- nextFieldOnSameLine = FALSE;
+ nextFieldOnSameLine = false;
if ( !entryEnded ) {
nextFieldOnSameLine = ((*pc != wxT('\\')) || (pc[1] != wxT('\0')));
}
else if ( strLHS == wxT("exts") ) {
strExtensions = strRHS;
}
- else {
+ else if ( strLHS == _T("icon") )
+ {
// this one is simply ignored: it usually refers to Netscape
// built in icons which are useless for us anyhow
- if ( strLHS != _T("icon") )
- {
- wxLogWarning(_("Unknown field in file %s, line %d: '%s'."),
- strFileName.c_str(), nLine + 1, strLHS.c_str());
- }
+ }
+ else if ( !strLHS.StartsWith(_T("x-")) )
+ {
+ // we suppose that all fields starting with "X-" are
+ // unregistered extensions according to the standard practice,
+ // but it may be worth telling the user about other junk in
+ // his mime.types file
+ wxLogWarning(_("Unknown field in file %s, line %d: '%s'."),
+ strFileName.c_str(), nLine + 1, strLHS.c_str());
}
if ( !entryEnded ) {
pc = NULL;
}
- return TRUE;
+ return true;
}
// ----------------------------------------------------------------------------
needsterminal,
copiousoutput;
- MailcapLineData() { testfailed = needsterminal = copiousoutput = FALSE; }
+ MailcapLineData() { testfailed = needsterminal = copiousoutput = false; }
};
// process a non-standard (i.e. not the first or second one) mailcap field
if ( curField.empty() )
{
// we don't care
- return TRUE;
+ return true;
}
// is this something of the form foo=bar?
wxString lhs = curField.BeforeFirst(wxT('=')),
rhs = curField.AfterFirst(wxT('='));
- lhs.Trim(TRUE); // from right
- rhs.Trim(FALSE); // from left
+ lhs.Trim(true); // from right
+ rhs.Trim(false); // from left
// it might be quoted
if ( !rhs.empty() && rhs[0u] == wxT('"') && rhs.Last() == wxT('"') )
wxT("Test '%s' for mime type '%s' failed, skipping."),
rhs.c_str(), data.type.c_str());
- data.testfailed = TRUE;
+ data.testfailed = true;
}
}
else if ( lhs == wxT("desc") )
// so it must be a simple flag
if ( curField == wxT("needsterminal") )
{
- data.needsterminal = TRUE;
+ data.needsterminal = true;
}
else if ( curField == wxT("copiousoutput"))
{
// copiousoutput impies that the viewer is a console program
data.needsterminal =
- data.copiousoutput = TRUE;
+ data.copiousoutput = true;
}
else if ( !IsKnownUnimportantField(curField) )
{
- return FALSE;
+ return false;
}
}
- return TRUE;
+ return true;
}
bool wxMimeTypesManagerImpl::ReadMailcap(const wxString& strFileName,
#else
if ( !file.Open() )
#endif
- return FALSE;
+ return false;
// indices of MIME types (in m_aTypes) we already found in this file
//
// the flags and field values on the current line
MailcapLineData data;
- bool cont = TRUE;
+ bool cont = true;
while ( cont )
{
switch ( *pc )
if ( nLine == nLineCount - 1 )
{
// something is wrong, bail out
- cont = FALSE;
+ cont = false;
- wxLogDebug(wxT("Mailcap file %s, line %lu: "
- "'\\' on the end of the last line "
- "ignored."),
+ wxLogDebug(wxT("Mailcap file %s, line %lu: '\\' on the end of the last line ignored."),
strFileName.c_str(),
(unsigned long)nLine + 1);
}
break;
case wxT('\0'):
- cont = FALSE; // end of line reached, exit the loop
+ cont = false; // end of line reached, exit the loop
// fall through to still process this field
case wxT(';'):
// trim whitespaces from both sides
- curField.Trim(TRUE).Trim(FALSE);
+ curField.Trim(true).Trim(false);
switch ( currentToken )
{
// this might be useful for the programmer
wxLogDebug
(
- wxT("Mailcap file %s, line %lu: "
- "unknown field '%s' for the "
- "MIME type '%s' ignored."),
+ wxT("Mailcap file %s, line %lu: unknown field '%s' for the MIME type '%s' ignored."),
strFileName.c_str(),
(unsigned long)nLine + 1,
curField.c_str(),
else if ( data.testfailed )
{
// skip this entry entirely
- cont = FALSE;
+ cont = false;
}
// it already has this value
// check that we really read something reasonable
if ( currentToken < Field_Other )
{
- wxLogWarning(_("Mailcap file %s, line %d: incomplete entry "
- "ignored."),
+ wxLogWarning(_("Mailcap file %s, line %d: incomplete entry ignored."),
strFileName.c_str(), nLine + 1);
continue;
// the fall back entries have the lowest priority, by definition
if ( fallback )
{
- overwrite = FALSE;
+ overwrite = false;
}
else
{
// have we seen this one before?
int nIndex = m_aTypes.Index(data.type);
- // and if we have, was it in this file?
+ // and if we have, was it in this file? if not, we should
+ // overwrite the previously seen one
overwrite = nIndex == wxNOT_FOUND ||
- aIndicesSeenHere.Index(nIndex) != wxNOT_FOUND;
+ aIndicesSeenHere.Index(nIndex) == wxNOT_FOUND;
}
wxLogTrace(TRACE_MIME, _T("mailcap %s: %s [%s]"),
}
}
- return TRUE;
+ return true;
}
size_t wxMimeTypesManagerImpl::EnumAllFileTypes(wxArrayString& mimetypes)
if ( nIndex == wxNOT_FOUND)
{
// error if we get here ??
- return FALSE;
+ return false;
}
else
{
- WriteMimeInfo(nIndex, TRUE );
+ WriteMimeInfo(nIndex, true );
m_aTypes.RemoveAt(nIndex);
m_aEntries.RemoveAt(nIndex);
m_aExtensions.RemoveAt(nIndex);
m_aTypes.Count() == m_aIcons.Count() &&
m_aTypes.Count() == m_aDescriptions.Count() );
- return TRUE;
+ return true;
}
// ----------------------------------------------------------------------------
for ( size_t n = 0; n < WXSIZEOF(knownFields); n++ )
{
if ( field.CmpNoCase(knownFields[n]) == 0 )
- return TRUE;
+ return true;
}
- return FALSE;
+ return false;
}
#endif