ReactOS 0.4.16-dev-1020-gf135cab
CFontExt Class Reference

#include <CFontExt.hpp>

Inheritance diagram for CFontExt:
Collaboration diagram for CFontExt:

Public Member Functions

 CFontExt ()
 
 ~CFontExt ()
 
STDMETHODIMP GetDefaultSearchGUID (GUID *lpguid) override
 
STDMETHODIMP EnumSearches (IEnumExtraSearch **ppenum) override
 
STDMETHODIMP GetDefaultColumn (DWORD dwReserved, ULONG *pSort, ULONG *pDisplay) override
 
STDMETHODIMP GetDefaultColumnState (UINT iColumn, SHCOLSTATEF *pcsFlags) override
 
STDMETHODIMP GetDetailsEx (PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv) override
 
STDMETHODIMP GetDetailsOf (PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd) override
 
STDMETHODIMP MapColumnToSCID (UINT iColumn, SHCOLUMNID *pscid) override
 
STDMETHODIMP ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) override
 
STDMETHODIMP EnumObjects (HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList) override
 
STDMETHODIMP BindToObject (PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override
 
STDMETHODIMP BindToStorage (PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override
 
STDMETHODIMP CompareIDs (LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2) override
 
STDMETHODIMP CreateViewObject (HWND hwndOwner, REFIID riid, LPVOID *ppvOut) override
 
STDMETHODIMP GetAttributesOf (UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut) override
 
STDMETHODIMP GetUIObjectOf (HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut, LPVOID *ppvOut) override
 
STDMETHODIMP GetDisplayNameOf (PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet) override
 
STDMETHODIMP SetNameOf (HWND hwndOwner, PCUITEMID_CHILD pidl, LPCOLESTR lpName, DWORD dwFlags, PITEMID_CHILD *pPidlOut) override
 
STDMETHODIMP GetCurFolder (LPITEMIDLIST *ppidl) override
 
STDMETHODIMP Initialize (LPCITEMIDLIST pidl) override
 
STDMETHODIMP GetClassID (CLSID *lpClassId) override
 
STDMETHODIMP DragEnter (IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
 
STDMETHODIMP DragOver (DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
 
STDMETHODIMP DragLeave () override
 
STDMETHODIMP Drop (IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
 
- 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 ()
 
HRESULT GetDefaultSearchGUID ([out] GUID *lpguid)
 
HRESULT EnumSearches ([out] IEnumExtraSearch **ppenum)
 
HRESULT GetDefaultColumn ([in] DWORD dwReserved, [out] ULONG *pSort, [out] ULONG *pDisplay)
 
HRESULT GetDefaultColumnState ([in] UINT iColumn, [out] SHCOLSTATEF *pcsFlags)
 
HRESULT GetDetailsEx ([in] PCUITEMID_CHILD pidl, [in] const SHCOLUMNID *pscid, [out] VARIANT *pv)
 
HRESULT GetDetailsOf ([in] PCUITEMID_CHILD pidl, [in] UINT iColumn, [out] SHELLDETAILS *psd)
 
HRESULT MapColumnToSCID ([in] UINT iColumn, [in] SHCOLUMNID *pscid)
 
- 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 CompareIDs ([in] LPARAM lParam, [in] PCUIDLIST_RELATIVE pidl1, [in] PCUIDLIST_RELATIVE pidl2)
 
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)
 
HRESULT SetNameOf ([in] HWND hwnd, [in] PCUITEMID_CHILD pidl, [in, string] LPCOLESTR lpszName, [in] SHGDNF uFlags, [out] PITEMID_CHILD *ppidlOut)
 
- 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)
 
HRESULT GetClassID ([out] CLSID *pClassID)
 
HRESULT DragEnter ([in, unique] IDataObject *pDataObj, [in] DWORD grfKeyState, [in] POINTL pt, [in, out] DWORD *pdwEffect)
 
HRESULT DragOver ([in] DWORD grfKeyState, [in] POINTL pt, [in, out] DWORD *pdwEffect)
 
HRESULT DragLeave ()
 
HRESULT Drop ([in, unique] IDataObject *pDataObj, [in] DWORD grfKeyState, [in] POINTL pt, [in, out] DWORD *pdwEffect)
 

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
 
typedef ULONG SFGAOF
 
- 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 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 80 of file CFontExt.cpp.

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

◆ ~CFontExt()

CFontExt::~CFontExt ( )

Definition at line 85 of file CFontExt.cpp.

86{
88}
#define InterlockedDecrement
Definition: armddk.h:52

Member Function Documentation

◆ BindToObject()

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

Definition at line 237 of file CFontExt.cpp.

238{
239 ERR("%s(riid=%S) UNIMPLEMENTED\n", __FUNCTION__, g2s(riid));
240 return E_NOTIMPL;
241}
WCHAR * g2s(REFCLSID iid)
Definition: CFontExt.cpp:55
#define ERR(fmt,...)
Definition: precomp.h:57
#define E_NOTIMPL
Definition: ddrawi.h:99
#define __FUNCTION__
Definition: types.h:116
REFIID riid
Definition: atlbase.h:39

◆ BindToStorage()

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

Definition at line 243 of file CFontExt.cpp.

244{
245 ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
246 return E_NOTIMPL;
247}

◆ CompareIDs()

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

Implements IShellFolder.

Definition at line 249 of file CFontExt.cpp.

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

◆ CreateViewObject()

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

Definition at line 308 of file CFontExt.cpp.

309{
311
312 *ppvOut = NULL;
313
314 if (IsEqualIID(riid, IID_IDropTarget))
315 {
316 ERR("IDropTarget not implemented\n");
317 *ppvOut = static_cast<IDropTarget *>(this);
318 AddRef();
319 hr = S_OK;
320 }
321 else if (IsEqualIID(riid, IID_IContextMenu))
322 {
323 ERR("IContextMenu not implemented\n");
324 hr = E_NOTIMPL;
325 }
326 else if (IsEqualIID(riid, IID_IShellView))
327 {
328 // Just create a default shell folder view, and register ourself as folder
329 SFV_CREATE sfv = { sizeof(SFV_CREATE) };
330 sfv.pshf = this;
331 hr = SHCreateShellFolderView(&sfv, (IShellView**)ppvOut);
332 }
333
334 return hr;
335}
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
Definition: CDefView.cpp:4794
#define NULL
Definition: types.h:112
ULONG AddRef()
#define S_OK
Definition: intsafe.h:52
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
HRESULT hr
Definition: shlfolder.c:183
struct _SFV_CREATE SFV_CREATE
IShellFolder * pshf
Definition: shlobj.h:1366
#define E_NOINTERFACE
Definition: winerror.h:2364

◆ DragEnter()

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

Implements IDropTarget.

Definition at line 493 of file CFontExt.cpp.

494{
495 *pdwEffect = DROPEFFECT_NONE;
496
497 CDataObjectHIDA cida(pDataObj);
498 if (FAILED_UNEXPECTEDLY(cida.hr()))
499 return cida.hr();
500
501 *pdwEffect = DROPEFFECT_COPY;
502 return S_OK;
503}
#define FAILED_UNEXPECTEDLY(hr)
Definition: debug.h:83
const DWORD DROPEFFECT_NONE
Definition: oleidl.idl:929
const DWORD DROPEFFECT_COPY
Definition: oleidl.idl:930

◆ DragLeave()

STDMETHODIMP CFontExt::DragLeave ( void  )
override

Implements IDropTarget.

Definition at line 510 of file CFontExt.cpp.

511{
512 return S_OK;
513}

◆ DragOver()

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

Implements IDropTarget.

Definition at line 505 of file CFontExt.cpp.

506{
507 return S_OK;
508}

◆ Drop()

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

Implements IDropTarget.

Definition at line 515 of file CFontExt.cpp.

516{
517 *pdwEffect = DROPEFFECT_NONE;
518
519 CDataObjectHIDA cida(pDataObj);
520 if (!cida || cida->cidl <= 0)
521 return E_UNEXPECTED;
522
523 PCUIDLIST_ABSOLUTE pidlParent = HIDA_GetPIDLFolder(cida);
524 if (!pidlParent)
525 {
526 ERR("pidlParent is NULL\n");
527 return E_FAIL;
528 }
529
531 for (UINT n = 0; n < cida->cidl; ++n)
532 {
533 PCUIDLIST_RELATIVE pidlRelative = HIDA_GetPIDLItem(cida, n);
534 if (!pidlRelative)
535 return E_FAIL;
536
537 apidl.Add(pidlRelative);
538 }
539
540 CStringW strMessage;
541 if (InstallFontFiles(strMessage, pidlParent, cida->cidl, &apidl[0]) != S_OK)
542 {
543 // TODO: Show message
544 return E_FAIL;
545 }
546
547 // Invalidate our cache
548 g_FontCache->Read();
549
550 // Notify the system that a font was added
552
553 // Notify the shell that the folder contents are changed
555
556 // TODO: Show message
557
558 return S_OK;
559}
EXTERN_C void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
size_t Add(INARGTYPE element)
Definition: atlcoll.h:295
PXSTR GetString() noexcept
Definition: atlsimpstr.h:367
void Read()
Definition: CFontCache.cpp:200
const CStringW & FontPath() const
Definition: CFontCache.hpp:51
#define E_FAIL
Definition: ddrawi.h:102
HRESULT InstallFontFiles(_Out_ CStringW &strMsg, _In_ PCUIDLIST_ABSOLUTE pidlParent, _In_ UINT cidl, _In_ PCUITEMID_CHILD_ARRAY apidl)
Definition: fontext.cpp:104
GLdouble n
Definition: glext.h:7729
unsigned int UINT
Definition: ndis.h:50
static PCUIDLIST_RELATIVE HIDA_GetPIDLItem(CIDA const *pida, SIZE_T i)
Definition: shellutils.h:641
static PCUIDLIST_ABSOLUTE HIDA_GetPIDLFolder(CIDA const *pida)
Definition: shellutils.h:636
#define SHCNE_UPDATEDIR
Definition: shlobj.h:1910
#define SHCNF_PATHW
Definition: shlobj.h:1933
const ITEMIDLIST_ABSOLUTE UNALIGNED * PCUIDLIST_ABSOLUTE
Definition: shtypes.idl:63
const ITEMIDLIST_RELATIVE UNALIGNED * PCUIDLIST_RELATIVE
Definition: shtypes.idl:57
#define E_UNEXPECTED
Definition: winerror.h:2456
#define HWND_BROADCAST
Definition: winuser.h:1215
#define WM_FONTCHANGE
Definition: winuser.h:1644
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

◆ EnumObjects()

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

Definition at line 232 of file CFontExt.cpp.

233{
234 return _CEnumFonts_CreateInstance(this, dwFlags, IID_PPV_ARG(IEnumIDList, ppEnumIDList));
235}
HRESULT _CEnumFonts_CreateInstance(CFontExt *zip, DWORD flags, REFIID riid, LPVOID *ppvOut)
Definition: CEnumFonts.cpp:97
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
#define IID_PPV_ARG(Itype, ppType)

◆ EnumSearches()

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

Implements IShellFolder2.

Definition at line 97 of file CFontExt.cpp.

98{
99 ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
100 return E_NOTIMPL;
101}

◆ GetAttributesOf()

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

Definition at line 337 of file CFontExt.cpp.

338{
339 if (!rgfInOut || !cidl || !apidl)
340 return E_INVALIDARG;
341
342 DWORD rgf = 0;
343 while (cidl > 0 && *apidl)
344 {
345 const FontPidlEntry* fontEntry = _FontFromIL(*apidl);
346 if (fontEntry)
347 {
348 // We don't support delete yet
349 rgf |= (/*SFGAO_CANDELETE |*/ SFGAO_HASPROPSHEET | SFGAO_CANCOPY | SFGAO_FILESYSTEM);
350 }
351 else
352 {
353 rgf = 0;
354 break;
355 }
356
357 apidl++;
358 cidl--;
359 }
360
361 *rgfInOut = rgf;
362 return S_OK;
363}

◆ GetClassID()

STDMETHODIMP CFontExt::GetClassID ( CLSID lpClassId)
override

Implements IPersist.

Definition at line 486 of file CFontExt.cpp.

487{
488 *lpClassId = CLSID_CFontExt;
489 return S_OK;
490}
const GUID CLSID_CFontExt
Definition: fontext.cpp:13

◆ GetCurFolder()

STDMETHODIMP CFontExt::GetCurFolder ( LPITEMIDLIST ppidl)
override

Definition at line 444 of file CFontExt.cpp.

445{
446 if (ppidl && m_Folder)
447 {
448 *ppidl = ILClone(m_Folder);
449 return S_OK;
450 }
451
452 return E_POINTER;
453}
CComHeapPtr< ITEMIDLIST > m_Folder
Definition: CFontExt.hpp:18
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:237
#define E_POINTER
Definition: winerror.h:2365

◆ GetDefaultColumn()

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

Implements IShellFolder2.

Definition at line 103 of file CFontExt.cpp.

104{
105 ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
106 return E_NOTIMPL;
107}

◆ GetDefaultColumnState()

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

Implements IShellFolder2.

Definition at line 109 of file CFontExt.cpp.

110{
111 if (!pcsFlags || iColumn >= _countof(g_ColumnDefs))
112 return E_INVALIDARG;
113
114 *pcsFlags = g_ColumnDefs[iColumn].dwDefaultState;
115 return S_OK;
116}
static FolderViewColumns g_ColumnDefs[]
Definition: CFontExt.cpp:34
#define _countof(array)
Definition: sndvol32.h:70
DWORD dwDefaultState
Definition: CFontExt.cpp:20

◆ GetDefaultSearchGUID()

STDMETHODIMP CFontExt::GetDefaultSearchGUID ( GUID lpguid)
override

Implements IShellFolder2.

Definition at line 91 of file CFontExt.cpp.

92{
93 ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
94 return E_NOTIMPL;
95}

◆ GetDetailsEx()

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

Implements IShellFolder2.

Definition at line 118 of file CFontExt.cpp.

119{
120 ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
121 return E_NOTIMPL;
122}

◆ GetDetailsOf()

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

Implements IShellFolder2.

Definition at line 124 of file CFontExt.cpp.

125{
126 if (iColumn >= _countof(g_ColumnDefs))
127 return E_FAIL;
128
129 psd->cxChar = g_ColumnDefs[iColumn].cxChar;
130 psd->fmt = g_ColumnDefs[iColumn].fmt;
131
132 // No item requested, so return the column name
133 if (pidl == NULL)
134 {
135 return SHSetStrRet(&psd->str, _AtlBaseModule.GetResourceInstance(), g_ColumnDefs[iColumn].iResource);
136 }
137
138 // Validate that this pidl is the last one
139 PCUIDLIST_RELATIVE curpidl = ILGetNext(pidl);
140 if (curpidl->mkid.cb != 0)
141 {
142 ERR("ERROR, unhandled PIDL!\n");
143 return E_FAIL;
144 }
145
146 // Name, ReactOS specific?
147 if (iColumn == FONTEXT_COL_NAME)
148 return GetDisplayNameOf(pidl, 0, &psd->str);
149
150 const FontPidlEntry* fontEntry = _FontFromIL(pidl);
151 if (!fontEntry)
152 {
153 ERR("ERROR, not a font PIDL!\n");
154 return E_FAIL;
155 }
156
157 // If we got here, we are in details view!
158 auto info = g_FontCache->Find(fontEntry);
159 if (info == nullptr)
160 {
161 ERR("Unable to query info about %S\n", fontEntry->Name);
163 }
164
165 int ret;
166 CStringA AttrLetters;
169 switch (iColumn)
170 {
172 return SHSetStrRet(&psd->str, PathFindFileNameW(info->File()));
173 case FONTEXT_COL_SIZE:
174 psd->str.uType = STRRET_CSTR;
175 StrFormatKBSizeA(info->FileSize().QuadPart, psd->str.cStr, MAX_PATH);
176 return S_OK;
178 psd->str.uType = STRRET_CSTR;
179 FileTimeToSystemTime(&info->FileWriteTime(), &time);
181 if (ret < 1)
182 {
183 ERR("GetDateFormatA failed\n");
184 return E_FAIL;
185 }
186 psd->str.cStr[ret-1] = ' ';
188 return S_OK;
189 case FONTEXT_COL_ATTR:
190 AttrLetters.LoadString(IDS_COL_ATTR_LETTERS);
191 if (AttrLetters.GetLength() != 5)
192 {
193 ERR("IDS_COL_ATTR_LETTERS does not contain 5 letters!\n");
194 return E_FAIL;
195 }
196 psd->str.uType = STRRET_CSTR;
197 dwAttributes = info->FileAttributes();
198 ret = 0;
200 psd->str.cStr[ret++] = AttrLetters[0];
202 psd->str.cStr[ret++] = AttrLetters[1];
204 psd->str.cStr[ret++] = AttrLetters[2];
206 psd->str.cStr[ret++] = AttrLetters[3];
208 psd->str.cStr[ret++] = AttrLetters[4];
209 psd->str.cStr[ret] = '\0';
210 return S_OK;
211 default:
212 break;
213 }
214
216 return E_NOTIMPL;
217}
int GetLength() const noexcept
Definition: atlsimpstr.h:362
BOOL LoadString(_In_ UINT nID)
Definition: cstringt.h:639
STDMETHODIMP GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet) override
Definition: CFontExt.cpp:408
#define IDS_COL_ATTR_LETTERS
Definition: resource.h:11
#define MAX_PATH
Definition: compat.h:34
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:188
LPSTR WINAPI StrFormatKBSizeA(LONGLONG llBytes, LPSTR lpszDest, UINT cchMax)
Definition: string.c:1741
INT WINAPI GetTimeFormatA(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCSTR lpFormat, LPSTR lpTimeStr, INT cchOut)
Definition: lcformat.c:1040
INT WINAPI GetDateFormatA(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCSTR lpFormat, LPSTR lpDateStr, INT cchOut)
Definition: lcformat.c:932
__u16 time
Definition: mkdosfs.c:8
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
#define FILE_ATTRIBUTE_COMPRESSED
Definition: nt_native.h:711
#define FILE_ATTRIBUTE_HIDDEN
Definition: nt_native.h:703
#define FILE_ATTRIBUTE_SYSTEM
Definition: nt_native.h:704
#define FILE_ATTRIBUTE_ARCHIVE
Definition: nt_native.h:706
#define LOCALE_USER_DEFAULT
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:970
@ STRRET_CSTR
Definition: shtypes.idl:87
STRRET str
Definition: shtypes.idl:108
char cStr[MAX_PATH]
Definition: shtypes.idl:98
UINT uType
Definition: shtypes.idl:93
DWORD dwAttributes
Definition: vdmdbg.h:34
int ret
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
#define TIME_NOSECONDS
Definition: winnls.h:280
#define DATE_SHORTDATE
Definition: winnls.h:198

◆ GetDisplayNameOf()

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

Definition at line 408 of file CFontExt.cpp.

409{
410 if (!pidl)
411 return E_NOTIMPL;
412
413 // Validate that this pidl is the last one
414 PCUIDLIST_RELATIVE curpidl = ILGetNext(pidl);
415 if (curpidl->mkid.cb != 0)
416 {
417 ERR("ERROR, unhandled PIDL!\n");
418 return E_FAIL;
419 }
420
421 const FontPidlEntry* fontEntry = _FontFromIL(pidl);
422 if (!fontEntry)
423 return E_FAIL;
424
426 {
427 CStringW File = g_FontCache->Filename(g_FontCache->Find(fontEntry), true);
428 if (!File.IsEmpty())
429 {
430 return SHSetStrRet(strRet, File);
431 }
432 }
433
434 return SHSetStrRet(strRet, fontEntry->Name);
435}
CStringW Filename(CFontInfo *info, bool alwaysFullPath=false)
Definition: CFontCache.cpp:164
Definition: File.h:16

Referenced by GetDetailsOf().

◆ GetUIObjectOf()

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

Definition at line 365 of file CFontExt.cpp.

366{
367 if (riid == IID_IContextMenu ||
368 riid == IID_IContextMenu2 ||
369 riid == IID_IContextMenu3)
370 {
371 return _CFontMenu_CreateInstance(hwndOwner, cidl, apidl, this, riid, ppvOut);
372 }
373 else if (riid == IID_IExtractIconA || riid == IID_IExtractIconW)
374 {
375 if (cidl == 1)
376 {
377 const FontPidlEntry* fontEntry = _FontFromIL(*apidl);
378 if (fontEntry)
379 {
382 // Just create a default icon extractor based on the filename
383 // We might want to create a preview with the font to get really fancy one day.
385 }
386 }
387 else
388 {
389 ERR("IID_IExtractIcon with cidl != 1 UNIMPLEMENTED\n");
390 }
391 }
392 else if (riid == IID_IDataObject)
393 {
394 if (cidl >= 1)
395 {
396 return _CDataObject_CreateInstance(m_Folder, cidl, apidl, riid, ppvOut);
397 }
398 else
399 {
400 ERR("IID_IDataObject with cidl == 0 UNIMPLEMENTED\n");
401 }
402 }
403
404 //ERR("%s(riid=%S) UNIMPLEMENTED\n", __FUNCTION__, g2s(riid));
405 return E_NOTIMPL;
406}
HRESULT _CDataObject_CreateInstance(PCIDLIST_ABSOLUTE folder, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, LPVOID *ppvOut)
Definition: CDataObject.cpp:36
EXTERN_C HRESULT WINAPI SHCreateFileExtractIconW(_In_ LPCWSTR pszFile, _In_ DWORD dwFileAttributes, _In_ REFIID riid, _Outptr_ void **ppv)
HRESULT _CFontMenu_CreateInstance(HWND hwnd, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, IShellFolder *psf, REFIID riid, LPVOID *ppvOut)
Definition: CFontMenu.cpp:111
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
const GUID IID_IDataObject

◆ Initialize()

STDMETHODIMP CFontExt::Initialize ( LPCITEMIDLIST  pidl)
override

Definition at line 456 of file CFontExt.cpp.

457{
458 WCHAR PidlPath[MAX_PATH + 1] = {0}, FontsDir[MAX_PATH + 1];
459 if (!SHGetPathFromIDListW(pidl, PidlPath))
460 {
461 ERR("Unable to extract path from pidl\n");
462 return E_FAIL;
463 }
464
467 {
468 ERR("Unable to get fonts path (0x%x)\n", hr);
469 return hr;
470 }
471
472 if (_wcsicmp(PidlPath, FontsDir))
473 {
474 ERR("CFontExt View initializing on unexpected folder: '%S'\n", PidlPath);
475 return E_FAIL;
476 }
477
478 m_Folder.Attach(ILClone(pidl));
479 StringCchCatW(FontsDir, _countof(FontsDir), L"\\");
480 g_FontCache->SetFontDir(FontsDir);
481
482 return S_OK;
483}
void SetFontDir(const LPCWSTR Path)
Definition: CFontCache.cpp:120
HRESULT WINAPI SHGetFolderPathW(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath)
Definition: shellpath.c:2740
#define L(x)
Definition: ntvdm.h:50
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1454
#define CSIDL_FONTS
Definition: shlobj.h:2200
STRSAFEAPI StringCchCatW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:325
__wchar_t WCHAR
Definition: xmlstorage.h:180

◆ MapColumnToSCID()

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

Implements IShellFolder2.

Definition at line 219 of file CFontExt.cpp.

220{
221 //ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
222 return E_NOTIMPL;
223}

◆ ParseDisplayName()

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

Definition at line 226 of file CFontExt.cpp.

227{
228 ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
229 return E_NOTIMPL;
230}

◆ SetNameOf()

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

Implements IShellFolder.

Definition at line 437 of file CFontExt.cpp.

438{
439 ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
440 return E_NOTIMPL;
441}

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: