ReactOS 0.4.16-dev-2207-geb15453
CFontExt Class Reference

#include <CFontExt.hpp>

Inheritance diagram for CFontExt:
Collaboration diagram for CFontExt:

Public Member Functions

 CFontExt ()
 
 ~CFontExt ()
 
void SetViewWindow (HWND hwndView)
 
HRESULT CreateForegroundMenu (HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, LPVOID *ppvOut)
 
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)
 

Static Public Member Functions

static HRESULT CALLBACK MenuCallBack (IShellFolder *psf, HWND hwndOwner, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
- 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)
 

Private Attributes

CComHeapPtr< ITEMIDLISTm_Folder
 
BOOL m_bDragAccepted = FALSE
 
HWND m_hwndView = nullptr
 

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
 
- 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 258 of file CFontExt.cpp.

259{
260 ERR("%s(riid=%S) UNIMPLEMENTED\n", __FUNCTION__, g2s(riid));
261 return E_NOTIMPL;
262}
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 264 of file CFontExt.cpp.

265{
266 ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
267 return E_NOTIMPL;
268}

◆ CompareIDs()

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

Implements IShellFolder.

Definition at line 270 of file CFontExt.cpp.

271{
272 const FontPidlEntry* fontEntry1 = _FontFromIL(pidl1);
273 const FontPidlEntry* fontEntry2 = _FontFromIL(pidl2);
274
275 if (!fontEntry1 || !fontEntry2)
276 return E_INVALIDARG;
277
278 int result;
279 DWORD sortMode = lParam & 0xFFFF0000;
280 DWORD column = lParam & 0x0000FFFF;
281 if (sortMode == SHCIDS_ALLFIELDS)
282 {
283 result = StrCmpIW(fontEntry1->Name, fontEntry2->Name);
284 }
285 else
286 {
287 auto info1 = g_FontCache->Find(fontEntry1);
288 auto info2 = g_FontCache->Find(fontEntry2);
289
290 if (!info1 || !info2)
291 {
292 ERR("Unable to find font %S or %S in cache!\n", fontEntry1->Name, fontEntry2->Name);
293 return E_INVALIDARG;
294 }
295
296 switch (column)
297 {
298 case 0xffff:
299 /* ROS bug? */
300 case FONTEXT_COL_NAME:
301 result = StrCmpIW(fontEntry1->Name, fontEntry2->Name);
302 break;
304 result = StrCmpIW(PathFindFileNameW(info1->File()), PathFindFileNameW(info2->File()));
305 break;
306 case FONTEXT_COL_SIZE:
307 result = (int)info1->FileSize().HighPart - info2->FileSize().HighPart;
308 if (result == 0)
309 result = (int)info1->FileSize().LowPart - info2->FileSize().LowPart;
310 break;
312 result = CompareFileTime(&info1->FileWriteTime(), &info2->FileWriteTime());
313 break;
314 case FONTEXT_COL_ATTR:
315 // FIXME: how to compare attributes?
316 result = (int)info1->FileAttributes() - info2->FileAttributes();
317 break;
318 default:
319 ERR("Unimplemented column %u\n", column);
320 return E_INVALIDARG;
321 }
322 }
323
325}
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
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
WCHAR *WINAPI PathFindFileNameW(const WCHAR *path)
Definition: path.c:1701
int WINAPI StrCmpIW(const WCHAR *str, const WCHAR *comp)
Definition: string.c:456
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:29
GLuint64EXT * result
Definition: glext.h:11304
#define MAKE_COMPARE_HRESULT(x)
Definition: shellutils.h:678
WCHAR Name[1]
Definition: fontpidl.hpp:15

◆ CreateForegroundMenu()

HRESULT CFontExt::CreateForegroundMenu ( HWND  hwndOwner,
UINT  cidl,
PCUITEMID_CHILD_ARRAY  apidl,
LPVOID ppvOut 
)

Definition at line 387 of file CFontExt.cpp.

