ReactOS 0.4.16-dev-823-g9a093ec
CMruNode Class Reference
Inheritance diagram for CMruNode:
Collaboration diagram for CMruNode:

Public Member Functions

 CMruNode ()
 
 CMruNode (CMruNode *pParent, UINT iSlot)
 
 ~CMruNode () override
 
CMruNodeGetParent ()
 
HRESULT BindToSlot (UINT iSlot, IShellFolder **ppSF)
 
HRESULT GetNode (BOOL bAdd, LPCITEMIDLIST pidl, CMruNode **pNewNode)
 
HRESULT GetNodeSlot (UINT *pnNodeSlot)
 
HRESULT SetNodeSlot (UINT nNodeSlot)
 
HRESULT RemoveLeast (UINT *pnNodeSlot)
 
HRESULT Clear (CMruPidlList *pList)
 
- Public Member Functions inherited from CMruLongList
 CMruLongList ()
 
 ~CMruLongList () override
 
- Public Member Functions inherited from CMruBase
 CMruBase ()
 
virtual ~CMruBase ()
 
STDMETHODIMP QueryInterface (REFIID riid, void **ppvObj) override
 
 STDMETHODIMP_ (ULONG) AddRef() override
 
 STDMETHODIMP_ (ULONG) Release() override
 
STDMETHODIMP InitData (UINT cCapacity, UINT flags, HKEY hKey, LPCWSTR pszSubKey OPTIONAL, SLOTCOMPARE fnCompare OPTIONAL) override
 
STDMETHODIMP AddData (LPCVOID pvData, DWORD cbData, UINT *piSlot) override
 
STDMETHODIMP FindData (LPCVOID pvData, DWORD cbData, UINT *piSlot) override
 
STDMETHODIMP GetData (UINT iSlot, LPVOID pvData, DWORD cbData) override
 
STDMETHODIMP QueryInfo (UINT iSlot, UINT *piGotSlot, DWORD *pcbData) override
 
STDMETHODIMP Delete (UINT iSlot) override
 
virtual BOOL _IsEqual (const SLOTITEMDATA *pItem, LPCVOID pvData, UINT cbData) const
 
virtual DWORD _DeleteValue (LPCWSTR pszValue)
 
virtual HRESULT _InitSlots ()=0
 
virtual void _SaveSlots ()=0
 
virtual UINT _UpdateSlots (UINT iSlot)=0
 
virtual void _SlotString (UINT iSlot, LPWSTR psz, DWORD cch)=0
 
virtual HRESULT _GetSlot (UINT iSlot, UINT *puSlot)=0
 
virtual HRESULT _RemoveSlot (UINT iSlot, UINT *puSlot)=0
 

Protected Member Functions

BOOL _InitLate ()
 
BOOL _IsEqual (SLOTITEMDATA *pItem, LPCVOID pvData, UINT cbData)
 
DWORD _DeleteValue (LPCWSTR pszValue) override
 
HRESULT _CreateNode (UINT iSlot, CMruNode **ppNewNode)
 
HRESULT _AddPidl (UINT iSlot, LPCITEMIDLIST pidl)
 
HRESULT _FindPidl (LPCITEMIDLIST pidl, UINT *piSlot)
 
HRESULT _GetPidlSlot (LPCITEMIDLIST pidl, BOOL bAdd, UINT *piSlot)
 
- Protected Member Functions inherited from CMruLongList
void _ImportShortList ()
 
HRESULT _InitSlots () override
 
void _SaveSlots () override
 
UINT _UpdateSlots (UINT iSlot) override
 
void _SlotString (UINT iSlot, LPWSTR psz, DWORD cch) override
 
HRESULT _GetSlot (UINT iSlot, UINT *puSlot) override
 
HRESULT _RemoveSlot (UINT iSlot, UINT *puSlot) override
 
- Protected Member Functions inherited from CMruBase
HRESULT _LoadItem (UINT iSlot)
 
HRESULT _AddItem (UINT iSlot, LPCVOID pvData, DWORD cbData)
 
HRESULT _GetItem (UINT iSlot, SLOTITEMDATA **ppItem)
 
void _DeleteItem (UINT iSlot)
 
