2025-04-27 07:49:33 -04:00

232 lines
6.6 KiB
C++

// ***************************************************************************
//
// Copyright (c) 1996-2001 Microsoft Corporation, All Rights Reserved
//
// File: CClassTree.h
//
// Description:
// This file declares the CClassTree class which is a part of the Class
// Navigator OCX, it is a subclass of the Microsoft CTreeCtrl common
// control and performs the following functions:
// a. Insertion of individual classes
// b. Allows classes to be "expanded" by going out to the database
// to get its subclasses
// c. Allows classes to be renamed.
// d. Supports operations to add and delete tree branches.
// e. Supports OLE drag and drop (disabled for ALPHA)
//
// Part of:
// ClassNav.ocx
//
// Used by:
//
//
// History:
// Judith Ann Powell 10-08-96 Created.
//
//
// **************************************************************************
#ifndef _CClassTree_H_
#define _CClassTree_H_
#include "SchemaInfo.h"
//****************************************************************************
//
// CLASS: CClassTree
//
// Description:
// This class is a subclass of the Mocrosoft CTreeCtrl common control. It
// specializes the common control to interact with the HMM database and
// display HMM class data.
//
// Public members:
//
// CClassTree Public constructor.
// GetSelection Returns the currently selected tree item.
//
//============================================================================
//
// CClassTree::CClassTree
//
// Description:
// This member function is the public constructor. It initializes the state
// of member variables.
//
// Parameters:
// VOID
//
// Returns:
// NONE
//
//============================================================================
//
// CClassTree::GetSelection
//
// Description:
// This member function returns the currently selected tree item.
//
// Parameters:
// VOID
//
// Returns:
// HTREEITEM The tree control item currently selected.
//
//****************************************************************************
struct IWbemClassObject;
class CClassNavCtrl;
class CTreeDropTarget;
class CBanner;
class CClassTree : public CTreeCtrl
{
public:
CClassTree();
CString GetSelection() {return m_csSelection;}
void ContinueProcessSelection(UINT nFlags, CPoint point);
long m_lSelection;
UINT m_uiSelectionTimer;
CSchemaInfo m_schema;
protected:
CClassNavCtrl *m_pParent;
CString m_csSelection;
UINT m_uTreeCF;
BOOL m_bInDrag;
DROPEFFECT m_prevDropEffect;
CLIPFORMAT m_cfObjectDescriptor;
BOOL m_bDropTargetRegistered;
BOOL m_bDragAndDropState;
CSize m_dragSize;
CPoint m_dragPoint;
HTREEITEM m_htiDroppedParent;
HTREEITEM m_htiDropped;
IWbemClassObject *m_pimcoDroppedParent;
IWbemClassObject *m_pimcoDropped;
LONG m_lClickTime;
BOOL m_bDeleting;
// Context Menu
CMenu m_cmContext;
BOOL IsChildNodeOf
(HTREEITEM hitemChild, HTREEITEM hitemSuspectedParent);
void OnItemExpanding(NMHDR *pNMHDR, LRESULT *pResult);
HTREEITEM InsertTreeItem
( HTREEITEM hParent,
LPARAM lparam,
int iBitmap,
int iSelectedBitmap,
LPCTSTR pszText,
BOOL bBold = FALSE,
BOOL bChildren = FALSE);
int ExtendedSelectionFromTree(CPtrArray &cpaExtendedSelection,int nState = 2);
void ExtendedSelectionFromRoot
(HTREEITEM hItem, CPtrArray &cpaExtendedSelection, int nState = 2);
void ClearExtendedSelectionFromRoot (HTREEITEM hItem);
void SetExtendedSelectionFromRoot (HTREEITEM hItem);
CString GetSelectionPath(HTREEITEM hItem = NULL);
// OLE Drag and Drop
virtual BOOL OnDrop
(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point);
virtual DROPEFFECT OnDropEx
(COleDataObject* pDataObject,
DROPEFFECT dropEffect, DROPEFFECT dropEffectList, CPoint point);
virtual DROPEFFECT OnDragEnter
(COleDataObject* pDataObject, DWORD grfKeyState, CPoint point);
virtual DROPEFFECT OnDragOver
(COleDataObject* pDataObject, DWORD grfKeyState, CPoint point);
virtual DROPEFFECT OnDragScroll
(DWORD grfKeyState, CPoint point);
virtual void OnDragLeave();
BOOL PreCreateWindow(CREATESTRUCT& cs);
HTREEITEM AddNewClass(HTREEITEM hParent, IWbemClassObject *imcoNew);
void RefreshIcons(HTREEITEM hItem);
HTREEITEM AddTreeObject2(HTREEITEM hParent, CSchemaInfo::CClassInfo &info);
void InitTreeState (CClassNavCtrl *pParent);
void ReleaseClassObjects(HTREEITEM hItem);
SAFEARRAY *GetExtendedSelection(int nState = 2);
int NumExtendedSelection(int nState = 2);
void ClearExtendedSelection();
void SetExtendedSelection();
HTREEITEM FindObjectinChildren
(HTREEITEM hItem, IWbemClassObject *pClassObject);
HTREEITEM FindAndOpenObject(IWbemClassObject *pClass) ;
void SetDeleting(BOOL bDeleting) {m_bDeleting = bDeleting;}
void DeleteBranch(HTREEITEM &hItem);
BOOL OnScroll(UINT nScrollCode, UINT nPos, BOOL bDoScroll);
BOOL OnScrollBy(CSize sizeScroll, BOOL bDoScroll);
UINT m_uiTimer;
BOOL m_bMouseDown;
BOOL m_bKeyDown;
BOOL m_bUseItem;
HTREEITEM m_hItemToUse;
BOOL m_bFirstSetFocus;
int m_nSpinFocus;
HTREEITEM m_nSelectedItem;
void UpdateItemData(HTREEITEM hItem);
protected:
//{{AFX_MSG(CClassTree)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnDestroy();
afx_msg void OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
afx_msg void OnItemexpanded(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnBeginlabeledit(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnKeydown(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
afx_msg void OnKillfocus(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnSetfocus(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnSelchanging(NMHDR* pNMHDR, LRESULT* pResult);
//}}AFX_MSG
afx_msg LRESULT SelectTreeItem(WPARAM, LPARAM);
afx_msg LRESULT SelectTreeItemOnFocus(WPARAM, LPARAM);
DECLARE_MESSAGE_MAP()
private:
friend class CBanner;
friend class CTreeDropTarget;
friend class CClassNavCtrl;
};
#endif _CClassTree_H_
/* EOF: CClassTree.h */