388{
389 if (cidl <= 0)
390 {
391 ERR("cidl: %u\n", cidl);
392 return E_NOTIMPL;
393 }
394
395 const FontPidlEntry* pEntry = _FontFromIL(apidl[0]);
396 if (!pEntry)
397 {
398 ERR("!pEntry\n");
399 return E_FAIL;
400 }
401 auto info = g_FontCache->Find(pEntry);
402 if (!info)
403 {
404 ERR("!info\n");
405 return E_FAIL;
406 }
407 LPCWSTR extension = PathFindExtensionW(info->File());
408
410
411 WCHAR wszClass[MAX_PATH];
412 DWORD dwSize = sizeof(wszClass);
413 if (RegGetValueW(HKEY_CLASSES_ROOT, extension, NULL, RRF_RT_REG_SZ, NULL, wszClass, &dwSize) != ERROR_SUCCESS ||
414 !*wszClass || AddClassKeyToArray(wszClass, keys, keys) != ERROR_SUCCESS)
415 {
416 AddClassKeyToArray(extension, keys, keys);
417
418 if (cidl == 1)
419 AddClassKeyToArray(L"Unknown", keys, keys);
420 }
421
422 return CDefFolderMenu_Create2(m_Folder, hwndOwner, cidl, apidl, this, MenuCallBack, keys, keys, (IContextMenu**)ppvOut);
423}
HRESULT WINAPI CDefFolderMenu_Create2(PCIDLIST_ABSOLUTE pidlFolder, HWND hwnd, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, IShellFolder *psf, LPFNDFMCALLBACK lpfn, UINT nKeys, const HKEY *ahkeyClsKeys, IContextMenu **ppcm)
static HRESULT CALLBACK MenuCallBack(IShellFolder *psf, HWND hwndOwner, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: CFontExt.cpp:96
CComHeapPtr< ITEMIDLIST > m_Folder
Definition: CFontExt.hpp:18
#define E_FAIL
Definition: ddrawi.h:102
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
Definition: reg.c:1931
#define MAX_PATH
Definition: compat.h:34
const UINT * keys
Definition: locale.c:416
LPWSTR WINAPI PathFindExtensionW(const WCHAR *path)
Definition: path.c:1274
#define RRF_RT_REG_SZ
Definition: driver.c:575
#define L(x)
Definition: resources.c:13
LSTATUS AddClassKeyToArray(const WCHAR *szClass, HKEY *array, UINT *cKeys)
Definition: fontext.cpp:109
PLIST_ENTRY pEntry
Definition: fxioqueue.cpp:4484
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by GetUIObjectOf().

◆ CreateViewObject()

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

Definition at line 327 of file CFontExt.cpp.

328{
330
331 *ppvOut = NULL;
332
333 if (IsEqualIID(riid, IID_IDropTarget))
334 {
335 *ppvOut = static_cast<IDropTarget *>(this);
336 AddRef();
337 hr = S_OK;
338 }
339 else if (IsEqualIID(riid, IID_IContextMenu))
340 {
341 TRACE("IContextMenu\n");
342 return CFontBackgroundMenu_Create(this, hwndOwner, this, (IContextMenu**)ppvOut);
343 }
344 else if (IsEqualIID(riid, IID_IShellView))
345 {
347 if (SUCCEEDED(hr = ShellObjectCreator(sfviewcb)))
348 {
349 SFV_CREATE create = { sizeof(create), this, NULL, sfviewcb };
351 if (SUCCEEDED(hr))
352 sfviewcb->Initialize(this, (IShellView*)*ppvOut, m_Folder);
353 }
354 }
355
356 return hr;
357}
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
Definition: CDefView.cpp:4823
HRESULT APIENTRY CFontBackgroundMenu_Create(CFontExt *pFontExt, HWND hwnd, IShellFolder *psf, IContextMenu **ppcm)
ULONG AddRef()
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
static const struct access_res create[16]
Definition: package.c:7505
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ DragEnter()

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

Implements IDropTarget.

Definition at line 564 of file CFontExt.cpp.

565{
567 if (!m_bDragAccepted)
568 {
569 *pdwEffect = DROPEFFECT_NONE;
570 return E_FAIL;
571 }
572
573 *pdwEffect &= DROPEFFECT_COPY;
574 return S_OK;
575}
BOOL m_bDragAccepted
Definition: CFontExt.hpp:19
BOOL CheckDataObject(IDataObject *pDataObj)
Definition: fontext.cpp:308
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 588 of file CFontExt.cpp.

589{
590 return S_OK;
591}

◆ DragOver()

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

Implements IDropTarget.

Definition at line 577 of file CFontExt.cpp.

578{
579 if (!m_bDragAccepted)
580 {
581 *pdwEffect = DROPEFFECT_NONE;
582 return E_FAIL;
583 }
584 *pdwEffect &= DROPEFFECT_COPY;
585 return S_OK;
586}

◆ Drop()

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

Implements IDropTarget.

Definition at line 593 of file CFontExt.cpp.

594{
597
599 title.LoadStringW(IDS_REACTOS_FONTS_FOLDER);
601 {
602 // Show error message
603 text.LoadStringW(IDS_INSTALL_FAILED);
605 }
606 else if (hr == S_OK)
607 {
608 // Refresh font cache and notify the system about the font change
609 if (g_FontCache)
610 g_FontCache->Read();
611
613
614 // Show successful message
615 text.LoadStringW(IDS_INSTALL_OK);
617 }
618
619 return hr;
620}
#define ATLASSERT(x)
Definition: CComVariant.cpp:10
void Read()
Definition: CFontCache.cpp:194
HWND m_hwndView
Definition: CFontExt.hpp:20
#define IDS_INSTALL_FAILED
Definition: resource.h:9
#define IDS_INSTALL_OK
Definition: resource.h:8
#define IDS_REACTOS_FONTS_FOLDER
Definition: resource.h:7
const WCHAR * text
Definition: package.c:1794
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:30
HRESULT InstallFontsFromDataObject(HWND hwndView, IDataObject *pDataObj)
Definition: fontext.cpp:390
static char title[]
Definition: ps.c:92
#define HWND_BROADCAST
Definition: winuser.h:1215
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
LRESULT WINAPI SendMessageTimeoutW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM, _In_ UINT, _In_ UINT, _Out_opt_ PDWORD_PTR)
#define MB_ICONERROR
Definition: winuser.h:798
#define SMTO_ABORTIFHUNG
Definition: winuser.h:1234
#define MB_ICONINFORMATION
Definition: winuser.h:813
#define WM_FONTCHANGE
Definition: winuser.h:1661

◆ EnumObjects()

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

Definition at line 253 of file CFontExt.cpp.

254{
255 return _CEnumFonts_CreateInstance(this, dwFlags, IID_PPV_ARG(IEnumIDList, ppEnumIDList));
256}
HRESULT _CEnumFonts_CreateInstance(CFontExt *zip, DWORD flags, REFIID riid, LPVOID *ppvOut)
Definition: CEnumFonts.cpp:97
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
#define IID_PPV_ARG(Itype, ppType)

◆ EnumSearches()

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

Implements IShellFolder2.

Definition at line 118 of file CFontExt.cpp.

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

◆ GetAttributesOf()

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

Definition at line 359 of file CFontExt.cpp.

360{
361 if (!rgfInOut || !cidl || !apidl)
362 return E_INVALIDARG;
363
364 DWORD rgf = 0;
365 while (cidl > 0 && *apidl)
366 {
367 const FontPidlEntry* fontEntry = _FontFromIL(*apidl);
368 if (fontEntry)
369 {
370 // We don't support delete yet
371 rgf |= (/*SFGAO_CANDELETE |*/ SFGAO_HASPROPSHEET | SFGAO_CANCOPY | SFGAO_FILESYSTEM);
372 }
373 else
374 {
375 rgf = 0;
376 break;
377 }
378
379 apidl++;
380 cidl--;
381 }
382
383 *rgfInOut = rgf;
384 return S_OK;
385}

