ReactOS  0.4.15-dev-2985-g54406bf
CFontExt Class Reference

#include <CFontExt.hpp>

Inheritance diagram for CFontExt:
Collaboration diagram for CFontExt:

Public Member Functions

 CFontExt ()
 
 ~CFontExt ()
 
virtual STDMETHODIMP GetDefaultSearchGUID (GUID *lpguid)
 
virtual STDMETHODIMP EnumSearches (IEnumExtraSearch **ppenum)
 
virtual STDMETHODIMP GetDefaultColumn (DWORD dwReserved, ULONG *pSort, ULONG *pDisplay)
 
virtual STDMETHODIMP GetDefaultColumnState (UINT iColumn, SHCOLSTATEF *pcsFlags)
 
virtual STDMETHODIMP GetDetailsEx (PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv)
 
virtual STDMETHODIMP GetDetailsOf (PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd)
 
virtual STDMETHODIMP MapColumnToSCID (UINT iColumn, SHCOLUMNID *pscid)
 
virtual STDMETHODIMP ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes)
 
virtual STDMETHODIMP EnumObjects (HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList)
 
virtual STDMETHODIMP BindToObject (PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut)
 
virtual STDMETHODIMP BindToStorage (PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut)
 
virtual STDMETHODIMP CompareIDs (LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2)
 
virtual STDMETHODIMP CreateViewObject (HWND hwndOwner, REFIID riid, LPVOID *ppvOut)
 
virtual STDMETHODIMP GetAttributesOf (UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut)
 
virtual STDMETHODIMP GetUIObjectOf (HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut, LPVOID *ppvOut)
 
virtual STDMETHODIMP GetDisplayNameOf (PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet)
 
virtual STDMETHODIMP SetNameOf (HWND hwndOwner, PCUITEMID_CHILD pidl, LPCOLESTR lpName, DWORD dwFlags, PITEMID_CHILD *pPidlOut)
 
virtual STDMETHODIMP GetCurFolder (LPITEMIDLIST *ppidl)
 
virtual STDMETHODIMP Initialize (LPCITEMIDLIST pidl)
 
virtual STDMETHODIMP GetClassID (CLSID *lpClassId)
 