HRESULT _GetSlotItem (UINT iSlot, SLOTITEMDATA **ppItem)
 
void _CheckUsedSlots ()
 
HRESULT _UseEmptySlot (UINT *piSlot)
 

Protected Attributes

UINT m_iSlot = 0
 
CMruNodem_pParent = NULL
 
IShellFolderm_pShellFolder = NULL
 
- Protected Attributes inherited from CMruLongList
UINTm_puSlotData = NULL
 
- Protected Attributes inherited from CMruBase
LONG m_cRefs = 1
 
DWORD m_dwFlags = 0
 
BOOL m_bNeedSave = FALSE
 
BOOL m_bChecked = FALSE
 
HKEY m_hKey = NULL
 
DWORD m_cSlotRooms = 0
 
DWORD m_cSlots = 0
 
SLOTCOMPARE m_fnCompare = NULL
 
SLOTITEMDATAm_pSlots = NULL
 

Additional Inherited Members

- Static Public Member Functions inherited from CMruBase
static voidoperator new (size_t size)
 
static void operator delete (void *ptr)
 

Detailed Description

Definition at line 728 of file mrulist.cpp.

Constructor & Destructor Documentation

◆ CMruNode() [1/2]

CMruNode::CMruNode ( )
inline

Definition at line 746 of file mrulist.cpp.

746{ }

Referenced by _CreateNode().

◆ CMruNode() [2/2]

CMruNode::CMruNode ( CMruNode pParent,
UINT  iSlot 
)

Definition at line 761 of file mrulist.cpp.

762{
763 m_iSlot = iSlot;
765 pParent->AddRef();
766}
CMruNode * m_pParent
Definition: mrulist.cpp:733
UINT m_iSlot
Definition: mrulist.cpp:732
ULONG __inline AddRef(__in_opt PVOID Tag=NULL, __in LONG Line=0, __in_opt PSTR File=NULL)
Definition: fxobject.hpp:826
FxObject * pParent
Definition: fxdpcapi.cpp:86

◆ ~CMruNode()

CMruNode::~CMruNode ( )
override

Definition at line 768 of file mrulist.cpp.

769{
770 if (m_pParent)
771 {
772 m_pParent->Release();
773 m_pParent = NULL;
774 }
775
776 if (m_pShellFolder)
777 {
780 }
781}
IShellFolder * m_pShellFolder
Definition: mrulist.cpp:734
#define NULL
Definition: types.h:112
ULONG Release()

Member Function Documentation

◆ _AddPidl()

HRESULT CMruNode::_AddPidl ( UINT  iSlot,
LPCITEMIDLIST  pidl 
)
protected

Definition at line 897 of file mrulist.cpp.

898{
899 return CMruBase::_AddItem(iSlot, pidl, sizeof(WORD) + pidl->mkid.cb);
900}
HRESULT _AddItem(UINT iSlot, LPCVOID pvData, DWORD cbData)
Definition: mrulist.cpp:248
unsigned short WORD
Definition: ntddk_ex.h:93

Referenced by _GetPidlSlot().

◆ _CreateNode()

HRESULT CMruNode::_CreateNode ( UINT  iSlot,
CMruNode **  ppNewNode 
)
protected

Definition at line 790 of file mrulist.cpp.

791{
792 CMruNode *pNewNode = new CMruNode(this, iSlot);
793 if (!pNewNode)
794 return E_OUTOFMEMORY;
795
796 WCHAR szSubKey[12];
797 _SlotString(iSlot, szSubKey, _countof(szSubKey));
798
799 HRESULT hr = pNewNode->InitData(m_cSlotRooms, 0, m_hKey, szSubKey, NULL);
800 if (FAILED(hr))
801 pNewNode->Release();
802 else
803 *ppNewNode = pNewNode;
804
805 return hr;
806}
HKEY m_hKey
Definition: mrulist.cpp:73
STDMETHODIMP InitData(UINT cCapacity, UINT flags, HKEY hKey, LPCWSTR pszSubKey OPTIONAL, SLOTCOMPARE fnCompare OPTIONAL) override
Definition: mrulist.cpp:274
DWORD m_cSlotRooms
Definition: mrulist.cpp:74
void _SlotString(UINT iSlot, LPWSTR psz, DWORD cch) override
Definition: mrulist.cpp:643
CMruNode()
Definition: mrulist.cpp:746
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define FAILED(hr)
Definition: intsafe.h:51
HRESULT hr
Definition: shlfolder.c:183
#define _countof(array)
Definition: sndvol32.h:70
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by Clear(), GetNode(), and RemoveLeast().