◆ GetClassID()

STDMETHODIMP CFontExt::GetClassID ( CLSID lpClassId)
override

Implements IPersist.

Definition at line 557 of file CFontExt.cpp.

558{
559 *lpClassId = CLSID_CFontExt;
560 return S_OK;
561}
const GUID CLSID_CFontExt
Definition: fontext.cpp:13

◆ GetCurFolder()

STDMETHODIMP CFontExt::GetCurFolder ( LPITEMIDLIST ppidl)
override

Definition at line 515 of file CFontExt.cpp.

516{
517 if (ppidl && m_Folder)
518 {
519 *ppidl = ILClone(m_Folder);
520 return S_OK;
521 }
522
523 return E_POINTER;
524}
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:238
#define E_POINTER
Definition: winerror.h:3480

◆ GetDefaultColumn()

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

Implements IShellFolder2.

Definition at line 124 of file CFontExt.cpp.

125{
126 ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
127 return E_NOTIMPL;
128}

◆ GetDefaultColumnState()

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

Implements IShellFolder2.

Definition at line 130 of file CFontExt.cpp.

131{
132 if (!pcsFlags || iColumn >= _countof(g_ColumnDefs))
133 return E_INVALIDARG;
134
135 *pcsFlags = g_ColumnDefs[iColumn].dwDefaultState;
136 return S_OK;
137}
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 112 of file CFontExt.cpp.

113{
114 ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
115 return E_NOTIMPL;
116}

◆ GetDetailsEx()

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

Implements IShellFolder2.

Definition at line 139 of file CFontExt.cpp.

140{
141 ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
142 return E_NOTIMPL;
143}

◆ GetDetailsOf()

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

Implements IShellFolder2.

Definition at line 145 of file CFontExt.cpp.

146{
147 if (iColumn >= _countof(g_ColumnDefs))
148 return E_FAIL;
149
150 psd->cxChar = g_ColumnDefs[iColumn].cxChar;
151 psd->fmt = g_ColumnDefs[iColumn].fmt;
152
153 // No item requested, so return the column name
154 if (pidl == NULL)
155 {
156 return SHSetStrRet(&psd->str, _AtlBaseModule.GetResourceInstance(), g_ColumnDefs[iColumn].iResource);
157 }
158
159 // Validate that this pidl is the last one
160 PCUIDLIST_RELATIVE curpidl = ILGetNext(pidl);
161 if (curpidl->mkid.cb != 0)
162 {
163 ERR("ERROR, unhandled PIDL!\n");
164 return E_FAIL;
165 }
166
167 // Name, ReactOS specific?
168 if (iColumn == FONTEXT_COL_NAME)
169 return GetDisplayNameOf(pidl, 0, &psd->str);
170
171 const FontPidlEntry* fontEntry = _FontFromIL(pidl);
172 if (!fontEntry)
173 {
174 ERR("ERROR, not a font PIDL!\n");
175 return E_FAIL;
176 }
177
178 // If we got here, we are in details view!
179 auto info = g_FontCache->Find(fontEntry);
180 if (info == nullptr)
181 {
182 ERR("Unable to query info about %S\n", fontEntry->Name);
184 }
185
186 int ret;
187 CStringA AttrLetters;
190 switch (iColumn)
191 {
193 return SHSetStrRet(&psd->str, PathFindFileNameW(info->File()));
194 case FONTEXT_COL_SIZE:
195 psd->str.uType = STRRET_CSTR;
196 StrFormatKBSizeA(info->FileSize().QuadPart, psd->str.cStr, MAX_PATH);
197 return S_OK;
199 psd->str.uType = STRRET_CSTR;
200 FileTimeToSystemTime(&info->FileWriteTime(), &time);
202 if (ret < 1)
203 {
204 ERR("GetDateFormatA failed\n");
205 return E_FAIL;
206 }
207 psd->str.cStr[ret-1] = ' ';
209 return S_OK;
210 case FONTEXT_COL_ATTR:
211 AttrLetters.LoadString(IDS_COL_ATTR_LETTERS);
212 if (AttrLetters.GetLength() != 5)
213 {
214 ERR("IDS_COL_ATTR_LETTERS does not contain 5 letters!\n");
215 return E_FAIL;
216 }
217 psd->str.uType = STRRET_CSTR;
218 dwAttributes = info->FileAttributes();
219 ret = 0;
221 psd->str.cStr[ret++] = AttrLetters[0];
223 psd->str.cStr[ret++] = AttrLetters[1];
225 psd->str.cStr[ret++] = AttrLetters[2];
227 psd->str.cStr[ret++] = AttrLetters[3];
229 psd->str.cStr[ret++] = AttrLetters[4];
230 psd->str.cStr[ret] = '\0';
231 return S_OK;
232 default:
233 break;
234 }
235
237 return E_NOTIMPL;
238}
#define UNIMPLEMENTED
Definition: ntoskrnl.c:15
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:479
#define IDS_COL_ATTR_LETTERS
Definition: resource.h:17
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:1871
return ret
Definition: mutex.c:146
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:977
@ STRRET_CSTR
Definition: shtypes.idl:87
const ITEMIDLIST_RELATIVE UNALIGNED * PCUIDLIST_RELATIVE
Definition: shtypes.idl:57
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
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
Definition: winerror.h:210
#define TIME_NOSECONDS
Definition: winnls.h:296
#define DATE_SHORTDATE
Definition: winnls.h:209

