nsc.h
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 22k
Category:

Windows Kernel

Development Platform:

Visual C++

  1. #ifndef _NSC_C
  2. #define _NSC_C
  3. #include "droptgt.h"
  4. #include "iface.h"
  5. #include "dpastuff.h"
  6. #include "cwndproc.h"
  7. #include "resource.h"
  8. #include "inetnot.h"
  9. #include "cowsite.h"
  10. #include <shlobj.h>
  11. #include <cfdefs.h> // LPCOBJECTINFO
  12. #define ID_CONTROL  100            
  13. typedef enum
  14. {
  15.     NSIF_HITEM              = 0x0001,
  16.     NSIF_FOLDER             = 0x0002,
  17.     NSIF_PARENTFOLDER       = 0x0004,
  18.     NSIF_IDLIST             = 0x0008,
  19.     NSIF_FULLIDLIST         = 0x0010,
  20.     NSIF_ATTRIBUTES         = 0x0020
  21. } NSI_FLAGS;
  22. typedef enum
  23. {
  24.     NSSR_ENUMBELOWROOT  = 0x0001,
  25.     NSSR_CREATEPIDL     = 0x0002
  26. } NSSR_FLAGS;
  27. typedef struct
  28. {
  29.     PORDERITEM  poi;
  30.     BITBOOL     fPinned:1;      // is this url pinned in the cache?
  31.     BITBOOL     fGreyed:1;      // draw the item greyed (if offline & not in cache)
  32.     BITBOOL     fFetched:1;     // have we fetched the pinned/greyed state?
  33.     BITBOOL     fDontRefetch:1; // can't be cached by wininet
  34.     BOOL        fNavigable:1;   // item can be navigated to
  35. } ITEMINFO;
  36. // _FrameTrack flags
  37. #define TRACKHOT        0x0001
  38. #define TRACKEXPAND     0x0002
  39. #define TRACKNOCHILD    0x0004
  40. // _DrawItem flags
  41. #define DIICON          0x0001
  42. #define DIHOT           0x0004
  43. #define DIFIRST         0x0020
  44. #define DISUBITEM       0x0040
  45. #define DILAST          0x0080
  46. #define DISUBLAST       (DISUBITEM | DILAST)
  47. #define DIACTIVEBORDER  0x0100
  48. #define DISUBFIRST      (DISUBITEM | DIFIRST)
  49. #define DIPINNED        0x0400                  // overlay pinned glyph
  50. #define DIGREYED        0x0800                  // draw greyed
  51. #define DIFOLDEROPEN    0x1000      
  52. #define DIFOLDER        0x2000      //item is a folder
  53. #define DIFOCUSRECT     0x4000
  54. #define NSC_TVIS_MARKED 0x1000
  55. // async icon/url extract flags
  56. #define NSCICON_GREYED      0x0001
  57. #define NSCICON_PINNED      0x0002
  58. #define NSCICON_DONTREFETCH 0x0004
  59. #define WM_NSCUPDATEICONINFO   WM_USER + 0x700
  60. HRESULT GetNavTargetName(IShellFolder* pFolder, LPCITEMIDLIST pidl, LPTSTR pszUrl, UINT cMaxChars);
  61. BOOL    MayBeUnavailableOffline(LPTSTR pszUrl);
  62. INSCTree * CNscTree_CreateInstance(void);
  63. STDAPI CNscTree_CreateInstance(IUnknown * punkOuter, IUnknown ** ppunk, LPCOBJECTINFO poi);
  64. class   CNSCBand;
  65. class   CHistBand;
  66. // class wrapper for tree control component of nscband.
  67. class CNscTree :    public IShellChangeNotify, 
  68.                     public CDelegateDropTarget, 
  69.                     public CNotifySubclassWndProc, 
  70.                     public CObjectWithSite, 
  71.                     public INSCTree, 
  72.                     public IShellFavoritesNameSpace, 
  73.                     public IWinEventHandler, 
  74.                     public IShellBrowser,
  75.                     public IShellFolderFilterSite
  76. {
  77.         // Hopefully, this is a temporary kludge:  (for CHistBand)
  78.     friend class CNSCBand; // we need to be able to easily refresh the tree
  79.     friend class CHistBand;
  80.     
  81.     friend INSCTree * CNscTree_CreateInstance(void);
  82.     
  83. public:
  84.     // *** IUnknown ***
  85.     STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj);
  86.     STDMETHODIMP_(ULONG) AddRef(void);
  87.     STDMETHODIMP_(ULONG) Release(void);
  88.     //*** IObjectWithSite ***
  89.     virtual STDMETHODIMP SetSite(IUnknown *punkSite);
  90. //    virtual STDMETHODIMP GetSite(REFIID riid, void **ppvSite);
  91.     // *** INSCTree methods ***
  92.     virtual STDMETHODIMP CreateTree(HWND hwndParent, DWORD dwStyles, HWND *phwnd);         // create window of tree view.
  93.     virtual STDMETHODIMP Initialize(LPCITEMIDLIST pidlRoot, DWORD grfFlags, DWORD dwFlags);           // init the treeview control with data.
  94.     virtual STDMETHODIMP ShowWindow(BOOL fShow);
  95.     virtual STDMETHODIMP Refresh(void);
  96.     virtual STDMETHODIMP GetSelectedItem(LPITEMIDLIST * ppidl, int nItem);
  97.     virtual STDMETHODIMP SetSelectedItem(LPCITEMIDLIST pidl, BOOL fCreate, BOOL fReinsert, int nItem);
  98.     virtual STDMETHODIMP GetNscMode(UINT * pnMode) { *pnMode = _mode; return S_OK;};
  99.     virtual STDMETHODIMP SetNscMode(UINT nMode) { _mode = nMode; return S_OK;};
  100.     virtual STDMETHODIMP GetSelectedItemName(LPWSTR pszName, DWORD cchName);
  101.     virtual STDMETHODIMP BindToSelectedItemParent(REFIID riid, void **ppv, LPITEMIDLIST *ppidl);
  102.     virtual STDMETHODIMP_(BOOL) InLabelEdit(void) {return _fInLabelEdit;};
  103.     // IShellBrowser (Hack)
  104.     virtual STDMETHODIMP InsertMenusSB(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths) {return E_NOTIMPL;};
  105.     virtual STDMETHODIMP SetMenuSB(HMENU hmenuShared, HOLEMENU holemenu, HWND hwnd) {return E_NOTIMPL;};
  106.     virtual STDMETHODIMP RemoveMenusSB(HMENU hmenuShared) {return E_NOTIMPL;};
  107.     virtual STDMETHODIMP SetStatusTextSB(LPCOLESTR lpszStatusText) {return E_NOTIMPL;};
  108.     virtual STDMETHODIMP EnableModelessSB(BOOL fEnable) {return E_NOTIMPL;};
  109.     virtual STDMETHODIMP TranslateAcceleratorSB(LPMSG lpmsg, WORD wID) {return E_NOTIMPL;};
  110.     virtual STDMETHODIMP BrowseObject(LPCITEMIDLIST pidl, UINT wFlags) {return E_NOTIMPL;};
  111.     virtual STDMETHODIMP GetViewStateStream(DWORD grfMode, LPSTREAM  *ppStrm) {return E_NOTIMPL; };
  112.     virtual STDMETHODIMP GetControlWindow(UINT id, HWND * lphwnd) {return E_NOTIMPL;};
  113.     virtual STDMETHODIMP SendControlMsg(UINT id, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pret) {return E_NOTIMPL;};
  114.     virtual STDMETHODIMP QueryActiveShellView(struct IShellView ** ppshv) {return E_NOTIMPL;};
  115.     virtual STDMETHODIMP OnViewWindowActive(struct IShellView * ppshv) {return E_NOTIMPL;};
  116.     virtual STDMETHODIMP SetToolbarItems(LPTBBUTTON lpButtons, UINT nButtons, UINT uFlags) {return E_NOTIMPL;};
  117.     virtual STDMETHODIMP GetWindow(HWND * lphwnd) {return E_NOTIMPL;};
  118.     virtual STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode) {return E_NOTIMPL;};
  119.     // *** IWinEventHandler methods ***
  120.     virtual STDMETHODIMP OnWinEvent(HWND hwnd, UINT dwMsg, WPARAM wParam, LPARAM lParam, LRESULT *plres);
  121.     virtual STDMETHODIMP IsWindowOwner(HWND hwnd) {return E_NOTIMPL;};
  122.     // *** IShellChangeNotify methods ***
  123.     STDMETHODIMP OnChange(LONG lEvent, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2);
  124.     // *** IShellFavoritesNameSpace methods ***
  125.     virtual STDMETHODIMP get_FOfflinePackInstalled(/*[out, retval]*/ VARIANT_BOOL *pVal) {return E_NOTIMPL;};
  126.     virtual STDMETHODIMP Import(void) {return DoImportOrExport(TRUE);};
  127.     virtual STDMETHODIMP Export(void) {return DoImportOrExport(FALSE);};
  128.     virtual STDMETHODIMP Synchronize(void) {return E_NOTIMPL;};
  129.     virtual STDMETHODIMP NewFolder(void);
  130.     virtual STDMETHODIMP ResetSort(void);
  131.     virtual STDMETHODIMP MoveSelectionDown(void) {MoveItemUpOrDown(FALSE); return S_OK;};
  132.     virtual STDMETHODIMP MoveSelectionUp(void) {MoveItemUpOrDown(TRUE); return S_OK;};
  133.     virtual STDMETHODIMP InvokeContextMenuCommand(BSTR strCommand);
  134.     virtual STDMETHODIMP MoveSelectionTo(void);
  135.     virtual STDMETHODIMP CreateSubscriptionForSelection(/*[out, retval]*/ VARIANT_BOOL *pBool);
  136.     virtual STDMETHODIMP DeleteSubscriptionForSelection(/*[out, retval]*/ VARIANT_BOOL *pBool);
  137.     virtual STDMETHODIMP SetRoot(BSTR bstrFullPath) {return E_NOTIMPL;};
  138.     // We aren't really a dual interface, but we play one on tv.
  139.     // *** IDispatch methods ***
  140.     virtual STDMETHODIMP GetTypeInfoCount(UINT *pctinfo) {return E_NOTIMPL;};
  141.     virtual STDMETHODIMP GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo ** ppTInfo) {return E_NOTIMPL;};
  142.     virtual STDMETHODIMP GetIDsOfNames(REFIID riid, LPOLESTR * rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) {return E_NOTIMPL;};
  143.     virtual STDMETHODIMP Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) {return E_NOTIMPL;};
  144.     // *** CDelegateDropTarget methods ***
  145.     virtual HRESULT GetWindowsDDT(HWND * phwndLock, HWND * phwndScroll);
  146.     virtual HRESULT HitTestDDT(UINT nEvent, LPPOINT ppt, DWORD * pdwId, DWORD * pdwDropEffect);
  147.     virtual HRESULT GetObjectDDT(DWORD dwId, REFIID riid, LPVOID * ppvObj);
  148.     virtual HRESULT OnDropDDT(IDropTarget *pdt, IDataObject *pdtobj, DWORD * pgrfKeyState, POINTL pt, DWORD *pdwEffect);
  149.     // *** IShellFolderFilterSite methods ***
  150.     virtual STDMETHODIMP SetFilter(IUnknown* punk);
  151.     CNscTree();
  152. protected:
  153.     ~CNscTree();
  154.     class CSelectionContextMenu : public IContextMenu2
  155.     {
  156.         friend CNscTree;
  157.     protected:
  158.         // *** IUnknown methods ***
  159.         STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj);
  160.         STDMETHODIMP_(ULONG) AddRef(void) ;
  161.         STDMETHODIMP_(ULONG) Release(void);
  162.         // *** IContextMenu methods ***
  163.         STDMETHOD(QueryContextMenu)(HMENU hmenu,
  164.                                 UINT indexMenu,
  165.                                 UINT idCmdFirst,
  166.                                 UINT idCmdLast,
  167.                                 UINT uFlags);
  168.         STDMETHOD(InvokeCommand)(LPCMINVOKECOMMANDINFO lpici);
  169.         STDMETHOD(GetCommandString)(UINT_PTR     idCmd,
  170.                                 UINT        uType,
  171.                                 UINT      * pwReserved,
  172.                                 LPSTR       pszName,
  173.                                 UINT        cchMax) { return E_NOTIMPL; };
  174.         // *** IContextMenu2 methods ***
  175.         STDMETHOD(HandleMenuMsg)(UINT uMsg, WPARAM wParam, LPARAM lParam);
  176.     protected:
  177.         ~CSelectionContextMenu();
  178.         IContextMenu *_QuerySelection();
  179.         IContextMenu *_pcmSelection;
  180.         IContextMenu2 *_pcm2Selection;
  181.         ULONG         _ulRefs;
  182.     public:
  183.         CSelectionContextMenu() : _pcmSelection(NULL),_ulRefs(0) {}
  184.     };
  185.     friend class CSelectionContextMenu;
  186.     CSelectionContextMenu _scm;
  187. private:
  188.     HRESULT _GetEnum(IShellFolder *psf, LPCITEMIDLIST pidlFolder, IEnumIDList **ppenum);
  189.     BOOL _ShouldShow(IShellFolder* psf, LPCITEMIDLIST pidlFolder, LPCITEMIDLIST pidlItem);
  190.     HWND _CreateTreeview();
  191.     void _SubClass(LPCITEMIDLIST pidlRoot);
  192.     void _UnSubClass(void);
  193.     int _GetChildren(IShellFolder *psf, LPCITEMIDLIST pidl, ULONG ulAttrs);
  194.     HRESULT _LoadSF(HTREEITEM htiRoot, LPCITEMIDLIST pidl, BOOL fAddingOnly, int * pcAdded, BOOL * pfOrdered);
  195.     void _GetDefaultIconIndex(LPCITEMIDLIST pidl, ULONG ulAttrs, TVITEM *pitem, BOOL fFolder);
  196.     LRESULT _OnEndLabelEdit(TV_DISPINFO *ptvdi);
  197.     LRESULT _OnBeginLabelEdit(TV_DISPINFO *ptvdi);
  198.     LPITEMIDLIST _CacheParentShellFolder(HTREEITEM hti, LPITEMIDLIST pidl);
  199.     BOOL _CacheShellFolder(HTREEITEM hti);
  200.     void _CacheDetails(IShellFolder *psf);
  201.     void _ReleaseRootFolder(void );
  202.     void _ReleasePidls(void);
  203.     void _ReleaseCachedShellFolder(void);
  204.     void _TvOnHide();
  205.     void _TvOnShow();
  206.     BOOL _ShouldAdd(LPCITEMIDLIST pidl);
  207.     void _ReorderChildren(HTREEITEM htiParent);
  208.     void _Sort(HTREEITEM hti, IShellFolder *psf);
  209.     void MoveItemUpOrDown(BOOL fUp);
  210.     HRESULT CreateNewFolder(HTREEITEM hti);
  211.     BOOL MoveItemsIntoFolder(HWND hwndParent);
  212.     HRESULT DoImportOrExport(BOOL fImport);
  213.     HRESULT DoSubscriptionForSelection(BOOL fCreate);
  214.     LRESULT _OnNotify(LPNMHDR pnm);
  215.     HRESULT _OnPaletteChanged(WPARAM wPAram, LPARAM lParam);
  216.     HRESULT _OnWindowCleanup(void);
  217.     HRESULT _HandleWinIniChange(void);
  218.     HRESULT _EnterNewFolderEditMode(LPCITEMIDLIST pidlNewFolder);
  219.     HTREEITEM _AddItemToTree(HTREEITEM htiParent, LPCITEMIDLIST pidl, int cChildren, int iPos, HTREEITEM htiAfter = TVI_LAST
  220.                         , BOOL fCheckForDups = TRUE, BOOL fMarked = FALSE);
  221.     HTREEITEM _FindChild(IShellFolder *psf, HTREEITEM htiParent, LPCITEMIDLIST pidlChild);
  222.     LPITEMIDLIST _GetFullIDList(HTREEITEM hti);
  223.     ITEMINFO *_GetTreeItemInfo(HTREEITEM hti);
  224.     PORDERITEM _GetTreeOrderItem(HTREEITEM hti);
  225.     BOOL _SetRoot(LPCITEMIDLIST pidlRoot, int iExpandDepth, LPCITEMIDLIST pidlExpandTo, NSSR_FLAGS flags);
  226.     void _OnGetInfoTip(NMTVGETINFOTIP *pnm);
  227.     LRESULT _OnSetCursor(NMMOUSE* pnm);
  228.     void _ApplyCmd(HTREEITEM hti, IContextMenu *pcm, UINT cmdId);
  229.     HRESULT _QuerySelection(IContextMenu **ppcm, HTREEITEM *phti);
  230.     HMENU   _CreateContextMenu(IContextMenu *pcm, HTREEITEM hti);
  231.     LRESULT _OnContextMenu(short x, short y);
  232.     void _OnBeginDrag(NM_TREEVIEW *pnmhdr);
  233.     void _OnChangeNotify(LONG lEvent, LPCITEMIDLIST pidl
  234.                                 , LPCITEMIDLIST pidlExtra);
  235.     HRESULT _OnDeleteItem(NM_TREEVIEW *pnm);
  236.     void _OnGetDisplayInfo(TV_DISPINFO *pnm);
  237.     HRESULT _ChangePidlRoot(LPCITEMIDLIST pidl);
  238.     BOOL _IsExpandable(HTREEITEM hti);
  239.     BOOL _OnItemExpandingMsg(NM_TREEVIEW *pnm);
  240.     BOOL _OnItemExpanding(HTREEITEM htiToActivate, UINT action, BOOL fExpandedOnce);
  241.     BOOL _OnSelChange();
  242.     BOOL _FIsItem(IShellFolder * psf, LPCITEMIDLIST pidlTarget, HTREEITEM hti);
  243.     HTREEITEM _FindFromRoot(HTREEITEM htiRoot, LPCITEMIDLIST pidl);
  244.     HRESULT _OnSHNotifyRename(LPCITEMIDLIST pidl, LPCITEMIDLIST pidlNew);
  245.     HRESULT _OnSHNotifyDelete(LPCITEMIDLIST pidl, int *piPosDeleted, HTREEITEM *phtiParent);
  246.     void _OnSHNotifyUpdateItem(LPCITEMIDLIST pidl);
  247.     HRESULT _OnSHNotifyUpdateDir(LPCITEMIDLIST pidl);
  248.     HRESULT _OnSHNotifyCreate(LPCITEMIDLIST pidl, int iPosition, HTREEITEM htiParent);
  249.     void _OnSHNotifyOnlineChange(HTREEITEM htiRoot, BOOL fGoingOnline);
  250.     void _OnSHNotifyCacheChange(HTREEITEM htiRoot, DWORD_PTR dwChanged);
  251.     HRESULT _IdlRealFromIdlSimple( IShellFolder * psf
  252.                                  , LPCITEMIDLIST pidlSimple
  253.                                  , LPITEMIDLIST * ppidlReal);
  254.     void _DtRevoke();
  255.     void _DtRegister();
  256.     BOOL _FInTree(HDPA hdpa, int celt, HTREEITEM hti);
  257.     BOOL _IsItemExpanded(HTREEITEM hti);
  258.     HRESULT _UpdateDir(HTREEITEM hti);
  259.     HRESULT _GetDisplayNameOf(IShellFolder *psf, LPCITEMIDLIST pidl, 
  260.                               DWORD uFlags, LPSHELLDETAILS pdetails);
  261.     HRESULT _ParentFromItem(LPCITEMIDLIST pidl, IShellFolder** ppsfParent, LPCITEMIDLIST *ppidlChild);
  262.     HRESULT _CompareIDs(IShellFolder *psf, LPITEMIDLIST pidl1, LPITEMIDLIST pidl2);
  263.     static int CALLBACK _TreeCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
  264.     static LRESULT CALLBACK _SubClassTreeWndProc(
  265.                                   HWND hwnd, UINT uMsg, 
  266.                                   WPARAM wParam, LPARAM lParam,
  267.                                   UINT_PTR uIdSubclass, DWORD_PTR dwRefData);
  268. protected:
  269.     //used for background thread icon + draw info extraction
  270.     static void s_NscIconCallback(LPVOID pvData, UINT_PTR uId, int iIcon, int iOpenIcon, DWORD dwFlags, UINT uMagic);
  271.     
  272. private:
  273. #ifdef DEBUG
  274.     void TraceHTREE(HTREEITEM hti, LPCTSTR pszDebugMsg);
  275.     void TracePIDL(LPCITEMIDLIST pidl, LPCTSTR pszDebugMsg);
  276.     void TracePIDLAbs(LPCITEMIDLIST pidl, LPCTSTR pszDebugMsg);
  277. #endif
  278.     static int CALLBACK _TreeOrder(LPARAM lParam1, LPARAM lParam2
  279.                                             , LPARAM lParamSort);
  280.     BOOL _IsOrdered(HTREEITEM htiRoot);
  281.     void _SelectPidl(LPCITEMIDLIST pidl, BOOL fCreate, BOOL fReinsert = FALSE);
  282.     HRESULT _InsertChild(HTREEITEM htiParent, IShellFolder *psfParent, LPCITEMIDLIST pidlChild, BOOL fExpand, int iPosition);
  283.     LRESULT _OnCommand(WPARAM wParam, LPARAM lParam);
  284.     IStream *GetOrderStream(LPCITEMIDLIST pidl, DWORD grfMode);
  285.     HRESULT _PopulateOrderList(HTREEITEM htiRoot);
  286.     void _FreeOrderList(HTREEITEM htiRoot);
  287.     void _Dropped(void);
  288.     LRESULT _OnCDNotify(LPNMCUSTOMDRAW pnm);
  289.     BOOL _IsTopParentItem(HTREEITEM hti);
  290.     BOOL _MoveNode(HWND _hwndTree, int _iDragSrc, int iNewPos, LPCITEMIDLIST pidl);
  291.     void _TreeInvalidateItemInfo(HTREEITEM hItem, UINT mask);
  292.     void _InvalidateImageIndex(HTREEITEM hItem, int iImage);
  293.     void _DrawItem(HTREEITEM hti, TCHAR * psz, HDC hdc, LPRECT prc
  294.             , DWORD dwFlags, int iLevel, COLORREF clrbk, COLORREF clrtxt);
  295.     void _DrawIcon(HTREEITEM hti,HDC hdc, int iLevel, RECT *prc, DWORD dwFlags);
  296.     void _DrawActiveBorder(HDC hdc, LPRECT prc);
  297.     void _UpdateActiveBorder(HTREEITEM htiSelected);
  298.     void _MarkChildren(HTREEITEM htiParent, BOOL fOn);
  299.     BOOL _IsMarked(HTREEITEM hti);
  300.     void _UpdateItemDisplayInfo(HTREEITEM hti);
  301.     void _TreeSetItemState(HTREEITEM hti, UINT stateMask, UINT state);
  302.     void _TreeNukeCutState();
  303.     BOOL _IsChannelFolder(HTREEITEM hti);
  304.     BOOL IsExpandableChannelFolder(IShellFolder *psf, LPCITEMIDLIST pidl);
  305.     BOOL _LoadOrder(HTREEITEM hti, LPCITEMIDLIST pidl, IShellFolder* psf, HDPA* phdpa);
  306.     LONG                _cRef;
  307.     HWND                _hwndParent;            // parent window to notify
  308.     HWND                _hwndTree;              // tree or combo box
  309.     HWND                _hwndNextViewer;
  310.     DWORD               _style;
  311.     DWORD               _grfFlags;              // Flags to filter what goes in the tree.
  312.     DWORD               _dwFlags;               // Behavior Flags (NSS_*)
  313.     BITBOOL             _fInitialized : 1;      // Has INSCTree::Initialize() been called at least once yet?
  314.     BITBOOL             _fIsSelectionCached: 1; // If the WM_NCDESTROY has been processed, then we squired the selected pidl(s) in _pidlSelected
  315.     BITBOOL             _fCacheIsDesktop : 1;   // state flags
  316.     BITBOOL             _fAutoExpanding : 1;    // tree is auto-expanding
  317.     BITBOOL             _fDTRegistered:1;       // have we registered as droptarget?
  318.     BITBOOL             _fpsfCacheIsTopLevel : 1;   // is the cached psf a root channel ?
  319.     BITBOOL             _fDragging : 1;         // one o items being dragged
  320.     BITBOOL             _fStartingDrag : 1;     // starting to drag an item
  321.     BITBOOL             _fDropping : 1;         // a drop occurred in the nsc
  322.     BITBOOL             _fInSelectPidl : 1;     // we are performing a SelectPidl
  323.     BITBOOL             _fInserting : 1;        // we're on the insertion edge.
  324.     BITBOOL             _fInsertBefore : 1;     // a drop occurred in the nsc
  325.     BITBOOL             _fClosing : 1;          // are we closing ?
  326.     BITBOOL             _fRclick : 1;           // are we right clicking.
  327.     BITBOOL             _fInLabelEdit:1;
  328.     BITBOOL             _fCollapsing:1;         // is a node collapsing.
  329.     BITBOOL             _fRefreshing:1;         // refreshing now.
  330.     BITBOOL             _fOnline:1;             // is inet online?
  331.     BITBOOL             _fWeChangedOrder:1;     // did we change the order?
  332.     BITBOOL             _fHandlingShellNotification:1; //are we handing a shell notification?
  333.     BITBOOL             _fSingleExpand:1;       // are we in single expand mode
  334.     BITBOOL             _fHasFocus:1;           // does nsc have the focus?
  335.     BITBOOL             _fIgnoreNextSelChange:1;// hack to get around treeview keydown bug
  336.     BITBOOL             _fIgnoreNextItemExpanding:1; //hack to get around annoying single expand behavior
  337.     BITBOOL             _fSubClassed:1;         // Have we subclassed the window yet?
  338.     BITBOOL             _fAsyncDrop:1;          // async drop from outside or another inside folder.
  339.     BITBOOL             _fOrdered:1;              // is root folder ordered.
  340.     int                 _cxOldWidth;
  341.     UINT                _mode;
  342.     IContextMenu*       _pcm;                  // context menu currently being displayed
  343.     IContextMenu2*      _pcmSendTo;            // deal with send to hack so messages tgo right place.
  344.     LPITEMIDLIST        _pidlRoot;
  345.     LPITEMIDLIST        _pidlSelected;          // Valid if _fIsSelectionCached is true.  Used for INSCTree::GetSelectedItem() after tree is gone.
  346.     HTREEITEM           _htiCache;              // tree item associated with Current shell folder
  347.     IShellFolder*       _psfCache;             // cache of the last IShellFolder I needed...
  348.     IShellFolder2*      _psf2Cache;             // IShellDetails2 for _psfISD2Cache
  349.     IShellFolderFilter* _pFilter;    
  350.     ULONG               _ulDisplayCol;          // Default display col for _psfCache
  351.     ULONG               _ulSortCol;             // Default sort col for _psfCache
  352.     ULONG               _nChangeNotifyID;       // SHChangeNotify registration ID
  353.     HDPA                _hdpaOrd;               // dpa order for current shell folder.
  354. // drop target privates
  355.     HTREEITEM           _htiCur;                // current tree item (dragging over)
  356.     DWORD               _dwLastTime;
  357.     DWORD               _dwEffectCur;           // current drag effect
  358.     int                 _iDragSrc;              // dragging from this pos.
  359.     int                 _iDragDest;             // destination drag point
  360.     HTREEITEM           _htiDropInsert;         // parent of inserted item.
  361.     HTREEITEM           _htiDragging;           // the tree item being dragged during D&D.
  362.     HTREEITEM           _htiCut;                // Used for Clipboard and Visuals    
  363.     LPITEMIDLIST        _pidlDrag;              // pidl of item being dragged from within.
  364.     HTREEITEM           _htiFolderStart;        // what folder do we start in.
  365.     HICON               _hicoPinned;            // drawn over items that are sticky in the inet cache
  366.     HWND                _hwndDD;                // window to draw custom drag cursors on.
  367.     HTREEITEM           _htiActiveBorder;       // the folder to draw the active border around
  368.     CWinInetNotify      _inetNotify;            // hooks up wininet notifications (online/offline, etc)
  369.     IShellTaskScheduler* _pTaskScheduler;       // background task icon/info extracter
  370.     int                 _iDefaultFavoriteIcon;  // index of default favorite icon in system image list
  371.     int                 _iDefaultFolderIcon;    // index of default folder icon in system image list
  372.     HTREEITEM           _htiRenaming;           // hti of item being renamed in rename mode
  373.     LPITEMIDLIST        _pidlNewFolderParent;   // where the new folder will be arriving (when user picks "Create New Folder")
  374.     BYTE                _bSynchId;              // magic number for validating tree during background icon extraction
  375.     enum {
  376.         idCmdStart    = RSVIDM_LAST + 1,        // our private menu items end here
  377.     };
  378. };
  379. // util macros.
  380. #define GetPoi(p)   (((ITEMINFO *)p)->poi)
  381. #define GetPii(p)   ((ITEMINFO *)p)
  382. #include "nscband.h"
  383. #endif  // _NSC_C