◆ _DeleteValue()

DWORD CMruNode::_DeleteValue ( LPCWSTR  pszValue)
overrideprotectedvirtual

Reimplemented from CMruBase.

Definition at line 902 of file mrulist.cpp.

903{
904 CMruBase::_DeleteValue(pszValue);
905 return SHDeleteKeyW(m_hKey, pszValue);
906}
virtual DWORD _DeleteValue(LPCWSTR pszValue)
Definition: mrulist.cpp:413
DWORD WINAPI SHDeleteKeyW(HKEY hKey, LPCWSTR lpszSubKey)
Definition: reg.c:1546

◆ _FindPidl()

HRESULT CMruNode::_FindPidl ( LPCITEMIDLIST  pidl,
UINT piSlot 
)
protected

Definition at line 908 of file mrulist.cpp.

909{
910 return FindData(pidl, sizeof(WORD) + pidl->mkid.cb, piSlot);
911}
STDMETHODIMP FindData(LPCVOID pvData, DWORD cbData, UINT *piSlot) override
Definition: mrulist.cpp:323

Referenced by _GetPidlSlot().

◆ _GetPidlSlot()

HRESULT CMruNode::_GetPidlSlot ( LPCITEMIDLIST  pidl,
BOOL  bAdd,
UINT piSlot 
)
protected

Definition at line 913 of file mrulist.cpp.

914{
915 LPITEMIDLIST pidlFirst = ILCloneFirst(pidl);
916 if (!pidlFirst)
917 return E_OUTOFMEMORY;
918
919 UINT iSlot;
920 HRESULT hr = _FindPidl(pidlFirst, &iSlot);
921 if (SUCCEEDED(hr))
922 {
923 *piSlot = _UpdateSlots(iSlot);
924 hr = S_OK;
925 }
926 else if (bAdd)
927 {
928 *piSlot = _UpdateSlots(m_cSlots);
929 hr = _AddPidl(*piSlot, pidlFirst);
930 }
931
932 ILFree(pidlFirst);
933 return hr;
934}
DWORD m_cSlots
Definition: mrulist.cpp:75
UINT _UpdateSlots(UINT iSlot) override
Definition: mrulist.cpp:611
HRESULT _AddPidl(UINT iSlot, LPCITEMIDLIST pidl)
Definition: mrulist.cpp:897
HRESULT _FindPidl(LPCITEMIDLIST pidl, UINT *piSlot)
Definition: mrulist.cpp:908
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
unsigned int UINT
Definition: ndis.h:50
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1044
LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST pidl)
Definition: pidl.c:262
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41

Referenced by GetNode().

◆ _InitLate()

BOOL CMruNode::_InitLate ( )
protected

Definition at line 860 of file mrulist.cpp.

861{
862 if (!m_pShellFolder)
863 {
864 if (m_pParent)
866 else
868 }
869 return !!m_pShellFolder;
870}
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
HRESULT BindToSlot(UINT iSlot, IShellFolder **ppSF)
Definition: mrulist.cpp:847

Referenced by GetNode().

◆ _IsEqual()

BOOL CMruNode::_IsEqual ( SLOTITEMDATA pItem,
LPCVOID  pvData,
UINT  cbData 
)
protected

Definition at line 872 of file mrulist.cpp.

873{
874 return m_pShellFolder->CompareIDs(0x10000000,
875 (LPITEMIDLIST)pItem->pvData,
876 (LPCITEMIDLIST)pvData) == 0;
877}
HRESULT CompareIDs([in] LPARAM lParam, [in] PCUIDLIST_RELATIVE pidl1, [in] PCUIDLIST_RELATIVE pidl2)
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
_In_ ULONG _In_opt_ PVOID pvData
Definition: winddi.h:3749

◆ BindToSlot()

HRESULT CMruNode::BindToSlot ( UINT  iSlot,
IShellFolder **  ppSF 
)

Definition at line 847 of file mrulist.cpp.

848{
849 SLOTITEMDATA *pItem;
850 HRESULT hr = _GetSlotItem(iSlot, &pItem);
851 if (FAILED(hr))
852 return hr;
853
855 NULL,
856 IID_IShellFolder,
857 (void **)ppSF);
858}
HRESULT _GetSlotItem(UINT iSlot, SLOTITEMDATA **ppItem)
Definition: mrulist.cpp:208
HRESULT BindToObject([in] PCUIDLIST_RELATIVE pidl, [in] LPBC pbcReserved, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut)

Referenced by _InitLate().

◆ Clear()

HRESULT CMruNode::Clear ( CMruPidlList pList)

Definition at line 1266 of file mrulist.cpp.

1267{
1268 UINT uSlot, nNodeSlot;
1269 HRESULT hr;
1270
1271 while (SUCCEEDED(_GetSlot(0, &uSlot)))
1272 {
1273 CMruNode *pNode;
1274 hr = _CreateNode(uSlot, &pNode);
1275 if (SUCCEEDED(hr))
1276 {
1277 hr = pNode->GetNodeSlot(&nNodeSlot);
1278 if (SUCCEEDED(hr))
1279 pList->EmptyNodeSlot(nNodeSlot);
1280
1281 pNode->Clear(pList);
1282 pNode->Release();
1283 }
1284 Delete(0);
1285 }
1286
1287 return S_OK;
1288}
STDMETHODIMP Delete(UINT iSlot) override
Definition: mrulist.cpp:375
HRESULT _GetSlot(UINT iSlot, UINT *puSlot) override
Definition: mrulist.cpp:648
HRESULT Clear(CMruPidlList *pList)
Definition: mrulist.cpp:1266
HRESULT _CreateNode(UINT iSlot, CMruNode **ppNewNode)
Definition: mrulist.cpp:790
HRESULT GetNodeSlot(UINT *pnNodeSlot)
Definition: mrulist.cpp:879
FxChildList * pList

Referenced by Clear(), and CMruPidlList::PruneKids().

◆ GetNode()

HRESULT CMruNode::GetNode ( BOOL  bAdd,
LPCITEMIDLIST  pidl,
CMruNode **  pNewNode 
)

Definition at line 808 of file mrulist.cpp.

809{
810 if (!pidl || !pidl->mkid.cb)
811 {
812 *ppNewNode = this;
813 AddRef();
814 return S_OK;
815 }
816
817 if (!_InitLate())
818 return E_FAIL;
819
820 UINT iSlot;
821 HRESULT hr = _GetPidlSlot(pidl, bAdd, &iSlot);
822 if (FAILED(hr))
823 {
824 if (!bAdd)
825 {
826 *ppNewNode = this;
827 AddRef();
828 return S_FALSE;
829 }
830 return hr;
831 }
832
833 CMruNode *pNewNode;
834 hr = _CreateNode(iSlot, &pNewNode);
835 if (SUCCEEDED(hr))
836 {
837 _SaveSlots();
838
839 LPCITEMIDLIST pidl2 = (LPCITEMIDLIST)((LPBYTE)pidl + pidl->mkid.cb);
840 pNewNode->GetNode(bAdd, pidl2, ppNewNode);
841 pNewNode->Release();
842 }
843
844 return hr;
845}
void _SaveSlots() override
Definition: mrulist.cpp:601
HRESULT _GetPidlSlot(LPCITEMIDLIST pidl, BOOL bAdd, UINT *piSlot)
Definition: mrulist.cpp:913
BOOL _InitLate()
Definition: mrulist.cpp:860
HRESULT GetNode(BOOL bAdd, LPCITEMIDLIST pidl, CMruNode **pNewNode)
Definition: mrulist.cpp:808
#define E_FAIL
Definition: ddrawi.h:102
static ULONG WINAPI AddRef(IStream *iface)
Definition: clist.c:90
unsigned char * LPBYTE
Definition: typedefs.h:53
#define S_FALSE
Definition: winerror.h:2357

Referenced by GetNode(), CMruPidlList::PruneKids(), CMruPidlList::QueryPidl(), and CMruPidlList::UsePidl().