◆ GetDisplayNameOf()

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

Definition at line 479 of file CFontExt.cpp.

480{
481 if (!pidl)
482 return E_NOTIMPL;
483
484 // Validate that this pidl is the last one
485 PCUIDLIST_RELATIVE curpidl = ILGetNext(pidl);
486 if (curpidl->mkid.cb != 0)
487 {
488 ERR("ERROR, unhandled PIDL!\n");
489 return E_FAIL;
490 }
491
492 const FontPidlEntry* fontEntry = _FontFromIL(pidl);
493 if (!fontEntry)
494 return E_FAIL;
495
497 {
498 CStringW File = g_FontCache->Filename(g_FontCache->Find(fontEntry), true);
499 if (!File.IsEmpty())
500 {
501 return SHSetStrRet(strRet, File);
502 }
503 }
504
505 return SHSetStrRet(strRet, fontEntry->Name);
506}
CStringW Filename(CFontInfo *info, bool alwaysFullPath=false)
Definition: CFontCache.cpp:158
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 425 of file CFontExt.cpp.

426{
427 if (riid == IID_IContextMenu ||
428 riid == IID_IContextMenu2 ||
429 riid == IID_IContextMenu3)
430 {
431 return CreateForegroundMenu(hwndOwner, cidl, apidl, ppvOut);
432 }
433 else if (riid == IID_IExtractIconA || riid == IID_IExtractIconW)
434 {
435 if (cidl == 1)
436 {
437 const FontPidlEntry* fontEntry = _FontFromIL(*apidl);
438 if (fontEntry)
439 {
442 // Just create a default icon extractor based on the filename
443 // We might want to create a preview with the font to get really fancy one day.
445 }
446 }
447 else
448 {
449 ERR("IID_IExtractIcon with cidl != 1 UNIMPLEMENTED\n");
450 }
451 }
452 else if (riid == IID_IDataObject)
453 {
454 if (cidl >= 1)
455 {
456 return _CDataObject_CreateInstance(m_Folder, cidl, apidl, riid, ppvOut);
457 }
458 else
459 {
460 CComPtr<IDataObject> pDataObj;
461 HRESULT hr = OleGetClipboard(&pDataObj);
463 return E_FAIL;
464 *ppvOut = pDataObj.Detach();
465 return S_OK;
466 }
467 }
468 else if (riid == IID_IDropTarget)
469 {
470 *ppvOut = static_cast<IDropTarget*>(this);
471 AddRef();
472 return S_OK;
473 }
474
475 //ERR("%s(riid=%S) UNIMPLEMENTED\n", __FUNCTION__, g2s(riid));
476 return E_NOTIMPL;
477}
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)
T * Detach()
Definition: atlcomcli.h:186
HRESULT CreateForegroundMenu(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, LPVOID *ppvOut)
Definition: CFontExt.cpp:387
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
HRESULT WINAPI OleGetClipboard(IDataObject **obj)
Definition: clipboard.c:2249
const GUID IID_IDataObject