virtual STDMETHODIMP DragEnter (IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
 
virtual STDMETHODIMP DragOver (DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
 
virtual STDMETHODIMP DragLeave ()
 
virtual STDMETHODIMP Drop (IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
 
HRESULT DoInstallFontFile (LPCWSTR pszFontPath, LPCWSTR pszFontsDir, HKEY hkeyFonts)
 
HRESULT DoGetFontTitle (IN LPCWSTR pszFontPath, OUT CStringW &strFontName)
 
- Public Member Functions inherited from ATL::CComObjectRootEx< CComMultiThreadModelNoCS >
 ~CComObjectRootEx ()
 
ULONG InternalAddRef ()
 
ULONG InternalRelease ()
 
void Lock ()
 
void Unlock ()
 
HRESULT _AtlInitialConstruct ()
 
- Public Member Functions inherited from ATL::CComObjectRootBase
 CComObjectRootBase ()
 
 ~CComObjectRootBase ()
 
void SetVoid (void *)
 
HRESULT _AtlFinalConstruct ()
 
HRESULT FinalConstruct ()
 
void InternalFinalConstructAddRef ()
 
void InternalFinalConstructRelease ()
 
void FinalRelease ()
 
- Public Member Functions inherited from IShellFolder
HRESULT ParseDisplayName ([in] HWND hwndOwner, [in] LPBC pbcReserved, [in, string] LPOLESTR lpszDisplayName, [out] ULONG *pchEaten, [out] PIDLIST_RELATIVE *ppidl, [in, out, unique] ULONG *pdwAttributes)
 
HRESULT EnumObjects ([in] HWND hwndOwner, [in] SHCONTF grfFlags, [out] IEnumIDList **ppenumIDList)
 
HRESULT BindToObject ([in] PCUIDLIST_RELATIVE pidl, [in] LPBC pbcReserved, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut)
 
HRESULT BindToStorage ([in] PCUIDLIST_RELATIVE pidl, [in] LPBC pbcReserved, [in] REFIID riid, [out, iid_is(riid)] void **ppvObj)
 
HRESULT CreateViewObject ([in] HWND hwndOwner, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut)
 
HRESULT GetAttributesOf ([in] UINT cidl, [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl, [in, out] SFGAOF *rgfInOut)
 
HRESULT GetUIObjectOf ([in] HWND hwndOwner, [in] UINT cidl, [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl, [in] REFIID riid, [in, out, unique] UINT *prgfInOut, [out, iid_is(riid)] void **ppvOut)
 
HRESULT GetDisplayNameOf ([in] PCUITEMID_CHILD pidl, [in] SHGDNF uFlags, [out] STRRET *lpName)
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 
- Public Member Functions inherited from IPersistFolder2
HRESULT GetCurFolder ([out] PIDLIST_ABSOLUTE *ppidl)
 
- Public Member Functions inherited from IPersistFolder
HRESULT Initialize ([in] PCIDLIST_ABSOLUTE pidl)
 

Private Attributes

CComHeapPtr< ITEMIDLISTm_Folder
 

Additional Inherited Members

- Public Types inherited from IShellFolder2
typedef struct IShellFolder2::SHCOLUMNIDLPSHCOLUMNID
 
typedef const SHCOLUMNIDLPCSHCOLUMNID
 
- Public Types inherited from IShellFolder
enum  tagSHGDN {
  SHGDN_NORMAL = 0, SHGDN_INFOLDER = 1, SHGDN_FOREDITING = 0x1000, SHGDN_INCLUDE_NONFILESYS = 0x2000,
  SHGDN_FORADDRESSBAR = 0x4000, SHGDN_FORPARSING = 0x8000
}
 
enum  tagSHCONTF {
  SHCONTF_FOLDERS = 32, SHCONTF_NONFOLDERS = 64, SHCONTF_INCLUDEHIDDEN = 128, SHCONTF_INIT_ON_FIRST_NEXT = 256,
  SHCONTF_NETPRINTERSRCH = 512, SHCONTF_SHAREABLE = 1024, SHCONTF_STORAGE = 2048, SHCONTF_NAVIGATION_ENUM = 0x01000,
  SHCONTF_FASTITEMS = 0x02000, SHCONTF_FLATLIST = 0x04000, SHCONTF_ENABLE_ASYNC = 0x08000, SHCONTF_INCLUDESUPERHIDDEN = 0x10000
}
 
typedef IShellFolderLPSHELLFOLDER
 
typedef enum IShellFolder::tagSHGDN SHGNO
 
typedef DWORD SHGDNF
 
typedef DWORD SHCONTF
 
- Public Types inherited from IUnknown
typedef IUnknownLPUNKNOWN
 
- Public Types inherited from IPersistFolder2
typedef IPersistFolder2LPPERSISTFOLDER2
 
- Public Types inherited from IPersistFolder
typedef IPersistFolderLPPERSISTFOLDER
 
- Public Types inherited from IPersist
typedef IPersistLPPERSIST
 
- Public Types inherited from IDropTarget
typedef IDropTargetLPDROPTARGET
 
- Static Public Member Functions inherited from ATL::CComObjectRootBase
static void WINAPI ObjectMain (bool)
 
static const struct _ATL_CATMAP_ENTRYGetCategoryMap ()
 
static HRESULT WINAPI InternalQueryInterface (void *pThis, const _ATL_INTMAP_ENTRY *pEntries, REFIID iid, void **ppvObject)
 
- Public Attributes inherited from ATL::CComObjectRootBase
LONG m_dwRef
 
- Public Attributes inherited from IShellFolder
SFGAO_STORAGEANCESTOR typedef ULONG SFGAOF
 
- Public Attributes inherited from IDropTarget
const DWORD MK_ALT = 0x20
 
const DWORD DROPEFFECT_NONE = 0
 
const DWORD DROPEFFECT_COPY = 1
 
const DWORD DROPEFFECT_MOVE = 2
 
const DWORD DROPEFFECT_LINK = 4
 
const DWORD DROPEFFECT_SCROLL = 0x80000000
 
const DWORD DD_DEFSCROLLINSET = 11
 
const DWORD DD_DEFSCROLLDELAY = 50
 
const DWORD DD_DEFSCROLLINTERVAL = 50
 
const DWORD DD_DEFDRAGDELAY = 200
 
const DWORD DD_DEFDRAGMINDIST = 2
 

Detailed Description

Definition at line 11 of file CFontExt.hpp.

Constructor & Destructor Documentation

◆ CFontExt()

CFontExt::CFontExt ( )

Definition at line 88 of file CFontExt.cpp.

89 {
91 }
LONG g_ModuleRefCnt
Definition: ACPPage.cpp:13
#define InterlockedIncrement
Definition: armddk.h:53

◆ ~CFontExt()

CFontExt::~CFontExt ( )

Definition at line 93 of file CFontExt.cpp.

94 {
96 }
LONG g_ModuleRefCnt
Definition: ACPPage.cpp:13
#define InterlockedDecrement
Definition: armddk.h:52

Member Function Documentation

◆ BindToObject()

STDMETHODIMP CFontExt::BindToObject ( PCUIDLIST_RELATIVE  pidl,
LPBC  pbcReserved,
REFIID  riid,
LPVOID ppvOut 
)
virtual

Definition at line 245 of file CFontExt.cpp.

246 {
247  ERR("%s(riid=%S) UNIMPLEMENTED\n", __FUNCTION__, g2s(riid));
248  return E_NOTIMPL;
249 }
REFIID riid
Definition: precomp.h:44
WCHAR * g2s(REFCLSID iid)
Definition: CFontExt.cpp:62
#define ERR(fmt,...)
Definition: debug.h:110
#define E_NOTIMPL
Definition: ddrawi.h:99
#define __FUNCTION__
Definition: types.h:112

◆ BindToStorage()

STDMETHODIMP CFontExt::BindToStorage ( PCUIDLIST_RELATIVE  pidl,
LPBC  pbcReserved,
REFIID  riid,
LPVOID ppvOut 
)
virtual

Definition at line 251 of file CFontExt.cpp.

252 {
253  ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
254  return E_NOTIMPL;
255 }
#define ERR(fmt,...)
Definition: debug.h:110
#define E_NOTIMPL
Definition: ddrawi.h:99
#define __FUNCTION__
Definition: types.h:112

◆ CompareIDs()

STDMETHODIMP CFontExt::CompareIDs ( LPARAM  lParam,
PCUIDLIST_RELATIVE  pidl1,
PCUIDLIST_RELATIVE  pidl2 
)
virtual

Implements IShellFolder.

Definition at line 257 of file CFontExt.cpp.

258 {
259  const FontPidlEntry* fontEntry1 = _FontFromIL(pidl1);
260  const FontPidlEntry* fontEntry2 = _FontFromIL(pidl2);
261 
262  if (!fontEntry1 || !fontEntry2)
263  return E_INVALIDARG;
264 
265  int result;
266  DWORD sortMode = lParam & 0xFFFF0000;
267  DWORD column = lParam & 0x0000FFFF;
268  if (sortMode == SHCIDS_ALLFIELDS)
269  {
271  result = (int)fontEntry1->Index - (int)fontEntry2->Index;
272  }
273  else
274  {
275  auto info1 = g_FontCache->Find(fontEntry1);
276  auto info2 = g_FontCache->Find(fontEntry2);
277 
278  if (!info1 || !info2)
279  {
280  ERR("Unable to find font %S or %S in cache!\n", fontEntry1->Name, fontEntry2->Name);
281  return E_INVALIDARG;
282  }
283 
284  switch (column)
285  {
286  case 0xffff:
287  /* ROS bug? */
288  case FONTEXT_COL_NAME:
289  // These items are already ordered by name
290  result = (int)fontEntry1->Index - (int)fontEntry2->Index;
291  break;
293  result = wcsicmp(PathFindFileNameW(info1->File()), PathFindFileNameW(info2->File()));
294  break;
295  case FONTEXT_COL_SIZE:
296  result = (int)info1->FileSize().HighPart - info2->FileSize().HighPart;
297  if (result == 0)
298  result = (int)info1->FileSize().LowPart - info2->FileSize().LowPart;
299  break;
301  result = CompareFileTime(&info1->FileWriteTime(), &info2->FileWriteTime());
302  break;
303  case FONTEXT_COL_ATTR:
304  // FIXME: how to compare attributes?
305  result = (int)info1->FileAttributes() - info2->FileAttributes();
306  break;
307  default:
308  ERR("Unimplemented column %u\n", column);
309  return E_INVALIDARG;
310  }
311  }
312 
314 }
#define SHCIDS_ALLFIELDS
Definition: CFontExt.cpp:15
GLuint64EXT * result
Definition: glext.h:11304
const FontPidlEntry * _FontFromIL(LPCITEMIDLIST pidl)
Definition: fontpidl.cpp:32
#define MAKE_COMPARE_HRESULT(x)
Definition: shellutils.h:546
#define E_INVALIDARG
Definition: ddrawi.h:101
LPWSTR WINAPI PathFindFileNameW(LPCWSTR lpszPath)
Definition: path.c:394
LONG WINAPI CompareFileTime(IN CONST FILETIME *lpFileTime1, IN CONST FILETIME *lpFileTime2)
Definition: time.c:106
unsigned long DWORD
Definition: ntddk_ex.h:95
#define wcsicmp
Definition: compat.h:15
CFontCache * g_FontCache
Definition: CFontCache.cpp:12
WCHAR Name[1]
Definition: fontpidl.hpp:17
#define ERR(fmt,...)
Definition: debug.h:110
CFontInfo * Find(const FontPidlEntry *fontEntry)
Definition: CFontCache.cpp:145
#define UNIMPLEMENTED
Definition: debug.h:115
LPARAM lParam
Definition: combotst.c:139
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

◆ CreateViewObject()

STDMETHODIMP CFontExt::CreateViewObject ( HWND  hwndOwner,
REFIID  riid,
LPVOID ppvOut 
)
virtual

Definition at line 316 of file CFontExt.cpp.

317 {
319 
320  *ppvOut = NULL;
321 
322  if (IsEqualIID(riid, IID_IDropTarget))
323  {
324  ERR("IDropTarget not implemented\n");
325  *ppvOut = static_cast<IDropTarget *>(this);
326  AddRef();
327  hr = S_OK;
328  }
329  else if (IsEqualIID(riid, IID_IContextMenu))
330  {
331  ERR("IContextMenu not implemented\n");
332  hr = E_NOTIMPL;
333  }
334  else if (IsEqualIID(riid, IID_IShellView))
335  {
336  // Just create a default shell folder view, and register ourself as folder
337  SFV_CREATE sfv = { sizeof(SFV_CREATE) };
338  sfv.pshf = this;
339  hr = SHCreateShellFolderView(&sfv, (IShellView**)ppvOut);
340  }
341 
342  return hr;
343 }
#define E_NOINTERFACE
Definition: winerror.h:2364
HRESULT hr
Definition: shlfolder.c:183
REFIID riid
Definition: precomp.h:44
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
Definition: CDefView.cpp:3782
struct _SFV_CREATE SFV_CREATE
LONG HRESULT
Definition: typedefs.h:79
ULONG AddRef()
#define ERR(fmt,...)
Definition: debug.h:110
IShellFolder * pshf
Definition: shlobj.h:1283
#define S_OK
Definition: intsafe.h:52
#define E_NOTIMPL
Definition: ddrawi.h:99
#define NULL
Definition: types.h:112
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95

◆ DoGetFontTitle()

HRESULT CFontExt::DoGetFontTitle ( IN LPCWSTR  pszFontPath,
OUT CStringW strFontName 
)

Definition at line 658 of file CFontExt.cpp.

659 {
660  DWORD cbInfo = 0;
661  BOOL ret = GetFontResourceInfoW(pszFontPath, &cbInfo, NULL, 1);
662  if (!ret || !cbInfo)
663  {
664  ERR("GetFontResourceInfoW failed\n");
665  return E_FAIL;
666  }
667 
668  LPWSTR pszBuffer = strFontName.GetBuffer(cbInfo / sizeof(WCHAR));
669  ret = GetFontResourceInfoW(pszFontPath, &cbInfo, pszBuffer, 1);
670  strFontName.ReleaseBuffer();
671  if (ret)
672  {
673  TRACE("pszFontName: %S\n", (LPCWSTR)strFontName);
674  return S_OK;
675  }
676 
677  ERR("GetFontResourceInfoW failed\n");
678  return E_FAIL;
679 }
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define E_FAIL
Definition: ddrawi.h:102
unsigned int BOOL
Definition: ntddk_ex.h:94
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
#define ERR(fmt,...)
Definition: debug.h:110
#define S_OK
Definition: intsafe.h:52
#define NULL
Definition: types.h:112
BOOL WINAPI GetFontResourceInfoW(LPCWSTR lpFileName, DWORD *pdwBufSize, void *lpBuffer, DWORD dwType)
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by DoInstallFontFile().

◆ DoInstallFontFile()

HRESULT CFontExt::DoInstallFontFile ( LPCWSTR  pszFontPath,
LPCWSTR  pszFontsDir,
HKEY  hkeyFonts 
)

Definition at line 617 of file CFontExt.cpp.

618 {
619  WCHAR szDestFile[MAX_PATH];
620  LPCWSTR pszFileTitle = PathFindFileName(pszFontPath);
621 
622  CStringW strFontName;
623  if (!DoGetFontTitle(pszFontPath, strFontName))
624  return E_FAIL;
625 
626  RemoveFontResourceW(pszFileTitle);
627 
628  StringCchCopyW(szDestFile, sizeof(szDestFile), pszFontsDir);
629  PathAppendW(szDestFile, pszFileTitle);
630  if (!CopyFileW(pszFontPath, szDestFile, FALSE))
631  {
632  ERR("CopyFileW('%S', '%S') failed\n", pszFontPath, szDestFile);
633  return E_FAIL;
634  }
635 
636  if (!AddFontResourceW(szDestFile))
637  {
638  ERR("AddFontResourceW('%S') failed\n", pszFileTitle);
639  DeleteFileW(szDestFile);
640  return E_FAIL;
641  }
642 
643  DWORD cbData = (wcslen(pszFileTitle) + 1) * sizeof(WCHAR);
644  LONG nError = RegSetValueExW(hkeyFonts, strFontName, 0, REG_SZ,
645  (const BYTE *)pszFileTitle, cbData);
646  if (nError)
647  {
648  ERR("RegSetValueExW failed with %ld\n", nError);
649  RemoveFontResourceW(pszFileTitle);
650  DeleteFileW(szDestFile);
651  return E_FAIL;
652  }
653 
654  return S_OK;
655 }
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define E_FAIL
Definition: ddrawi.h:102
BOOL WINAPI PathAppendW(LPWSTR lpszPath, LPCWSTR lpszAppend)
Definition: path.c:126
int WINAPI AddFontResourceW(_In_ LPCWSTR pszFilename)
#define FALSE
Definition: types.h:117
long LONG
Definition: pedump.c:60
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
HRESULT DoGetFontTitle(IN LPCWSTR pszFontPath, OUT CStringW &strFontName)
Definition: CFontExt.cpp:658
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4895
__wchar_t WCHAR
Definition: xmlstorage.h:180
BOOL WINAPI CopyFileW(IN LPCWSTR lpExistingFileName, IN LPCWSTR lpNewFileName, IN BOOL bFailIfExists)
Definition: copy.c:439
#define MAX_PATH
Definition: compat.h:34
#define PathFindFileName
Definition: shlwapi.h:911
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL WINAPI RemoveFontResourceW(_In_ LPCWSTR)
unsigned char BYTE
Definition: xxhash.c:193
#define ERR(fmt,...)
Definition: debug.h:110
#define S_OK
Definition: intsafe.h:52
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define REG_SZ
Definition: layer.c:22

Referenced by Drop().

◆ DragEnter()

STDMETHODIMP CFontExt::DragEnter ( IDataObject pDataObj,
DWORD  grfKeyState,
POINTL  pt,
DWORD pdwEffect 
)
virtual

Implements IDropTarget.

Definition at line 504 of file CFontExt.cpp.

505 {
506  *pdwEffect = DROPEFFECT_NONE;
507 
508  CComHeapPtr<CIDA> cida;
509  HRESULT hr = _GetCidlFromDataObject(pDataObj, &cida);
510  if (FAILED_UNEXPECTEDLY(hr))
511  return hr;
512 
513  *pdwEffect = DROPEFFECT_COPY;
514  return S_OK;
515 }
HRESULT hr
Definition: shlfolder.c:183
HRESULT _GetCidlFromDataObject(IDataObject *pDataObject, CIDA **ppcida)
Definition: CFontMenu.cpp:14
const DWORD DROPEFFECT_COPY
Definition: oleidl.idl:930
const DWORD DROPEFFECT_NONE
Definition: oleidl.idl:929
LONG HRESULT
Definition: typedefs.h:79
#define FAILED_UNEXPECTEDLY(hr)
Definition: shellutils.h:82
#define S_OK
Definition: intsafe.h:52

◆ DragLeave()

STDMETHODIMP CFontExt::DragLeave ( void  )
virtual

Implements IDropTarget.

Definition at line 522 of file CFontExt.cpp.

523 {
524  return S_OK;
525 }
#define S_OK
Definition: intsafe.h:52

◆ DragOver()

STDMETHODIMP CFontExt::DragOver ( DWORD  grfKeyState,
POINTL  pt,
DWORD pdwEffect 
)
virtual

Implements IDropTarget.

Definition at line 517 of file CFontExt.cpp.

518 {
519  return S_OK;
520 }
#define S_OK
Definition: intsafe.h:52

◆ Drop()

STDMETHODIMP CFontExt::Drop ( IDataObject pDataObj,
DWORD  grfKeyState,
POINTL  pt,
DWORD pdwEffect 
)
virtual

Implements IDropTarget.

Definition at line 527 of file CFontExt.cpp.

528 {
529  *pdwEffect = DROPEFFECT_NONE;
530 
531  CComHeapPtr<CIDA> cida;
532  HRESULT hr = _GetCidlFromDataObject(pDataObj, &cida);
533  if (FAILED_UNEXPECTEDLY(hr))
534  return hr;
535 
536  PCUIDLIST_ABSOLUTE pidlParent = HIDA_GetPIDLFolder(cida);
537  if (!pidlParent)
538  {
539  ERR("pidlParent is NULL\n");
540  return E_FAIL;
541  }
542 
543  BOOL bOK = TRUE;
544  CAtlArray<CStringW> FontPaths;
545  for (UINT n = 0; n < cida->cidl; ++n)
546  {
547  PCUIDLIST_RELATIVE pidlRelative = HIDA_GetPIDLItem(cida, n);
548  if (!pidlRelative)
549  continue;
550 
551  PIDLIST_ABSOLUTE pidl = ILCombine(pidlParent, pidlRelative);
552  if (!pidl)
553  {
554  ERR("ILCombine failed\n");
555  bOK = FALSE;
556  break;
557  }
558 
561  ILFree(pidl);
562 
563  if (!ret)
564  {
565  ERR("SHGetPathFromIDListW failed\n");
566  bOK = FALSE;
567  break;
568  }
569 
571  {
572  ERR("PathIsDirectory\n");
573  bOK = FALSE;
574  break;
575  }
576 
577  LPCWSTR pchDotExt = PathFindExtensionW(szPath);
578  if (!IsFontDotExt(pchDotExt))
579  {
580  ERR("'%S' is not supported\n", pchDotExt);
581  bOK = FALSE;
582  break;
583  }
584 
585  FontPaths.Add(szPath);
586  }
587 
588  if (!bOK)
589  return E_FAIL;
590 
591  CRegKey keyFonts;
592  if (keyFonts.Open(FONT_HIVE, FONT_KEY, KEY_WRITE) != ERROR_SUCCESS)
593  {
594  ERR("keyFonts.Open failed\n");
595  return E_FAIL;
596  }
597 
598  for (size_t iItem = 0; iItem < FontPaths.GetCount(); ++iItem)
599  {
600  HRESULT hr = DoInstallFontFile(FontPaths[iItem], g_FontCache->FontPath(), keyFonts.m_hKey);
601  if (FAILED_UNEXPECTEDLY(hr))
602  {
603  bOK = FALSE;
604  break;
605  }
606  }
607 
608  // TODO: update g_FontCache
609 
611 
612  // TODO: Show message
613 
614  return bOK ? S_OK : E_FAIL;
615 }
BOOL WINAPI PathIsDirectoryW(LPCWSTR lpszPath)
Definition: path.c:1722
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:925
#define ERROR_SUCCESS
Definition: deptool.c:10
HRESULT hr
Definition: shlfolder.c:183
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define TRUE
Definition: types.h:120
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:699
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1294
static PCUIDLIST_RELATIVE HIDA_GetPIDLItem(CIDA const *pida, SIZE_T i)
Definition: shellutils.h:554
GLdouble n
Definition: glext.h:7729
HRESULT _GetCidlFromDataObject(IDataObject *pDataObject, CIDA **ppcida)
Definition: CFontMenu.cpp:14
#define E_FAIL
Definition: ddrawi.h:102
HKEY m_hKey
Definition: atlbase.h:1013
HRESULT DoInstallFontFile(LPCWSTR pszFontPath, LPCWSTR pszFontsDir, HKEY hkeyFonts)
Definition: CFontExt.cpp:617
const DWORD DROPEFFECT_NONE
Definition: oleidl.idl:929
size_t GetCount() const
Definition: atlcoll.h:373
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
BOOL IsFontDotExt(LPCWSTR pchDotExt)
Definition: precomp.h:41
#define FONT_KEY
Definition: precomp.h:31
LPWSTR WINAPI PathFindExtensionW(LPCWSTR lpszPath)
Definition: path.c:447
#define KEY_WRITE
Definition: nt_native.h:1031
size_t Add(INARGTYPE element)
Definition: atlcoll.h:295
#define FONT_HIVE
Definition: precomp.h:30
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:79
#define FAILED_UNEXPECTEDLY(hr)
Definition: shellutils.h:82
#define MAX_PATH
Definition: compat.h:34
LONG Open(HKEY hKeyParent, LPCTSTR lpszKeyName, REGSAM samDesired=KEY_READ|KEY_WRITE)
Definition: atlbase.h:1071
UINT cidl
Definition: shlobj.h:499
#define WM_FONTCHANGE
Definition: winuser.h:1615
int ret
CFontCache * g_FontCache
Definition: CFontCache.cpp:12
static PCUIDLIST_ABSOLUTE HIDA_GetPIDLFolder(CIDA const *pida)
Definition: shellutils.h:549
const CStringW & FontPath() const
Definition: CFontCache.hpp:52
#define ERR(fmt,...)
Definition: debug.h:110
#define S_OK
Definition: intsafe.h:52
const ITEMIDLIST_ABSOLUTE UNALIGNED * PCUIDLIST_ABSOLUTE
Definition: shtypes.idl:63
LPCWSTR szPath
Definition: env.c:37
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
unsigned int UINT
Definition: ndis.h:50
const ITEMIDLIST_RELATIVE UNALIGNED * PCUIDLIST_RELATIVE
Definition: shtypes.idl:57
#define HWND_BROADCAST
Definition: winuser.h:1190

◆ EnumObjects()

STDMETHODIMP CFontExt::EnumObjects ( HWND  hwndOwner,
DWORD  dwFlags,
LPENUMIDLIST *  ppEnumIDList 
)
virtual

Definition at line 240 of file CFontExt.cpp.

241 {
242  return _CEnumFonts_CreateInstance(this, dwFlags, IID_PPV_ARG(IEnumIDList, ppEnumIDList));
243 }
HRESULT _CEnumFonts_CreateInstance(CFontExt *zip, DWORD flags, REFIID riid, LPVOID *ppvOut)
Definition: CEnumFonts.cpp:87
#define IID_PPV_ARG(Itype, ppType)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175

◆ EnumSearches()

STDMETHODIMP CFontExt::EnumSearches ( IEnumExtraSearch **  ppenum)
virtual

Implements IShellFolder2.

Definition at line 105 of file CFontExt.cpp.

106 {
107  ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
108  return E_NOTIMPL;
109 }
#define ERR(fmt,...)
Definition: debug.h:110
#define E_NOTIMPL
Definition: ddrawi.h:99
#define __FUNCTION__
Definition: types.h:112

◆ GetAttributesOf()

STDMETHODIMP CFontExt::GetAttributesOf ( UINT  cidl,
PCUITEMID_CHILD_ARRAY  apidl,
DWORD rgfInOut 
)
virtual

Definition at line 345 of file CFontExt.cpp.

346 {
347  if (!rgfInOut || !cidl || !apidl)
348  return E_INVALIDARG;
349 
350  DWORD rgf = 0;
351  while (cidl > 0 && *apidl)
352  {
353  const FontPidlEntry* fontEntry = _FontFromIL(*apidl);
354  if (fontEntry)
355  {
356  // We don't support delete yet
357  rgf |= (/*SFGAO_CANDELETE |*/ SFGAO_HASPROPSHEET | SFGAO_CANCOPY | SFGAO_FILESYSTEM);
358  }
359  else
360  {
361  rgf = 0;
362  break;
363  }
364 
365  apidl++;
366  cidl--;
367  }
368 
369  *rgfInOut = rgf;
370  return S_OK;
371 }
const FontPidlEntry * _FontFromIL(LPCITEMIDLIST pidl)
Definition: fontpidl.cpp:32
#define E_INVALIDARG
Definition: ddrawi.h:101
unsigned long DWORD
Definition: ntddk_ex.h:95
#define S_OK
Definition: intsafe.h:52

◆ GetClassID()

STDMETHODIMP CFontExt::GetClassID ( CLSID lpClassId)
virtual

Implements IPersist.

Definition at line 497 of file CFontExt.cpp.

498 {
499  *lpClassId = CLSID_CFontExt;
500  return S_OK;
501 }
#define S_OK
Definition: intsafe.h:52
const GUID CLSID_CFontExt
Definition: fontext.cpp:12

◆ GetCurFolder()

STDMETHODIMP CFontExt::GetCurFolder ( LPITEMIDLIST ppidl)
virtual

Definition at line 453 of file CFontExt.cpp.

454 {
455  if (ppidl && m_Folder)
456  {
457  *ppidl = ILClone(m_Folder);
458  return S_OK;
459  }
460 
461  return E_POINTER;
462 }
CComHeapPtr< ITEMIDLIST > m_Folder
Definition: CFontExt.hpp:18
#define S_OK
Definition: intsafe.h:52
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:228
#define E_POINTER
Definition: winerror.h:2365

◆ GetDefaultColumn()

STDMETHODIMP CFontExt::GetDefaultColumn ( DWORD  dwReserved,
ULONG pSort,
ULONG pDisplay 
)
virtual

Implements IShellFolder2.

Definition at line 111 of file CFontExt.cpp.

112 {
113  ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
114  return E_NOTIMPL;
115 }
#define ERR(fmt,...)
Definition: debug.h:110
#define E_NOTIMPL
Definition: ddrawi.h:99
#define __FUNCTION__
Definition: types.h:112

◆ GetDefaultColumnState()

STDMETHODIMP CFontExt::GetDefaultColumnState ( UINT  iColumn,
SHCOLSTATEF pcsFlags 
)
virtual

Implements IShellFolder2.

Definition at line 117 of file CFontExt.cpp.

118 {
119  if (!pcsFlags || iColumn >= _countof(g_ColumnDefs))
120  return E_INVALIDARG;
121 
122  *pcsFlags = g_ColumnDefs[iColumn].dwDefaultState;
123  return S_OK;
124 }
DWORD dwDefaultState
Definition: CFontExt.cpp:21
#define E_INVALIDARG
Definition: ddrawi.h:101
static FolderViewColumns g_ColumnDefs[]
Definition: CFontExt.cpp:35
#define _countof(array)
Definition: sndvol32.h:68
#define S_OK
Definition: intsafe.h:52

◆ GetDefaultSearchGUID()

STDMETHODIMP CFontExt::GetDefaultSearchGUID ( GUID lpguid)
virtual

Implements IShellFolder2.

Definition at line 99 of file CFontExt.cpp.

100 {
101  ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
102  return E_NOTIMPL;
103 }
#define ERR(fmt,...)
Definition: debug.h:110
#define E_NOTIMPL
Definition: ddrawi.h:99
#define __FUNCTION__
Definition: types.h:112

◆ GetDetailsEx()

STDMETHODIMP CFontExt::GetDetailsEx ( PCUITEMID_CHILD  pidl,
const SHCOLUMNID pscid,
VARIANT pv 
)
virtual

Implements IShellFolder2.

Definition at line 126 of file CFontExt.cpp.

127 {
128  ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
129  return E_NOTIMPL;
130 }
#define ERR(fmt,...)
Definition: debug.h:110
#define E_NOTIMPL
Definition: ddrawi.h:99
#define __FUNCTION__
Definition: types.h:112

◆ GetDetailsOf()

STDMETHODIMP CFontExt::GetDetailsOf ( PCUITEMID_CHILD  pidl,
UINT  iColumn,
SHELLDETAILS psd 
)
virtual

Implements IShellFolder2.

Definition at line 132 of file CFontExt.cpp.

133 {
134  if (iColumn >= _countof(g_ColumnDefs))
135  return E_FAIL;
136 
137  psd->cxChar = g_ColumnDefs[iColumn].cxChar;
138  psd->fmt = g_ColumnDefs[iColumn].fmt;
139 
140  // No item requested, so return the column name
141  if (pidl == NULL)
142  {
143  return SHSetStrRet(&psd->str, _AtlBaseModule.GetResourceInstance(), g_ColumnDefs[iColumn].iResource);
144  }
145 
146  // Validate that this pidl is the last one
147  PCUIDLIST_RELATIVE curpidl = ILGetNext(pidl);
148  if (curpidl->mkid.cb != 0)
149  {
150  ERR("ERROR, unhandled PIDL!\n");
151  return E_FAIL;
152  }
153 
154  // Name, ReactOS specific?
155  if (iColumn == FONTEXT_COL_NAME)
156  return GetDisplayNameOf(pidl, 0, &psd->str);
157 
158  const FontPidlEntry* fontEntry = _FontFromIL(pidl);
159  if (!fontEntry)
160  {
161  ERR("ERROR, not a font PIDL!\n");
162  return E_FAIL;
163  }
164 
165  // If we got here, we are in details view!
166  auto info = g_FontCache->Find(fontEntry);
167  if (info == nullptr)
168  {
169  ERR("Unable to query info about %S\n", fontEntry->Name);
171  }
172 
173  int ret;
174  CStringA AttrLetters;
177  switch (iColumn)
178  {
180  return SHSetStrRet(&psd->str, PathFindFileNameW(info->File()));
181  case FONTEXT_COL_SIZE:
182  psd->str.uType = STRRET_CSTR;
183  StrFormatKBSizeA(info->FileSize().QuadPart, psd->str.cStr, MAX_PATH);
184  return S_OK;
186  psd->str.uType = STRRET_CSTR;
187  FileTimeToSystemTime(&info->FileWriteTime(), &time);
189  if (ret < 1)
190  {
191  ERR("GetDateFormatA failed\n");
192  return E_FAIL;
193  }
194  psd->str.cStr[ret-1] = ' ';
196  return S_OK;
197  case FONTEXT_COL_ATTR:
198  AttrLetters.LoadString(IDS_COL_ATTR_LETTERS);
199  if (AttrLetters.GetLength() != 5)
200  {
201  ERR("IDS_COL_ATTR_LETTERS does not contain 5 letters!\n");
202  return E_FAIL;
203  }
204  psd->str.uType = STRRET_CSTR;
205  dwAttributes = info->FileAttributes();
206  ret = 0;
208  psd->str.cStr[ret++] = AttrLetters[0];
210  psd->str.cStr[ret++] = AttrLetters[1];
212  psd->str.cStr[ret++] = AttrLetters[2];
214  psd->str.cStr[ret++] = AttrLetters[3];
216  psd->str.cStr[ret++] = AttrLetters[4];
217  psd->str.cStr[ret] = '\0';
218  return S_OK;
219  default:
220  break;
221  }
222 
224  return E_NOTIMPL;
225 }
int GetLength() const
Definition: atlsimpstr.h:356
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
INT WINAPI GetDateFormatA(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCSTR lpFormat, LPSTR lpDateStr, INT cchOut)
Definition: lcformat.c:922
#define FILE_ATTRIBUTE_SYSTEM
Definition: nt_native.h:704
#define LOCALE_USER_DEFAULT
#define DATE_SHORTDATE
Definition: winnls.h:196
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:851
const FontPidlEntry * _FontFromIL(LPCITEMIDLIST pidl)
Definition: fontpidl.cpp:32
LPSTR WINAPI StrFormatKBSizeA(LONGLONG llBytes, LPSTR lpszDest, UINT cchMax)
Definition: string.c:1727
__u16 time
Definition: mkdosfs.c:366
#define E_FAIL
Definition: ddrawi.h:102
STRRET str
Definition: shtypes.idl:108
DWORD dwAttributes
Definition: vdmdbg.h:34
INT WINAPI GetTimeFormatA(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCSTR lpFormat, LPSTR lpTimeStr, INT cchOut)
Definition: lcformat.c:1030
char cStr[MAX_PATH]
Definition: shtypes.idl:98
virtual STDMETHODIMP GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet)
Definition: CFontExt.cpp:417
static FolderViewColumns g_ColumnDefs[]
Definition: CFontExt.cpp:35
LPWSTR WINAPI PathFindFileNameW(LPCWSTR lpszPath)
Definition: path.c:394
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:188
#define _countof(array)
Definition: sndvol32.h:68
#define MAX_PATH
Definition: compat.h:34
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
unsigned long DWORD
Definition: ntddk_ex.h:95
#define FILE_ATTRIBUTE_COMPRESSED
Definition: nt_native.h:711
#define FILE_ATTRIBUTE_ARCHIVE
Definition: nt_native.h:706
int ret
CFontCache * g_FontCache
Definition: CFontCache.cpp:12
WCHAR Name[1]
Definition: fontpidl.hpp:17
#define ERR(fmt,...)
Definition: debug.h:110
#define S_OK
Definition: intsafe.h:52
#define IDS_COL_ATTR_LETTERS
Definition: resource.h:11
#define E_NOTIMPL
Definition: ddrawi.h:99
#define FILE_ATTRIBUTE_HIDDEN
Definition: nt_native.h:703
#define NULL
Definition: types.h:112
const ITEMIDLIST_RELATIVE UNALIGNED * PCUIDLIST_RELATIVE
Definition: shtypes.idl:57
CFontInfo * Find(const FontPidlEntry *fontEntry)
Definition: CFontCache.cpp:145
BOOL LoadString(_In_ UINT nID)
Definition: cstringt.h:591
#define UNIMPLEMENTED
Definition: debug.h:115
#define TIME_NOSECONDS
Definition: winnls.h:278
UINT uType
Definition: shtypes.idl:93

◆ GetDisplayNameOf()

STDMETHODIMP CFontExt::GetDisplayNameOf ( PCUITEMID_CHILD  pidl,
DWORD  dwFlags,
LPSTRRET  strRet 
)
virtual

Definition at line 417 of file CFontExt.cpp.

418 {
419  if (!pidl)
420  return E_NOTIMPL;
421 
422  // Validate that this pidl is the last one
423  PCUIDLIST_RELATIVE curpidl = ILGetNext(pidl);
424  if (curpidl->mkid.cb != 0)
425  {
426  ERR("ERROR, unhandled PIDL!\n");
427  return E_FAIL;
428  }
429 
430  const FontPidlEntry* fontEntry = _FontFromIL(pidl);
431  if (!fontEntry)
432  return E_FAIL;
433 
434  if (dwFlags == SHGDN_FORPARSING)
435  {
436  CStringW File = g_FontCache->Filename(g_FontCache->Find(fontEntry), true);
437  if (!File.IsEmpty())
438  {
439  return SHSetStrRet(strRet, File);
440  }
441  }
442 
443  return SHSetStrRet(strRet, fontEntry->Name);
444 }
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:851
const FontPidlEntry * _FontFromIL(LPCITEMIDLIST pidl)
Definition: fontpidl.cpp:32
#define E_FAIL
Definition: ddrawi.h:102
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
CFontCache * g_FontCache
Definition: CFontCache.cpp:12
WCHAR Name[1]
Definition: fontpidl.hpp:17
#define ERR(fmt,...)
Definition: debug.h:110
#define E_NOTIMPL
Definition: ddrawi.h:99
const ITEMIDLIST_RELATIVE UNALIGNED * PCUIDLIST_RELATIVE
Definition: shtypes.idl:57
CFontInfo * Find(const FontPidlEntry *fontEntry)
Definition: CFontCache.cpp:145
CStringW Filename(CFontInfo *info, bool alwaysFullPath=false)
Definition: CFontCache.cpp:164
Definition: File.h:15

Referenced by GetDetailsOf().

◆ GetUIObjectOf()

STDMETHODIMP CFontExt::GetUIObjectOf ( HWND  hwndOwner,
UINT  cidl,
PCUITEMID_CHILD_ARRAY  apidl,
REFIID  riid,
UINT prgfInOut,
LPVOID ppvOut 
)
virtual

Definition at line 374 of file CFontExt.cpp.

375 {
376  if (riid == IID_IContextMenu ||
377  riid == IID_IContextMenu2 ||
378  riid == IID_IContextMenu3)
379  {
380  return _CFontMenu_CreateInstance(hwndOwner, cidl, apidl, this, riid, ppvOut);
381  }
382  else if (riid == IID_IExtractIconA || riid == IID_IExtractIconW)
383  {
384  if (cidl == 1)
385  {
386  const FontPidlEntry* fontEntry = _FontFromIL(*apidl);
387  if (fontEntry)
388  {
391  // Just create a default icon extractor based on the filename
392  // We might want to create a preview with the font to get really fancy one day.
394  }
395  }
396  else
397  {
398  ERR("IID_IExtractIcon with cidl != 1 UNIMPLEMENTED\n");
399  }
400  }
401  else if (riid == IID_IDataObject)
402  {
403  if (cidl >= 1)
404  {
405  return _CDataObject_CreateInstance(m_Folder, cidl, apidl, riid, ppvOut);
406  }
407  else
408  {
409  ERR("IID_IDataObject with cidl == 0 UNIMPLEMENTED\n");
410  }
411  }
412 
413  //ERR("%s(riid=%S) UNIMPLEMENTED\n", __FUNCTION__, g2s(riid));
414  return E_NOTIMPL;
415 }
REFIID riid
Definition: precomp.h:44
const FontPidlEntry * _FontFromIL(LPCITEMIDLIST pidl)
Definition: fontpidl.cpp:32
const GUID IID_IDataObject
DWORD dwAttributes
Definition: vdmdbg.h:34
HRESULT _CFontMenu_CreateInstance(HWND hwnd, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, IShellFolder *psf, REFIID riid, LPVOID *ppvOut)
Definition: CFontMenu.cpp:146
unsigned long DWORD
Definition: ntddk_ex.h:95
EXTERN_C HRESULT WINAPI SHCreateFileExtractIconW(LPCWSTR pszPath, DWORD dwFileAttributes, REFIID riid, void **ppv)
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
CFontCache * g_FontCache
Definition: CFontCache.cpp:12
CComHeapPtr< ITEMIDLIST > m_Folder
Definition: CFontExt.hpp:18
#define ERR(fmt,...)
Definition: debug.h:110
#define E_NOTIMPL
Definition: ddrawi.h:99
CFontInfo * Find(const FontPidlEntry *fontEntry)
Definition: CFontCache.cpp:145
HRESULT _CDataObject_CreateInstance(PCIDLIST_ABSOLUTE folder, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, LPVOID *ppvOut)
Definition: CDataObject.cpp:38
CStringW Filename(CFontInfo *info, bool alwaysFullPath=false)
Definition: CFontCache.cpp:164
Definition: File.h:15

◆ Initialize()

STDMETHODIMP CFontExt::Initialize ( LPCITEMIDLIST  pidl)
virtual

Definition at line 466 of file CFontExt.cpp.

467 {
468  WCHAR PidlPath[MAX_PATH + 1] = {0}, FontsDir[MAX_PATH + 1];
469  if (!SHGetPathFromIDListW(pidl, PidlPath))
470  {
471  ERR("Unable to extract path from pidl\n");
472  return E_FAIL;
473  }
474 
475  HRESULT hr = SHGetFolderPathW(NULL, CSIDL_FONTS, NULL, 0, FontsDir);
476  if (FAILED_UNEXPECTEDLY(hr))
477  {
478  ERR("Unable to get fonts path (0x%x)\n", hr);
479  return hr;
480  }
481 
482  if (_wcsicmp(PidlPath, FontsDir))
483  {
484  ERR("CFontExt View initializing on unexpected folder: '%S'\n", PidlPath);
485  return E_FAIL;
486  }
487 
488  m_Folder.Attach(ILClone(pidl));
489  StringCchCatW(FontsDir, _countof(FontsDir), L"\\");
490  g_FontCache->SetFontDir(FontsDir);
491 
492  return S_OK;
493 }
HRESULT hr
Definition: shlfolder.c:183
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1294
#define CSIDL_FONTS
Definition: shlobj.h:2031
#define E_FAIL
Definition: ddrawi.h:102
STRSAFEAPI StringCchCatW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:325
void SetFontDir(const LPCWSTR Path)
Definition: CFontCache.cpp:120
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:79
#define _countof(array)
Definition: sndvol32.h:68
#define FAILED_UNEXPECTEDLY(hr)
Definition: shellutils.h:82
#define MAX_PATH
Definition: compat.h:34
static const WCHAR L[]
Definition: oid.c:1250
CFontCache * g_FontCache
Definition: CFontCache.cpp:12
CComHeapPtr< ITEMIDLIST > m_Folder
Definition: CFontExt.hpp:18
#define ERR(fmt,...)
Definition: debug.h:110
#define S_OK
Definition: intsafe.h:52
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:228
#define NULL
Definition: types.h:112
HRESULT WINAPI SHGetFolderPathW(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath)
Definition: shellpath.c:2447
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)

◆ MapColumnToSCID()

STDMETHODIMP CFontExt::MapColumnToSCID ( UINT  iColumn,
SHCOLUMNID pscid 
)
virtual

Implements IShellFolder2.

Definition at line 227 of file CFontExt.cpp.

228 {
229  //ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
230  return E_NOTIMPL;
231 }
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ ParseDisplayName()

STDMETHODIMP CFontExt::ParseDisplayName ( HWND  hwndOwner,
LPBC  pbc,
LPOLESTR  lpszDisplayName,
DWORD pchEaten,
PIDLIST_RELATIVE ppidl,
DWORD pdwAttributes 
)
virtual

Definition at line 234 of file CFontExt.cpp.

235 {
236  ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
237  return E_NOTIMPL;
238 }
#define ERR(fmt,...)
Definition: debug.h:110
#define E_NOTIMPL
Definition: ddrawi.h:99
#define __FUNCTION__
Definition: types.h:112

◆ SetNameOf()

STDMETHODIMP CFontExt::SetNameOf ( HWND  hwndOwner,
PCUITEMID_CHILD  pidl,
LPCOLESTR  lpName,
DWORD  dwFlags,
PITEMID_CHILD pPidlOut 
)
virtual

Implements IShellFolder.

Definition at line 446 of file CFontExt.cpp.

447 {
448  ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
449  return E_NOTIMPL;
450 }
#define ERR(fmt,...)
Definition: debug.h:110
#define E_NOTIMPL
Definition: ddrawi.h:99
#define __FUNCTION__
Definition: types.h:112

Member Data Documentation

◆ m_Folder

CComHeapPtr<ITEMIDLIST> CFontExt::m_Folder
private

Definition at line 18 of file CFontExt.hpp.

Referenced by GetCurFolder(), GetUIObjectOf(), and Initialize().


The documentation for this class was generated from the following files: