734 lines
20 KiB
C++
734 lines
20 KiB
C++
// CMultiTreeCtrl.h : header file
|
|
|
|
#ifndef _CMULTITREECTRL_H_
|
|
#define _CMULTITREECTRL_H_
|
|
|
|
#include "CMHeaderCtrl.h"
|
|
#include "XArray.h"
|
|
|
|
/*
|
|
Doc:
|
|
-if no column (count==0), header uses treectrl->GetWindowText string
|
|
|
|
-Sort(item) in multicolumn won't work if you forgot to call
|
|
void SetColumnSortFct(int col, MULTITREESORTF sortf);
|
|
or
|
|
void SetCurrentSortFct(MULTITREESORTF sortf);
|
|
void SetColumnSort() is not enough
|
|
*/
|
|
|
|
#ifndef CUIK
|
|
namespace CKControl //----------------------------------------
|
|
{
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Special Edit for MT
|
|
|
|
class CMTEdit : public CEdit
|
|
{
|
|
|
|
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
|
|
};
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CMultiTreeCtrl window
|
|
|
|
#define NTVS_SUBITEMSELECT 0x00000001
|
|
#define NTVS_DRAWHSEPARATOR 0x00000002
|
|
#define NTVS_DRAWVSEPARATOR 0x00000004
|
|
#define NTVS_NORIGHTSELECT 0x00000008
|
|
#define NTVS_ALLOWCOLUMNDROP 0x00000010
|
|
#define NTVS_SINGLESELECTION 0x00000020
|
|
#define NTVS_DRAWBORDER 0x00000040 //does not work yet
|
|
#define NTVS_DRAGRECT_AVAILABLE_1STCOLUMN 0x00000080 //enabledragrect(true), available if click after text
|
|
#define NTVS_DRAGRECT_AVAILABLE_1STCOLUMN_ALT 0x00000100 //enabledragrect(true), available if click after text
|
|
#define NTVS_OWNERDRAWN_BACKnTEXTCOLOR 0x00000200 //u'll receive a WM_DRAWITEM msg,dlgid,&DRAWITEMSTRUCT , please change
|
|
//dis.itemAction = BackColor;
|
|
//dis.itemState = TextColor;
|
|
#define MTN_CUSTOMCOLORS WM_USER+150 //Multi Tree Notification: wParam = controlID, lParam = MTN_CUSTOMCOLORS_STRUCT*
|
|
|
|
/* defined later:
|
|
struct MTN_CUSTOMCOLORS_STRUCT
|
|
{
|
|
COLORREF BackColor;
|
|
COLORREF TextColor;
|
|
HNTVITEM Item; //HNTVITEM
|
|
MTN_CUSTOMCOLORS_STRUCT(COLORREF bc,COLORREF tc,HNTVITEM i) : BackColor(bc),TextColor(tc),Item(i) {}
|
|
};
|
|
*/
|
|
|
|
|
|
#define NTVSI_NOP 0x00000001
|
|
#define NTVSI_TEXT 0x00000002
|
|
#define NTVSI_BITMAP 0x00000004
|
|
#define NTVSI_WINDOW 0x00000008
|
|
#define NTVSI_WINDOWCLIPPED 0x00000010
|
|
#define NTVSI_OWNERDRAWN 0x00000020
|
|
#define NTVSI_EDITABLE 0x00000040
|
|
#define NTVSI_TEXTNODELETE 0x00000080
|
|
|
|
#define NTVSI_TOP 0x00000000
|
|
#define NTVSI_LEFT 0x00000000
|
|
#define NTVSI_CENTER 0x00000100
|
|
#define NTVSI_RIGHT 0x00000200
|
|
#define NTVSI_VCENTER 0x00000400
|
|
#define NTVSI_BOTTOM 0x00000800
|
|
|
|
#define NTVSI_HIDDEN 0x00001000
|
|
#define NTVSI_STATENORMAL 0x00002000
|
|
#define NTVSI_STATEINTER 0x00004000
|
|
#define NTVSI_STATEPUSHED 0x00008000
|
|
|
|
|
|
#define NTVSI_DEFAULT (NTVSI_TEXT | NTVSI_LEFT | NTVSI_VCENTER)
|
|
|
|
struct tagNTVITEM;
|
|
struct tagVITVSUBITEM;
|
|
|
|
typedef void (*NTVUpdateValueCB)(tagNTVITEM *it,int sub,tagVITVSUBITEM *subitem);
|
|
|
|
typedef struct tagVITVSUBITEM{
|
|
char *Text;
|
|
int iIndex;
|
|
int iInterIndex;
|
|
int iPushedIndex;
|
|
union {
|
|
DWORD flags;
|
|
DWORD Flags;
|
|
};
|
|
void *data;
|
|
NTVUpdateValueCB UpdateCB;
|
|
HWND hWnd;
|
|
RECT rcItem; // used for Picking not copied
|
|
public :
|
|
tagVITVSUBITEM()
|
|
{
|
|
Text = NULL;
|
|
flags = NTVSI_DEFAULT;
|
|
iIndex = -1;
|
|
iInterIndex = -1;
|
|
iPushedIndex = -1;
|
|
rcItem.top = 0;
|
|
rcItem.bottom = 0;
|
|
rcItem.left = 0;
|
|
rcItem.right = 0;
|
|
hWnd = NULL;
|
|
UpdateCB = NULL; //update call back, called each redraw time
|
|
data = NULL;
|
|
}
|
|
~tagVITVSUBITEM()
|
|
{
|
|
if ((flags & NTVSI_TEXTNODELETE)==0)
|
|
delete [] Text;
|
|
|
|
if(hWnd)
|
|
::DestroyWindow(hWnd);
|
|
}
|
|
|
|
tagVITVSUBITEM& operator=(const tagVITVSUBITEM& si)
|
|
{
|
|
flags = si.flags;
|
|
iIndex = si.iIndex;
|
|
iInterIndex = si.iInterIndex;
|
|
iPushedIndex = si.iPushedIndex;
|
|
hWnd = si.hWnd;
|
|
UpdateCB = si.UpdateCB;
|
|
data = si.data;
|
|
hWnd = si.hWnd;
|
|
|
|
delete [] Text;
|
|
|
|
if(si.Text)
|
|
{
|
|
Text = new char[strlen(si.Text) + 1];
|
|
strcpy(Text,si.Text);
|
|
}
|
|
else
|
|
Text = NULL;
|
|
|
|
return *this;
|
|
}
|
|
} VITVSUBITEM;
|
|
|
|
// states Flags
|
|
#define NTVI_DISABLED 0x00000001 // Cannot be selected
|
|
#define NTVI_DONOTSORT 0x00000002 // Don't sort children
|
|
#define NTVI_ISSEPARATOR 0x00000004 // Flagged as a separator i.e. a black fat line will be drawn after this item
|
|
#define NTVI_HIDDEN 0x00000008 // Is hidden
|
|
#define NTVI_EXPANDED 0x00000010 // Is Expanded
|
|
#define NTVI_SELECTED 0x00000020 // Is Selected
|
|
#define NTVI_ISENTITY 0x00000040 // CkEntity Member is valid
|
|
#define NTVI_HIDEEMPTY 0x00000080 // hidden if not children present
|
|
#define NTVI_EDITABLE 0x00000100 // Can edit name
|
|
#define NTVI_DRAGABLE 0x00000200 // Can be dragged
|
|
#define NTVI_ALPHAFIRST 0x00000400 // Must be in top regardless of the sort fct used
|
|
#define NTVI_ALPHALAST 0x00000800 // Must be at bottom regardless of the sort fct used
|
|
#define NTVI_PREALLOC 0x00001000 // Prealloc sub-childrens
|
|
#define NTVI_OWNERDRAW 0x00002000 // Owner Drawn
|
|
#define NTVI_AFTEROWNERDRAW 0x00004000 // Owner Drawn after original draw
|
|
#define NTVI_FREE 0x00100000 // Free Flag for user
|
|
|
|
// SetItem Flags
|
|
#define NTVIF_FLAGS 0x00000001 // Set flags
|
|
#define NTVIF_FONT 0x00000002 // Set font
|
|
#define NTVIF_CKENTITY 0x00000004 // Set entity
|
|
#define NTVIF_DATA 0x00000008 // Set data
|
|
#define NTVIF_ICON 0x00000010 // Set icon
|
|
#define NTVIF_REDRAW 0x00000020 // Redraw After Flag settings
|
|
|
|
// Hit Test return Flags
|
|
|
|
#define NTVHT_NOWHERE 0x00000001 // In the client area but below the last item.
|
|
#define NTVHT_ONITEMBUTTON 0x00000002 // On the button associated with an item.
|
|
#define NTVHT_ONITEMICON 0x00000004 // On the bitmap associated with an item.
|
|
#define NTVHT_ONITEMINDENT 0x00000008 // In the indentation associated with an item.
|
|
#define NTVHT_ONITEMLABEL 0x00000010 // On the label (string) associated with an item.
|
|
#define NTVHT_ONITEMRIGHT 0x00000020 // Right off the label.
|
|
#define NTVHT_ONITEMSUB 0x00000040 // On sub Item
|
|
#define NTVHT_ONITEMSUBICON 0x00000080 // On sub Item icon
|
|
#define NTVHT_ONHEADER 0x00000100 // On Header
|
|
|
|
#define NTVHT_ONITEM ( NTVHT_ONITEMICON | NTVHT_ONITEMLABEL )// On the bitmap or label associated with an item.
|
|
|
|
|
|
// Expand Flags
|
|
#define NTVE_REDRAW 0x00000001 // Redraw after selection
|
|
#define NTVE_EXPAND 0x00000002 // Expand Item
|
|
#define NTVE_COLLAPSE 0x00000004 // Collapse Item
|
|
#define NTVE_TOGGLE 0x00000008 // Toggle Item
|
|
#define NTVE_CALCCOL 0x00000010 // Recalculate header size to match items sizes
|
|
|
|
// Select Flags
|
|
#define NTVS_SELECT 0x00000001 // Select Item
|
|
#define NTVS_UNSELECT 0x00000002 // Deselect Item
|
|
#define NTVS_TOGGLE 0x00000004 // Toggle Item Selection
|
|
#define NTVS_ADD 0x00000008 // Add to current Selection
|
|
#define NTVS_REDRAW 0x00000010 // Redraw after selection
|
|
|
|
|
|
// Find Flags
|
|
#define NTVF_CHILD 0x00000001 // Get Child
|
|
#define NTVF_BROTHER 0x00000002 // Get Brother
|
|
#define NTVF_ALL 0xffffffff
|
|
|
|
typedef void (*NTVUpdateItemCB)(tagNTVITEM *it);
|
|
|
|
typedef struct tagNTVITEM
|
|
{
|
|
CString Text; // Text used for item that are not entities
|
|
int Icon; // Icon Index Associated with item
|
|
int Font; // Font Used to draw Item
|
|
DWORD CkEntity; // Is either an object id or a CK class ID for subfolders (check for flags & IS_ENTITY)
|
|
DWORD Flags; // Flags
|
|
LPVOID Data; // Associated Data
|
|
XArray<VITVSUBITEM*> Subs; // Array of sub items
|
|
tagNTVITEM* hParent; // Parent item
|
|
XArray<tagNTVITEM*> Children; // Array of child
|
|
int Depth; // number of parents
|
|
int Height; // height of item
|
|
int ToTop; // Distance to top
|
|
RECT rcText; // Text Rectangle
|
|
RECT rcClippedText; // Clipped text rectangle
|
|
NTVUpdateItemCB UpdateCB;
|
|
tagNTVITEM* ParentFolder; // Item controled by
|
|
tagNTVITEM* PartOf; // Part of
|
|
tagNTVITEM()
|
|
{
|
|
Icon = 0;
|
|
Font = 0;
|
|
CkEntity = 0;
|
|
Flags = 0;
|
|
Data = NULL;
|
|
hParent = NULL;
|
|
Depth = 0;
|
|
Height = 0;
|
|
ToTop = 0;
|
|
ParentFolder= NULL;
|
|
PartOf = NULL;
|
|
UpdateCB = NULL;
|
|
ZeroMemory(&rcText,sizeof(rcText));
|
|
}
|
|
~tagNTVITEM()
|
|
{
|
|
int i,count = Subs.Size();
|
|
for(i = 0; i < count; i++ )
|
|
delete Subs[i];
|
|
}
|
|
} NTVITEM,*HNTVITEM;
|
|
|
|
struct MTN_CUSTOMCOLORS_STRUCT
|
|
{
|
|
COLORREF BackColor;
|
|
COLORREF TextColor;
|
|
HNTVITEM Item; //HNTVITEM
|
|
MTN_CUSTOMCOLORS_STRUCT(COLORREF bc,COLORREF tc,HNTVITEM i) : BackColor(bc),TextColor(tc),Item(i) {}
|
|
};
|
|
|
|
|
|
#define tviIsDisabled(i) (i->Flags & NTVI_DISABLED)
|
|
#define tviIsNotSorted(i) (i->Flags & NTVI_DONOTSORT)
|
|
#define tviIsSeparator(i) (i->Flags & NTVI_ISSEPARATOR )
|
|
#define tviIsHidden(i) (i->Flags & NTVI_HIDDEN)
|
|
#define tviIsExpanded(i) (i->Flags & NTVI_EXPANDED)
|
|
#define tviIsSelected(i) (i->Flags & NTVI_SELECTED)
|
|
#define tviIsEntity(i) (i->Flags & NTVI_ISENTITY)
|
|
#define tviIsHideEmpty(i) (i->Flags & NTVI_HIDEEMPTY)
|
|
#define tviIsEditable(i) (i->Flags & NTVI_EDITABLE)
|
|
#define tviIsDragable(i) (i->Flags & NTVI_DRAGABLE)
|
|
#define tviIsAlphaFirst(i) (i->Flags & NTVI_ALPHAFIRST)
|
|
#define tviIsPreAlloc(i) (i->Flags & NTVI_PREALLOC)
|
|
#define tviIsOwnerDrawn(i) (i->Flags & NTVI_OWNERDRAW);
|
|
|
|
typedef int (*MULTITREESORTF)(const void* it1,const void* it2);
|
|
|
|
#ifdef CUIK
|
|
class CMultiTreeCtrl : public CWnd
|
|
#else
|
|
class CKCONTROLS_CLASS_DECL CMultiTreeCtrl : public CWnd
|
|
#endif
|
|
{
|
|
// Construction
|
|
public:
|
|
|
|
// Ctors
|
|
|
|
CMultiTreeCtrl(CKContext *context=0);
|
|
virtual ~CMultiTreeCtrl();
|
|
BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
|
|
|
|
void SetCKContext(CKContext* context); //set ck context if you plan to use ckentities inside tree / list
|
|
|
|
void SetStyle(DWORD Style);
|
|
DWORD GetStyle();
|
|
|
|
static void CompressArray(XArray<HNTVITEM>& ioArray);
|
|
static void CompressArray(XArray<HNTVITEM>& iArray,XArray<HNTVITEM>& oResult);
|
|
|
|
|
|
// Image List management
|
|
|
|
void SetButtonImageList(CImageList *il); // Image List used to Draw arraws next to the Item Name
|
|
void SetItemImageList(CImageList *il,BOOL del=FALSE); //
|
|
void SetSubItemImageList(CImageList *il);
|
|
|
|
CImageList *GetItemImageList();
|
|
CImageList *GetSubItemImageList();
|
|
CImageList *GetButtonImageList();
|
|
|
|
// Item Pre-allocation Size
|
|
|
|
void SetPreAllocSize(int size);
|
|
int GetPreAllocSize();
|
|
|
|
// Picking
|
|
|
|
HNTVITEM HitTest(CPoint point,int *sub,UINT *flags);
|
|
|
|
// Apparence / Color / Font
|
|
|
|
void SetFont( CFont* pFont, BOOL bRedraw);
|
|
void SetColors( COLORREF backColor,
|
|
COLORREF textColor,
|
|
COLORREF textBackColor,
|
|
COLORREF textSelectedColor,
|
|
COLORREF textBackSelectedColor,
|
|
COLORREF textActivePartBackColor,
|
|
COLORREF borderColor=0
|
|
);
|
|
void CMultiTreeCtrl::GetColors(
|
|
COLORREF *backColor,
|
|
COLORREF *textColor,
|
|
COLORREF *textBackColor,
|
|
COLORREF *textSelectedColor,
|
|
COLORREF *textBackSelectedColor,
|
|
COLORREF *textActivePartBackColor,
|
|
COLORREF *borderColor=NULL
|
|
);
|
|
|
|
int GetIndent();
|
|
void SetIndent(int indent);
|
|
|
|
// Item Misc
|
|
|
|
int GetItemCount();
|
|
|
|
BOOL ItemHasChildren(HNTVITEM item);
|
|
BOOL ItemHasVisibleChildren(HNTVITEM item);
|
|
|
|
// Iterator
|
|
|
|
|
|
int GetVisibleCount();
|
|
BOOL IsItemVisible(HNTVITEM item);
|
|
|
|
HNTVITEM GetFirstVisibleItem();
|
|
HNTVITEM GetNextVisibleItem(HNTVITEM item);
|
|
HNTVITEM GetPreviousVisibleItem(HNTVITEM item);
|
|
HNTVITEM GetLastVisibleItem();
|
|
|
|
|
|
HNTVITEM GetRoot();
|
|
HNTVITEM GetLastItem(HNTVITEM it = NULL);
|
|
HNTVITEM GetNextItem(HNTVITEM item);
|
|
HNTVITEM GetNextSibling(HNTVITEM item);
|
|
HNTVITEM GetPreviousSibling(HNTVITEM item);
|
|
HNTVITEM GetParentItem(HNTVITEM item);
|
|
|
|
// Item Insertion
|
|
|
|
HNTVITEM InsertItem( LPCTSTR lpszItem, HNTVITEM hParent = NULL, BOOL draw = TRUE);
|
|
HNTVITEM InsertItem( LPCTSTR lpszItem, int IconId = -1,HNTVITEM hParent = NULL, BOOL draw = TRUE);
|
|
HNTVITEM InsertItem( CK_ID ckid,HNTVITEM hParent = NULL,BOOL draw = TRUE);
|
|
HNTVITEM InsertItem( HNTVITEM it,HNTVITEM Parent = NULL,BOOL draw = TRUE);
|
|
|
|
// Item Removal Functions
|
|
|
|
void DeleteItem(HNTVITEM item,BOOL redraw = TRUE);
|
|
void DeleteAllItem(BOOL redraw = TRUE);
|
|
void DeleteChildren(HNTVITEM it,BOOL redraw = TRUE);
|
|
void DeleteBranch(HNTVITEM it,BOOL redraw = TRUE);
|
|
void RemoveChild(HNTVITEM hParent,HNTVITEM hChild);
|
|
void DeleteSelectedItems(BOOL draw = TRUE);
|
|
void DeleteFind(XArray<CK_ID>& ids);
|
|
void DeleteCheck();
|
|
|
|
// Hierarchy Management
|
|
|
|
void SetItemParent(HNTVITEM hChild ,HNTVITEM hParent);
|
|
|
|
void Expand(HNTVITEM item,DWORD flags);
|
|
void ExpandAll(HNTVITEM item,DWORD flags);
|
|
|
|
// Item content management
|
|
|
|
BOOL SetItemData( HNTVITEM hItem, LPVOID dwData);
|
|
LPVOID GetItemData( HNTVITEM hItem);
|
|
|
|
BOOL SetItemFont( HNTVITEM hItem, int font);
|
|
int GetItemFont( HNTVITEM hItem);
|
|
|
|
BOOL SetItemFlags( HNTVITEM hItem, DWORD Flags);
|
|
DWORD GetItemFlags( HNTVITEM hItem);
|
|
|
|
BOOL SetItemIcon( HNTVITEM hItem, int Icon);
|
|
int GetItemIcon( HNTVITEM hItem);
|
|
|
|
BOOL SetItemProperties( HNTVITEM hItem,DWORD mask,NTVITEM *it);
|
|
|
|
void SetItemHeight(int height);
|
|
int GetItemHeight();
|
|
|
|
void SetItemHeight(HNTVITEM item,int height);
|
|
int GetItemHeight(HNTVITEM item);
|
|
|
|
void SetItemVisibility(HNTVITEM it,BOOL vis);
|
|
BOOL GetItemVisibility(HNTVITEM it);
|
|
|
|
void SetItemDragable(HNTVITEM it,BOOL drag);
|
|
BOOL GetItemDragability(HNTVITEM it);
|
|
|
|
void SetItemDepth(HNTVITEM item,int depth);
|
|
int GetItemDepth(HNTVITEM item);
|
|
|
|
void SetItemSortable(HNTVITEM it,BOOL sort);
|
|
BOOL GetItemSortability(HNTVITEM it);
|
|
|
|
|
|
// Selection Management
|
|
|
|
void Select(HNTVITEM item,DWORD flags,BOOL notify = TRUE);
|
|
void SelectRange(HNTVITEM itemStart,HNTVITEM itemEnd,DWORD flags);
|
|
|
|
BOOL IsItemSelected(HNTVITEM item);
|
|
|
|
HNTVITEM GetLastSelected();
|
|
HNTVITEM GetPrevSelected();
|
|
|
|
int GetSelectedItemsCount();
|
|
HNTVITEM GetSelectedItem(int i);
|
|
|
|
XArray<HNTVITEM> *GetSelectedItems();
|
|
|
|
void ClearSelection(BOOL redraw,BOOL sync = TRUE);
|
|
|
|
void SelectItemByID(CK_ID id,HNTVITEM start);
|
|
void SelectVisibleItemByID(CK_ID id,HNTVITEM partof);
|
|
|
|
BOOL IsSelectionLocked();
|
|
void LockSelection(BOOL bLock);
|
|
|
|
|
|
// Label Edition
|
|
|
|
CEdit *GetEdit();
|
|
|
|
CEdit* EditItemText(HNTVITEM it);
|
|
HNTVITEM GetEditedEntity();
|
|
|
|
CEdit* EditSubItemText(HNTVITEM it,int sub);
|
|
int GetEditedSubItemIndex();
|
|
|
|
// Sub Item Functions
|
|
|
|
void AddSubItem(HNTVITEM item,int subItem, VITVSUBITEM *ntvsi); //note 1st subitem index is 0, but its column index is 1
|
|
void SetSubItem(HNTVITEM item,int subItem, VITVSUBITEM *ntvsi); //note 1st subitem index is 0, but its column index is 1
|
|
|
|
void SetSubItemFlags(HNTVITEM item,int subItem, DWORD flags);
|
|
DWORD GetSubItemFlags(HNTVITEM item,int subItem);
|
|
|
|
void SetSubItemText(HNTVITEM item,int subItem, char *text);
|
|
char *GetSubItemText(HNTVITEM item,int subItem);
|
|
|
|
|
|
VITVSUBITEM *GetSubItem(HNTVITEM item,int subItem);
|
|
void RemoveSubItem(HNTVITEM item,int subItem);
|
|
|
|
int GetSubItemCount(HNTVITEM item);
|
|
void GetItemRect(HNTVITEM item, int col,RECT *r, BOOL textOnly);
|
|
|
|
void GetItemEditRect(HNTVITEM item, int col,RECT *r);
|
|
|
|
// Column Functions
|
|
|
|
void SetColumnCount(int count); //note columns indexes from 1 to n are connected to subitem index from 0 to n-1
|
|
int GetColumnCount(); //note columns indexes from 1 to n are connected to subitem index from 0 to n-1
|
|
|
|
void SetColumnOrder(int *order);
|
|
void SetColumn(int pos,CString str,int image,int width,MHeaderDrawCallback iCustomDrawCallback=0);
|
|
|
|
void SetColumnWidth(int pos, int w);
|
|
void GetColumnInfo(int index,int *start, int *width);
|
|
|
|
void SetColumnText(int pos,CString str);
|
|
|
|
void SetColumnSortFct(int col, MULTITREESORTF sortf);
|
|
void SetCurrentSortFct(MULTITREESORTF sortf);
|
|
|
|
void SetHeaderColors(
|
|
COLORREF backColor,
|
|
COLORREF textColor,
|
|
COLORREF textBackColor,
|
|
COLORREF textSelectedColor,
|
|
COLORREF textBackSelectedColor,
|
|
COLORREF borderColor=0
|
|
);
|
|
|
|
|
|
// Sorting
|
|
|
|
void Sort(HNTVITEM parent = NULL,BOOL recurse = FALSE);
|
|
void SetCurrentSort(int col);
|
|
|
|
// ID Searching Function
|
|
|
|
HNTVITEM ChildIdFind(CK_ID id, HNTVITEM startat = NULL);
|
|
HNTVITEM IdFind(CK_ID id, HNTVITEM startat,BOOL goBack = FALSE,HNTVITEM blocker = NULL);
|
|
|
|
// DnD Management
|
|
|
|
CImageList *CreateDragImage(HNTVITEM item); // It up to you to destroy img list after use
|
|
|
|
// Misc
|
|
|
|
void Check(HNTVITEM start = NULL); // Check for every item if the corresopnding CKObject still exists, if not, deletes the item
|
|
|
|
CMHeaderCtrl* GetHeaderCtrl() {return m_Header;}
|
|
|
|
// Show/Hide Layer
|
|
|
|
void ToggleShowHideLayer();
|
|
BOOL HideLayerOn();
|
|
|
|
// Active Part
|
|
|
|
void SetActivePart(HNTVITEM it);
|
|
HNTVITEM GetActivePart();
|
|
|
|
|
|
// Item Drawing
|
|
|
|
void SetRedraw(BOOL redraw = TRUE);
|
|
|
|
BOOL DrawItem(HNTVITEM item,CDC *cdc = NULL,BOOL draw = TRUE);
|
|
void RedrawItems(HNTVITEM first = NULL,HNTVITEM last = NULL,BOOL draw = TRUE);
|
|
|
|
void UpdateVisibleList(HNTVITEM start = NULL);
|
|
void RemoveEntity(HNTVITEM start,CK_ID id);
|
|
|
|
void EnsureVisible(HNTVITEM it,BOOL noredraw=FALSE,BOOL iUpdateScrollPos=TRUE);
|
|
HNTVITEM Parser(HNTVITEM root,HNTVITEM it);
|
|
HNTVITEM InvParser(HNTVITEM root,HNTVITEM it);
|
|
|
|
//drag rect
|
|
void StartDragRect();
|
|
void StopDragRect();
|
|
void EnableDragRect(BOOL iEnable);
|
|
|
|
// Operations
|
|
public:
|
|
CKContext* m_Context;
|
|
// Overrides
|
|
// ClassWizard generated virtual function overrides
|
|
//{{AFX_VIRTUAL(CMultiTreeCtrl)
|
|
public:
|
|
virtual BOOL PreTranslateMessage(MSG *pMsg); //for tooltip
|
|
protected:
|
|
virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult);
|
|
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
|
|
//}}AFX_VIRTUAL
|
|
|
|
// Generated message map functions
|
|
protected:
|
|
//{{AFX_MSG(CMultiTreeCtrl)
|
|
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
|
|
afx_msg void OnDestroy();
|
|
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
|
|
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
|
|
afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
|
|
afx_msg void OnPaint();
|
|
afx_msg void OnSize(UINT nType, int cx, int cy);
|
|
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
|
|
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
|
|
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
|
|
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
|
|
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
|
|
afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
|
|
afx_msg void OnRButtonDblClk(UINT nFlags, CPoint point);
|
|
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
|
|
afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
|
|
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
|
|
afx_msg void OnMButtonUp(UINT nFlags, CPoint point);
|
|
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
|
|
//}}AFX_MSG
|
|
|
|
// Members Datas
|
|
|
|
int m_NbColumns;
|
|
|
|
CBrush m_BackBrush;
|
|
CBrush m_BackSelBrush;
|
|
CBrush m_BackActiveBrush;
|
|
|
|
CMHeaderCtrl* m_Header;
|
|
int m_HeaderSize;
|
|
DWORD m_Style;
|
|
|
|
CImageList *m_SIL;
|
|
CImageList *m_IL;
|
|
CImageList *m_SubIL;
|
|
|
|
BOOL m_HideLayerOn;
|
|
BOOL m_bDrag;
|
|
CPoint m_LastPickedPoint;
|
|
|
|
BOOL m_lDown;
|
|
BOOL m_mDown;
|
|
BOOL m_rDown;
|
|
|
|
// Tree data :
|
|
|
|
NTVITEM m_hRoot;
|
|
int m_ItemCount;
|
|
int m_Indent;
|
|
int m_StartIndent;
|
|
int m_ItemHeight;
|
|
int m_IconSize;
|
|
int m_ButtonSize;
|
|
int m_IconSpace;
|
|
|
|
XArray<HNTVITEM> m_VisibleItems;
|
|
XArray<HNTVITEM> m_SelectedItems;
|
|
|
|
HNTVITEM m_LastPicked;
|
|
|
|
int m_HScrollPos;
|
|
int m_VScrollPos;
|
|
|
|
int m_TreeHeight;
|
|
BOOL m_bNeedUpdate;
|
|
BOOL m_Redraw;
|
|
|
|
HNTVITEM m_ActivePart;
|
|
int m_WheelSize;
|
|
|
|
VxMutex m_Mutex;
|
|
|
|
|
|
MULTITREESORTF m_SortFct;
|
|
MULTITREESORTF *m_SortFctArray;
|
|
|
|
CMTEdit *m_Edit;
|
|
|
|
HNTVITEM m_EditedItem;
|
|
int m_EditedSub;
|
|
|
|
// Colors :
|
|
|
|
DWORD m_backColor;
|
|
DWORD m_textColor;
|
|
DWORD m_textBackColor;
|
|
DWORD m_textSelectedColor;
|
|
DWORD m_textBackSelectedColor;
|
|
DWORD m_textActivePartBackColor;
|
|
DWORD m_backDynColor;
|
|
DWORD m_textDynColor;
|
|
DWORD m_borderColor;
|
|
|
|
int m_PreallocSize;
|
|
CFont* m_Font;
|
|
BOOL m_Locked;
|
|
BOOL m_bDelItemImageList;
|
|
int m_DragRect;//0=>not enabled, 1=>enabled 2=>currently detecting drag, 3=>rect is currently used, ie button down & mouse move
|
|
POINT m_DragRectLastPoint;
|
|
|
|
float m_ScrollFactor;
|
|
|
|
// Tree Functions :
|
|
|
|
void UpdateHScroll();
|
|
void UpdateVScroll();
|
|
|
|
|
|
|
|
/*****************************************/
|
|
// Members Function
|
|
|
|
void InitSubItem1(HNTVITEM item);
|
|
void InitSubItem2(HNTVITEM item);
|
|
|
|
HRESULT ProcessHeaderNotification(LPNMHDR nm);
|
|
|
|
HNTVITEM LocalGetNextVisibleItem(HNTVITEM item);
|
|
HNTVITEM LocalGetPreviousVisibleItem(HNTVITEM item);
|
|
|
|
int XToColumn(int x);
|
|
int GetColumnOptimalSize(int c);
|
|
void CalcColumnRect(int c,RECT *r);
|
|
|
|
void OnVKUp(BOOL shift, BOOL ctrl);
|
|
void OnVKDown(BOOL shift, BOOL ctrl);
|
|
void OnVKRight(BOOL shift, BOOL ctrl);
|
|
void OnVKLeft(BOOL shift, BOOL ctrl);
|
|
|
|
void OnVKPgUp(BOOL shift, BOOL ctrl);
|
|
void OnVKPgDown(BOOL shift, BOOL ctrl);
|
|
|
|
void OnVKHome(BOOL shift, BOOL ctrl);
|
|
void OnVKEnd(BOOL shift, BOOL ctrl);
|
|
|
|
void ScrollUp();
|
|
void ScrollDown();
|
|
|
|
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
};
|
|
|
|
#ifndef CUIK
|
|
} //namespace CKControl
|
|
#endif
|
|
|
|
#endif |