◆ Initialize()

STDMETHODIMP CFontExt::Initialize ( LPCITEMIDLIST  pidl)
override

Definition at line 527 of file CFontExt.cpp.

528{
529 WCHAR PidlPath[MAX_PATH + 1] = {0}, FontsDir[MAX_PATH + 1];
530 if (!SHGetPathFromIDListW(pidl, PidlPath))
531 {
532 ERR("Unable to extract path from pidl\n");
533 return E_FAIL;
534 }
535
538 {
539 ERR("Unable to get fonts path (0x%x)\n", hr);
540 return hr;
541 }
542
543 if (StrCmpIW(PidlPath, FontsDir))
544 {
545 ERR("CFontExt View initializing on unexpected folder: '%S'\n", PidlPath);
546 return E_FAIL;
547 }
548
549 m_Folder.Attach(ILClone(pidl));
550 StringCchCatW(FontsDir, _countof(FontsDir), L"\\");
551 g_FontCache->SetFontDir(FontsDir);
552
553 return S_OK;
554}
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:2716
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1496
#define CSIDL_FONTS
Definition: shlobj.h:2198
STRSAFEAPI StringCchCatW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:325

◆ MapColumnToSCID()

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

Implements IShellFolder2.

Definition at line 240 of file CFontExt.cpp.

241{
242 //ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
243 return E_NOTIMPL;
244}

◆ MenuCallBack()

HRESULT CALLBACK CFontExt::MenuCallBack ( IShellFolder psf,
HWND  hwndOwner,
IDataObject pdtobj,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 96 of file CFontExt.cpp.

97{
98 TRACE("%u, %p, %p\n", uMsg, wParam, lParam);
99 switch (uMsg)
100 {
102 return S_OK; // Yes, I want verbs
104 return S_FALSE; // Do it for me please
106 return S_FALSE; // Supposedly "required for Windows 7 to pick a default"
107 }
108 return E_NOTIMPL;
109}
WPARAM wParam
Definition: combotst.c:138
#define DFM_GETDEFSTATICID
Definition: precomp.h:47
#define DFM_MERGECONTEXTMENU
Definition: precomp.h:44
#define DFM_INVOKECOMMAND
Definition: precomp.h:45
#define S_FALSE
Definition: winerror.h:3451

Referenced by CreateForegroundMenu().

◆ ParseDisplayName()

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

Definition at line 247 of file CFontExt.cpp.

248{
249 ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
250 return E_NOTIMPL;
251}

◆ SetNameOf()

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

Implements IShellFolder.

Definition at line 508 of file CFontExt.cpp.

509{
510 ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
511 return E_NOTIMPL;
512}

◆ SetViewWindow()

void CFontExt::SetViewWindow ( HWND  hwndView)

Definition at line 90 of file CFontExt.cpp.

91{
92 m_hwndView = hwndView;
93}

Referenced by CFontFolderViewCB::MessageSFVCB().

Member Data Documentation

◆ m_bDragAccepted

BOOL CFontExt::m_bDragAccepted = FALSE
private

Definition at line 19 of file CFontExt.hpp.

Referenced by DragEnter(), and DragOver().

◆ m_Folder

CComHeapPtr<ITEMIDLIST> CFontExt::m_Folder
private

◆ m_hwndView

HWND CFontExt::m_hwndView = nullptr
private

Definition at line 20 of file CFontExt.hpp.

Referenced by Drop(), and SetViewWindow().


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