|
|
#ifndef _onetree_h
#define _onetree_h
#ifdef __cplusplus
extern "C" { #endif
#define OTGetRootFolder() (s_pshfRoot->AddRef(), s_pshfRoot)
#define OTGetRootParentFolder() (s_pshfRootParent->AddRef(), s_pshfRootParent)
#define OTIsShared(lpnd) ((lpnd)->dwAttribs & SFGAO_SHARE)
#define OTIsRemovableRoot(lpnd) (((lpnd)->dwAttribs & (SFGAO_REMOVABLE | SFGAO_FILESYSANCESTOR)) == (SFGAO_REMOVABLE | SFGAO_FILESYSANCESTOR))
#define OTGetSubNode(lpn, szSubFolderID) FindKid(lpn, szSubFolderID, TRUE)
#define OTGetRootNode() (OTAddRef(s_lpnRoot), s_lpnRoot)
#define OTInvalidateAll() DoInvalidateAll(s_lpnRoot, -1)
#define OTAddRef(lpnd) ((lpnd)->cRef++)
typedef struct _OTCompareInfo { BOOL bFound; BOOL fRooted; LPSHELLFOLDER psf; } OTCompareInfo, *LPOTCompareInfo;
typedef struct _OTEnumInfo { BOOL fTimedOut : 1; BOOL fAllowTimeout :1; } OTEnumInfo, *LPEnumInfo;
typedef struct _OneTreeNode {
#ifdef DEBUG
#define OTDEBUG_SIG ((TEXT('O') << 16) + (TEXT('T') << 8) + TEXT('N'))
DWORD dwDebugSig; #endif
struct _OneTreeNode * lpnParent;
HDPA hdpaKids; // HASNOKIDS || KIDSUNKNOWN || array of kids
LPTSTR lpText; // The text for this item
int iImage; int iSelectedImage;
BITBOOL fMark : 1; BITBOOL fRoot : 1; BITBOOL fInvalid : 1; BITBOOL fShared : 1; BITBOOL fRemovable : 1; BITBOOL fInserted : 1; // this means that this item was forceably added.. it's not safe to remove it if it doesn't show up in enumeration
BITBOOL fHasAttributes : 1; BITBOOL fValidatePidl :1; // this means the item was invalidated specifically by fsnotify (as opposed to not fully fetched yet)
// so on the next call to GetAttributesOf, we need to pass SFGAO_VALIDATE
BYTE cChildren; DWORD dwAttribs; DWORD dwDropEffect; DWORD dwLastChanged; int cRef; LPITEMIDLIST pidl; // this needs to be at the end because it grows
} OneTreeNode, * LPOneTreeNode;
typedef struct _NMOTFSEINFO { NMHDR nmhdr; LONG lEvent; LPITEMIDLIST pidl; LPITEMIDLIST pidlExtra; } NMOTFSEINFO, *LPNMOTFSEINFO;
#define OTN_FSE CWM_ONETREEFSE
// from shelldll
#define IDOI_SHARE 1
#define NOKIDS ((HDPA)-1)
#define KIDSUNKNOWN ((HDPA)0)
extern LPOneTreeNode s_lpnRoot; extern LPSHELLFOLDER s_pshfRoot;
extern LPSHELLFOLDER s_pshfRoot; extern LPSHELLFOLDER s_pshfRootParent;
#ifdef FOR_GEORGEST
void DebugDumpNode(LPOneTreeNode lpn, LPTSTR lpsz); #else
#define DebugDumpNode(lpn, lpsz)
#endif
BOOL OneTree_Initialize(LPCITEMIDLIST pidlRootClass); void OneTree_Terminate(); void OneTree_GetAltColor(void);
#define OTILIsEqual(pidl1, pidl2) IEILIsEqual((pidl1), (pidl2), FALSE)
BOOL WINAPI OTILIsParent(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2, BOOL fImmediate); BOOL OTIsCompressed(LPOneTreeNode lpNode); BOOL OTIsBold(LPOneTreeNode lpNode);
STDAPI_(void) OTAssumeThread();
// any calls to this MUST BE IN A CRIT section!
LPITEMIDLIST OTCloneFolderID(LPOneTreeNode lpn); LPTSTR OTGetNodeName(LPOneTreeNode lpn, LPTSTR pszText, int cch); HRESULT WINAPI OTRealBindToFolder(LPOneTreeNode lpNode, LPSHELLFOLDER *ppshf); LPSHELLFOLDER WINAPI OTBindToFolder(LPOneTreeNode lpnd); HRESULT OTBindToParentFolder(LPOneTreeNode lpNode, IShellFolder **ppsf, LPITEMIDLIST *ppidlChild); HRESULT WINAPI OTBindToParent(LPOneTreeNode lpnd, LPSHELLFOLDER *ppshf); HRESULT WINAPI OTBindToFolderEx(LPOneTreeNode lpnd, LPSHELLFOLDER *ppshf); HRESULT WINAPI OTRealBindToFolder(LPOneTreeNode lpNode, LPSHELLFOLDER *ppshf); LPOneTreeNode WINAPI OTGetNthSubNode(HWND hwndOwner, LPOneTreeNode lpnd, UINT i); void WINAPI OTInvalidateAttributeRecursive(LPOneTreeNode lpn); BOOL WINAPI OTSubNodeCount(HWND hwndOwner, LPOneTreeNode lpNode, LPEnumInfo pei, UINT* pcnd, BOOL fInteractive); BOOL WINAPI OTHasSubFolders(LPOneTreeNode lpnd); void WINAPI OTNodeFillTV_ITEM(LPOneTreeNode lpnd, LPTV_ITEM lpItem); void WINAPI OTUnregister(HWND hwndTree); void WINAPI OTRegister(HWND hwndTree); void WINAPI OTGetImageIndex(LPOneTreeNode lpnd, int *lpiImage, int * lpiSelectedImage); void WINAPI OTGetDefaultImageIndices(int *lpiImage, int *lpiSelectedImage); void WINAPI OTRelease(LPOneTreeNode lpNode); void DoInvalidateAll(LPOneTreeNode lpNode, int iImage); LPOneTreeNode WINAPI OTGetParent(LPOneTreeNode lpnd); void OTActivate();
#define OTASF_ALLOWDUP 0x00000001
#define OTASF_MAYBESIMPLE 0x00000002
HRESULT WINAPI OTAddSubFolder(LPOneTreeNode lpnd, LPCITEMIDLIST pidl, DWORD dwFlags, LPOneTreeNode *ppndOut);
LPITEMIDLIST WINAPI OTCreateIDListFromNode(LPOneTreeNode lpnd); BOOL WINAPI OTGetDisplayName(LPCITEMIDLIST pidl, LPTSTR pszName, int fType);
int CALLBACK OTTreeViewCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
LPOneTreeNode WINAPI OTGetNodeFromIDListEx(LPCITEMIDLIST pidl, UINT uFlags, HRESULT* phresOut); #define OTGetNodeFromIDList(pidl, uFlags) OTGetNodeFromIDListEx(pidl, uFlags, (HRESULT*)NULL)
// onetree get node flags
#define OTGNF_VALIDATE 0x01
#define OTGNF_TRYADD 0x02
#define OTGNF_NEARESTMATCH 0x04
#ifdef __cplusplus
} #endif
#endif // _onetree_h
|