◆ GetNodeSlot()

HRESULT CMruNode::GetNodeSlot ( UINT pnNodeSlot)

Definition at line 879 of file mrulist.cpp.

880{
881 DWORD dwData, cbData = sizeof(dwData);
882 DWORD error = SHGetValueW(m_hKey, NULL, L"NodeSlot", NULL, &dwData, (pnNodeSlot ? &cbData : NULL));
883 if (error != ERROR_SUCCESS)
884 return E_FAIL;
885 *pnNodeSlot = (UINT)dwData;
886 return S_OK;
887}
#define ERROR_SUCCESS
Definition: deptool.c:10
DWORD WINAPI SHGetValueW(HKEY hKey, LPCWSTR lpszSubKey, LPCWSTR lpszValue, LPDWORD pwType, LPVOID pvData, LPDWORD pcbData)
Definition: reg.c:1236
unsigned long DWORD
Definition: ntddk_ex.h:95
#define error(str)
Definition: mkdosfs.c:1605
static HANDLE ULONG_PTR dwData
Definition: file.c:35
#define L(x)
Definition: ntvdm.h:50

Referenced by Clear(), CMruPidlList::QueryPidl(), RemoveLeast(), and CMruPidlList::UsePidl().

◆ GetParent()

CMruNode * CMruNode::GetParent ( )

Definition at line 783 of file mrulist.cpp.

784{
785 if (m_pParent)
786 m_pParent->AddRef();
787 return m_pParent;
788}

Referenced by CMruPidlList::QueryPidl().

◆ RemoveLeast()

HRESULT CMruNode::RemoveLeast ( UINT pnNodeSlot)

Definition at line 936 of file mrulist.cpp.

937{
938 if (!m_cSlots)
939 {
940 GetNodeSlot(pnNodeSlot);
941 return S_FALSE;
942 }
943
944 UINT uSlot;
945 HRESULT hr = _GetSlot(m_cSlots - 1, &uSlot);
946 if (FAILED(hr))
947 return hr;
948
949 CMruNode *pNode;
950 hr = _CreateNode(uSlot, &pNode);
951 if (SUCCEEDED(hr))
952 {
953 hr = pNode->RemoveLeast(pnNodeSlot);
954 pNode->Release();
955 }
956
957 if (hr == S_FALSE)
958 {
959 Delete(m_cSlots - 1);
960 if (m_cSlots || SUCCEEDED(GetNodeSlot(0)))
961 return S_OK;
962 }
963
964 return hr;
965}
HRESULT RemoveLeast(UINT *pnNodeSlot)
Definition: mrulist.cpp:936

Referenced by CMruPidlList::GetEmptySlot(), and RemoveLeast().

◆ SetNodeSlot()

HRESULT CMruNode::SetNodeSlot ( UINT  nNodeSlot)

Definition at line 889 of file mrulist.cpp.

890{
891 DWORD dwData = nNodeSlot;
892 if (SHSetValueW(m_hKey, NULL, L"NodeSlot", REG_DWORD, &dwData, sizeof(dwData)) != ERROR_SUCCESS)
893 return E_FAIL;
894 return S_OK;
895}
DWORD WINAPI SHSetValueW(HKEY hKey, LPCWSTR lpszSubKey, LPCWSTR lpszValue, DWORD dwType, LPCVOID pvData, DWORD cbData)
Definition: reg.c:1306
#define REG_DWORD
Definition: sdbapi.c:596

Referenced by CMruPidlList::UsePidl().

Member Data Documentation

◆ m_iSlot

UINT CMruNode::m_iSlot = 0
protected

Definition at line 732 of file mrulist.cpp.

Referenced by _InitLate(), and CMruNode().

◆ m_pParent

CMruNode* CMruNode::m_pParent = NULL
protected

Definition at line 733 of file mrulist.cpp.

Referenced by _InitLate(), CMruNode(), GetParent(), and ~CMruNode().

◆ m_pShellFolder

IShellFolder* CMruNode::m_pShellFolder = NULL
protected

Definition at line 734 of file mrulist.cpp.

Referenced by _InitLate(), _IsEqual(), BindToSlot(), and ~CMruNode().


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