|
|
/***************************************************************************
* FontMan.h -- Definintion for the class: CFontManager * * * Copyright (C) 1992-93 ElseWare Corporation. All rights reserved. ***************************************************************************/
#if !defined(__FONTMAN_H__)
#define __FONTMAN_H__
#if !defined(__FSNOTIFY_H__)
#include "fsnotify.h"
#endif
#include "strtab.h"
// The database search capabilities have been extended.
enum { kSearchAny = 1, kSearchTT, kSearchNotTT };
//*********************************************************************
// Forward declarations
//
class CFontClass; class CFontList; class CFontManager; struct IPANOSEMapper;
DWORD dwResetFamilyFlags(void);
//*********************************************************************
// Class CFontManager
//
class CFontManager { public: virtual ~CFontManager( ); BOOL bInit( ); // Any initialization
BOOL bLoadFontList( ); // Build the font list
VOID vReconcileFolder( int iPriority ); VOID vDoReconcileFolder();
CFontClass * poAddToList( LPTSTR lpName, LPTSTR lpPath, LPTSTR lpCompFile = NULL ); CFontList * poLockFontList( ); void vReleaseFontList( ); void vGetFamily( CFontClass * poFont, CFontList * poList ); int iSearchFontList( PTSTR pszTarget, BOOL bExact = TRUE, int iType = kSearchAny ); int iSearchFontListLHS( PTSTR pszLHS ); int iSearchFontListFile( PTSTR pszFile ); CFontClass * poSearchFontList( PTSTR pszTarget, BOOL bExact = TRUE, int iType = kSearchAny ); CFontClass * poSearchFontListLHS( PTSTR pszLHS ); CFontClass * poSearchFontListFile( PTSTR pszFile ); VOID vResetFamilyFlags( ); VOID vDoResetFamilyFlags( ); BOOL bWaitOnFamilyReset( ); BOOL bLoadFamList( ); BOOL bRefresh( BOOL bCheckDup = TRUE ); void vToBeRemoved( CFontList * poList ); BOOL bCheckTBR( ); void vUndoTBR( ); void vVerifyList( ); void vDeleteFontList( CFontList * poList, BOOL bDelete = TRUE ); void vDeleteFont( CFontClass * pFont, BOOL bRemoveFile ); void vDeleteFontFamily( CFontClass * pFont, BOOL bRemoveFile ); int iCompare( CFontClass * pFont1, CFontClass * pFont2, CFontClass * pOrigin ); USHORT nDiff( CFontClass * pFont1, CFontClass * pFont2 ); int GetFontsDirectory( LPTSTR lpDir, int iLen ); BOOL ShouldAutoInstallFile( PTSTR pstr, DWORD dwAttrib ); BOOL bFamiliesNeverReset(void) { return m_bFamiliesNeverReset; } //
// Enumerated return values for dwWaitForInstallationMutex().
//
enum { MUTEXWAIT_SUCCESS, // Got the mutex.
MUTEXWAIT_TIMEOUT, // Wait timed out.
MUTEXWAIT_FAILED, // Wait failed.
MUTEXWAIT_WMQUIT // Rcvd WM_QUIT while waiting.
};
DWORD dwWaitForInstallationMutex(DWORD dwTimeout = 2000); BOOL bReleaseInstallationMutex(void);
BOOL CheckForType1FontDriver(void); BOOL Type1FontDriverInstalled(void) { return m_bType1FontDriverInstalled; }
private: // Methods
CFontManager(); VOID ProcessRegKey( HKEY hk, BOOL bCheckDup ); VOID ProcessT1RegKey( HKEY hk, BOOL bCheckDup ); int GetSection( LPTSTR lpFile, LPTSTR lpSection, LPHANDLE hSection); HRESULT GetPanMapper( IPANOSEMapper ** ppMapper );
CFontList * m_poFontList; CFontList * m_poTempList; IPANOSEMapper * m_poPanMap; BOOL m_bTriedOnce; // Set to true if an attempt has been made
// to get at the pan mapper.
BOOL m_bFamiliesNeverReset; // T = family reset never done yet.
BOOL m_bType1FontDriverInstalled; CFontList * m_poRemoveList; // List of fonts being dragged out.
NOTIFYWATCH m_Notify; HANDLE m_hNotifyThread; HANDLE m_hReconcileThread; HANDLE m_hResetFamThread; HANDLE m_hEventTerminateThreads; HANDLE m_hEventResetFamily; HANDLE m_hMutexResetFamily; HANDLE m_hMutexInstallation; // Prevent concurrent installation
// by reconciliation and main threads.
CRITICAL_SECTION m_cs; class HiddenFilesList : public StringTable { public: HiddenFilesList(void) { } ~HiddenFilesList(void) { }
DWORD Initialize(void);
} m_HiddenFontFilesList;
friend DWORD dwResetFamilyFlags(LPVOID); friend DWORD dwNotifyWatchProc(LPVOID); friend DWORD dwReconcileThread(LPVOID); friend HRESULT GetOrReleaseFontManager(CFontManager **ppoFontManager, bool bGet);
};
//
// Singleton instance management.
//
HRESULT GetFontManager(CFontManager **ppoFontManager); void ReleaseFontManager(CFontManager **poFontManager);
#endif // __FONTMAN_H__
|