500 lines
14 KiB
Plaintext
500 lines
14 KiB
Plaintext
|
|
WORD addChildNode(const TreeViewItem &someTreeViewItem,const String &parentString);
|
|
WORD addSiblingNode(const TreeViewItem &someTreeViewItem,const String &parentString);
|
|
|
|
WORD TreeView::addChildNode(const TreeViewItem &someTreeViewItem,const String &parentString)
|
|
{
|
|
HTREEITEM hParent(0);
|
|
HTREEITEM hTreeItem;
|
|
HTREEITEM hPrevItem;
|
|
HTREEITEM hChildItem;
|
|
String bufferString;
|
|
TreeViewInsert viewInsert;
|
|
TreeViewItem viewItem;
|
|
|
|
bufferString.length(255);
|
|
hTreeItem=getChild(TVGN_ROOT);
|
|
while(hTreeItem)
|
|
{
|
|
hChildItem=getChild(hTreeItem);
|
|
if(hChildItem&&searchInsertChild(someTreeViewItem,viewInsert,parentString,hChildItem))
|
|
{
|
|
insertItem(viewInsert);
|
|
return TRUE;
|
|
}
|
|
else
|
|
{
|
|
viewItem.mask(TreeViewItem::MaskText);
|
|
viewItem.item(hTreeItem);
|
|
viewItem.text(bufferString);
|
|
getItem(viewItem);
|
|
if(parentString==viewItem.text())
|
|
{
|
|
hParent=hTreeItem;
|
|
viewItem=TreeViewItem();
|
|
viewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam);
|
|
viewItem.text(someTreeViewItem.text());
|
|
viewItem.image(someTreeViewItem.image());
|
|
viewItem.selectedImage(someTreeViewItem.selectedImage());
|
|
viewItem.lParam(someTreeViewItem.lParam());
|
|
viewInsert.parent(hParent);
|
|
viewInsert.insertAfter(hPrevItem);
|
|
viewInsert.viewItem(viewItem);
|
|
insertItem(viewInsert);
|
|
return TRUE;
|
|
}
|
|
}
|
|
hPrevItem=hTreeItem;
|
|
hTreeItem=getNextSibling(hTreeItem);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
WORD TreeView::addSiblingNode(const TreeViewItem &someTreeViewItem,const String &parentString)
|
|
{
|
|
HTREEITEM hParent(0);
|
|
HTREEITEM hTreeItem;
|
|
HTREEITEM hPrevItem;
|
|
HTREEITEM hChildItem;
|
|
String bufferString;
|
|
TreeViewInsert viewInsert;
|
|
TreeViewItem viewItem;
|
|
|
|
bufferString.length(255);
|
|
hTreeItem=getChild(TVGN_ROOT);
|
|
while(hTreeItem)
|
|
{
|
|
hChildItem=getChild(hTreeItem);
|
|
if(hChildItem&&searchInsertSibling(someTreeViewItem,viewInsert,parentString,hTreeItem,hChildItem))
|
|
{
|
|
insertItem(viewInsert);
|
|
return TRUE;
|
|
}
|
|
else
|
|
{
|
|
viewItem.mask(TreeViewItem::MaskText);
|
|
viewItem.item(hTreeItem);
|
|
viewItem.text(bufferString);
|
|
getItem(viewItem);
|
|
if(parentString==viewItem.text())
|
|
{
|
|
hParent=hTreeItem;
|
|
viewItem=TreeViewItem();
|
|
viewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam);
|
|
viewItem.text(someTreeViewItem.text());
|
|
viewItem.image(someTreeViewItem.image());
|
|
viewItem.selectedImage(someTreeViewItem.selectedImage());
|
|
viewItem.lParam(someTreeViewItem.lParam());
|
|
viewInsert.parent(hParent);
|
|
viewInsert.insertAfter(hPrevItem);
|
|
viewInsert.viewItem(viewItem);
|
|
insertItem(viewInsert);
|
|
return TRUE;
|
|
}
|
|
}
|
|
hPrevItem=hTreeItem;
|
|
hTreeItem=getNextSibling(hTreeItem);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WORD TreeView::searchInsertChild(TreeViewItem &viewItem,TreeViewInsert &viewInsert,const String &parentString,HTREEITEM hParent)
|
|
{
|
|
WORD searchResult(FALSE);
|
|
HTREEITEM hPrevItem(FALSE);
|
|
HTREEITEM hTreeItem(hParent);
|
|
HTREEITEM hChildItem;
|
|
TreeViewItem searchItem;
|
|
String bufferString;
|
|
|
|
bufferString.length(String::MaxString);
|
|
while(hTreeItem)
|
|
{
|
|
hChildItem=getChild(hTreeItem);
|
|
if(hChildItem&&searchInsertChild(viewItem,viewInsert,parentString,hChildItem))
|
|
{
|
|
searchResult=TRUE;
|
|
break;
|
|
}
|
|
searchItem.mask(TreeViewItem::MaskText);
|
|
searchItem.item(hTreeItem);
|
|
searchItem.text(bufferString);
|
|
getItem(searchItem);
|
|
if(searchItem.text()==parentString)
|
|
{
|
|
viewInsert.parent(hTreeItem);
|
|
viewInsert.insertAfter(hPrevItem);
|
|
viewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam);
|
|
viewInsert.viewItem(viewItem);
|
|
searchResult=TRUE;
|
|
break;
|
|
}
|
|
hPrevItem=hTreeItem;
|
|
hTreeItem=getNextSibling(hTreeItem);
|
|
}
|
|
return searchResult;
|
|
}
|
|
|
|
|
|
WORD TreeView::searchInsertSibling(TreeViewItem &viewItem,TreeViewInsert &viewInsert,const String &parentString,HTREEITEM hParent,HTREEITEM hChildItem)
|
|
{
|
|
WORD searchResult(FALSE);
|
|
HTREEITEM hPrevItem(FALSE);
|
|
HTREEITEM hTreeItem(hChildItem);
|
|
HTREEITEM hChildNode;
|
|
TreeViewItem searchItem;
|
|
String bufferString;
|
|
|
|
bufferString.length(String::MaxString);
|
|
while(hTreeItem)
|
|
{
|
|
hChildNode=getChild(hTreeItem);
|
|
if(hChildNode&&searchInsertSibling(viewItem,viewInsert,parentString,hTreeItem,hChildNode))
|
|
{
|
|
searchResult=TRUE;
|
|
break;
|
|
}
|
|
searchItem.mask(TreeViewItem::MaskText);
|
|
searchItem.item(hTreeItem);
|
|
searchItem.text(bufferString);
|
|
getItem(searchItem);
|
|
if(searchItem.text()==parentString)
|
|
{
|
|
viewInsert.parent(hParent);
|
|
viewInsert.insertAfter(hPrevItem);
|
|
viewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam);
|
|
viewInsert.viewItem(viewItem);
|
|
searchResult=TRUE;
|
|
break;
|
|
}
|
|
hPrevItem=hTreeItem;
|
|
hTreeItem=getNextSibling(hTreeItem);
|
|
}
|
|
return searchResult;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// mhTreeViewWnd=::CreateWindow("SysTreeView32","",WS_VISIBLE|WS_BORDER|WS_CHILD|viewFlags,
|
|
// winRect.left(),winRect.top(),winRect.right(),winRect.bottom(),
|
|
// parentWindow(),(HMENU)TreeViewID,TreeView::processInstance(),0);
|
|
// mhTreeViewWnd=::CreateWindowEx(WS_EX_CLIENTEDGE|WS_EX_LEFT|WS_EX_LTRREADING|WS_EX_RIGHTSCROLLBAR,
|
|
// "SysTreeView32","",WS_CHILD|WS_VISIBLE|TVS_HASBUTTONS|TVS_HASLINES|TVS_EDITLABELS,
|
|
// winRect.left(),winRect.top(),winRect.right(),winRect.bottom(),
|
|
// parentWindow(),(HMENU)TreeViewID,TreeView::processInstance(),0);
|
|
// ::UpdateWindow(mhTreeViewWnd);
|
|
|
|
|
|
WORD TreeView::addChildNode(const TreeViewItem &someTreeViewItem,const String &parentString)
|
|
{
|
|
HTREEITEM hParent(0);
|
|
HTREEITEM hTreeItem;
|
|
HTREEITEM hPrevItem;
|
|
String bufferString;
|
|
|
|
bufferString.length(255);
|
|
hTreeItem=getChild(TVGN_ROOT);
|
|
while(hTreeItem)
|
|
{
|
|
TreeViewItem viewItem;
|
|
|
|
viewItem.mask(TreeViewItem::MaskText);
|
|
viewItem.item(hTreeItem);
|
|
viewItem.text(bufferString);
|
|
getItem(viewItem);
|
|
|
|
|
|
|
|
if(parentString==viewItem.text())
|
|
{
|
|
hParent=hTreeItem;
|
|
while(hTreeItem){hPrevItem=hTreeItem;hTreeItem=getChild(hTreeItem);}
|
|
TreeViewInsert viewInsert;
|
|
viewItem=TreeViewItem();
|
|
viewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam);
|
|
viewItem.text(someTreeViewItem.text());
|
|
viewItem.image(someTreeViewItem.image());
|
|
viewItem.selectedImage(someTreeViewItem.selectedImage());
|
|
viewItem.lParam(someTreeViewItem.lParam());
|
|
viewInsert.parent(hParent);
|
|
viewInsert.insertAfter(hPrevItem);
|
|
viewInsert.viewItem(viewItem);
|
|
insertItem(viewInsert);
|
|
break;
|
|
}
|
|
hPrevItem=hTreeItem;
|
|
hTreeItem=getNextSibling(hTreeItem);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
WORD TreeView::searchInsert(const TreeItem &viewItem,TreeViewInsert &viewInsert,const String &parentString,HTREEITEM hParent)
|
|
{
|
|
WORD searchResult(FALSE);
|
|
HTREEITEM hPrevItem(FALSE);
|
|
HTREEITEM hTreeItem(hParent);
|
|
TreeViewItem searchItem;
|
|
String bufferString;
|
|
|
|
bufferString.length(String::MaxString);
|
|
while(hTreeItem)
|
|
{
|
|
searchItem.mask(TreeViewItem::MaskText);
|
|
searchItem.item(hTreeItem);
|
|
searchItem.text(bufferString);
|
|
getItem(searchItem);
|
|
if(searchItem.text()==parentString)
|
|
{
|
|
viewInsert.parent(hParent);
|
|
viewInsert.insertAfter(hPrevItem);
|
|
viewInsert.viewItem(viewItem);
|
|
searchResult=TRUE;
|
|
break;
|
|
}
|
|
hPrevItem=hTreeItem;
|
|
hTreeItem=getNextSibling(hTreeItem);
|
|
}
|
|
return searchResult;
|
|
}
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
WORD TreeView::addChildNode(DWORD indexImage,const String &textString,const String &parentString,DWORD userData)
|
|
{
|
|
treeViewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam);
|
|
treeViewItem.text(textString);
|
|
treeViewItem.image(indexImage);
|
|
treeViewItem.selectedImage(I_IMAGECALLBACK);
|
|
treeViewItem.lParam(userData);
|
|
treeViewInsert.parent(hParent);
|
|
treeViewInsert.insertAfter(hPrevItem);
|
|
treeViewInsert.viewItem(treeViewItem);
|
|
insertItem(treeViewInsert);
|
|
break;
|
|
}
|
|
hPrevItem=hTreeItem;
|
|
hTreeItem=getNextSibling(hTreeItem);
|
|
}
|
|
return TRUE;
|
|
}
|
|
#endif
|
|
|
|
#if 0
|
|
WORD TreeView::addChildNode(DWORD indexImage,const String &textString,const String &parentString,DWORD userData)
|
|
{
|
|
HTREEITEM hParent(0);
|
|
HTREEITEM hTreeItem;
|
|
HTREEITEM hPrevItem;
|
|
String bufferString;
|
|
|
|
bufferString.length(255);
|
|
hTreeItem=getChild(TVGN_ROOT);
|
|
while(hTreeItem)
|
|
{
|
|
TreeViewItem treeViewItem;
|
|
|
|
treeViewItem.mask(TVIF_TEXT);
|
|
treeViewItem.item(hTreeItem);
|
|
treeViewItem.text(bufferString);
|
|
getItem(treeViewItem);
|
|
if(parentString==treeViewItem.text())
|
|
{
|
|
hParent=hTreeItem;
|
|
while(hTreeItem)
|
|
{
|
|
hPrevItem=hTreeItem;
|
|
hTreeItem=getChild(hTreeItem);
|
|
}
|
|
TreeViewInsert treeViewInsert;
|
|
TreeViewItem treeViewItem;
|
|
treeViewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam);
|
|
treeViewItem.text(textString);
|
|
treeViewItem.image(indexImage);
|
|
treeViewItem.selectedImage(I_IMAGECALLBACK);
|
|
treeViewItem.lParam(userData);
|
|
treeViewInsert.parent(hParent);
|
|
treeViewInsert.insertAfter(hPrevItem);
|
|
treeViewInsert.viewItem(treeViewItem);
|
|
insertItem(treeViewInsert);
|
|
break;
|
|
}
|
|
hPrevItem=hTreeItem;
|
|
hTreeItem=getNextSibling(hTreeItem);
|
|
}
|
|
return TRUE;
|
|
}
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
HTREEITEM FindOrAddTreeViewItem(HWND hWndTV,HTREEITEM hParent,int iImage,int iSelectedImage,LPSTR szText,LPARAM lParam)
|
|
{
|
|
TV_ITEM tvItem; // Temporary item
|
|
HTREEITEM hItem; // Handle to item
|
|
HTREEITEM hPrevItem; // Handle to previous item
|
|
char szBuffer[256]; // Temporary buffer
|
|
|
|
// Get the first child of the passed in parent
|
|
hItem=TreeView_GetChild(hWndTV,hParent);
|
|
// Loop through all children, looking for an already existing child.
|
|
while(hItem)
|
|
{
|
|
tvItem.mask= TVIF_TEXT; // We want the text
|
|
tvItem.hItem= hItem; // Indicate the item to fetch
|
|
tvItem.pszText=szBuffer; // Indicate the buffer
|
|
tvItem.cchTextMax=sizeof(szBuffer); // Indicate buffer's size
|
|
::TreeView_GetItem(hWndTV,&tvItem); // Fetch, Rover!
|
|
|
|
if(!lstrcmpi(tvItem.pszText,szText))return hItem;
|
|
hPrevItem=hItem; // Remember the last item, since the next line
|
|
// of code will eventually put a NULL in the
|
|
// hItem variable, and we want to know the
|
|
// last item under the parent in case we need
|
|
// to add a new item.
|
|
|
|
// Get the next sibling item in the TreeView, if any.
|
|
hItem=::TreeView_GetNextSibling(hWndTV,hItem);
|
|
}
|
|
|
|
// If we made it here, then the item needs to be added onto the end of the list
|
|
return AddTreeViewItem ( hWndTV, // Handle of TreeView
|
|
hParent, // Parent item
|
|
hPrevItem, // Last child in list (from above loop)
|
|
iImage, // These are the parameters
|
|
iSelectedImage,// passed into this
|
|
szText, // function.
|
|
lParam //
|
|
);
|
|
}
|
|
#endif
|
|
#if 0
|
|
|
|
if (hWndTreeView)
|
|
{
|
|
TreeView_SetImageList ( hWndTreeView, hCoasterImageList, 0 );
|
|
ImageList_SetBkColor ( hCoasterImageList, GetSysColor ( COLOR_WINDOW ));
|
|
FillTreeView ( hWndTreeView );
|
|
}
|
|
}
|
|
#endif
|
|
|
|
// enum StateFlags{StateFocused=TVIS_FOCUSED,StateSelected=TVIS_SELECTED,
|
|
// StateCut=TVIS_CUT,StateDropHilited=TVIS_DROPHILITED,StateBold=TVIS_BOLD,
|
|
// StateExpanded=TVIS_EXPANDED,StateExpandedOnce=TVIS_EXPANDEDONCE};
|
|
|
|
|
|
|
|
#if 0
|
|
TreeViewInfo &treeViewInfo=((TreeViewInfo&)*((TreeViewInfo*)someCallbackData.lParam()));
|
|
TreeViewNotify &treeViewNotify=(*((TreeViewNotify*)someCallbackData.lParam()));
|
|
|
|
if(TreeViewID==((NotifyMessageHeader&)treeViewInfo).idFrom())
|
|
{
|
|
switch(((NotifyMessageHeader&)treeViewInfo).code())
|
|
{
|
|
case TVN_SELCHANGING :
|
|
return tvnSelChanging(treeViewNotify);
|
|
case TVN_SELCHANGED :
|
|
return tvnSelChanged(treeViewNotify);
|
|
case TVN_GETDISPINFO :
|
|
return tvnGetDispInfo(treeViewInfo);
|
|
case TVN_SETDISPINFO :
|
|
return tvnSetDispInfo(treeViewInfo);
|
|
case TVN_ITEMEXPANDING :
|
|
return tvnItemExpanding(treeViewInfo);
|
|
case TVN_BEGINDRAG :
|
|
return tvnBeginDrag(treeViewNotify);
|
|
case TVN_BEGINRDRAG :
|
|
return tvnBeginRDrag(treeViewNotify);
|
|
case TVN_DELETEITEM :
|
|
return tvnDeleteItem(treeViewInfo);
|
|
case TVN_BEGINLABELEDIT :
|
|
return tvnBeginLabelEdit(treeViewInfo);
|
|
case TVN_ENDLABELEDIT :
|
|
return tvnEndLabelEdit(treeViewInfo);
|
|
case TVN_KEYDOWN :
|
|
return tvnKeyDown(treeViewInfo);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
|
|
if(((TreeViewItem&)treeViewInfo).state()&TVIS_EXPANDED)
|
|
{
|
|
((TreeViewItem&)treeViewInfo).image(FolderOpen);
|
|
((TreeViewItem&)treeViewInfo).selectedImage(FolderOpen);
|
|
}
|
|
else
|
|
{
|
|
((TreeViewItem&)treeViewInfo).image(FolderClosed);
|
|
((TreeViewItem&)treeViewInfo).selectedImage(FolderClosed);
|
|
}
|
|
|
|
|
|
WNDPROC sOrigProc;
|
|
void subClass(HINSTANCE hProcessInstance);
|
|
__declspec(dllexport) LONG FAR PASCAL windowProcedure(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
|
|
// ********************************************************************************
|
|
|
|
void subClass(HINSTANCE hProcessInstance)
|
|
{
|
|
WNDCLASS wndClass;
|
|
::GetClassInfo(0,"SysTreeView32",&wndClass);
|
|
wndClass.lpszClassName="SysTreeView32Sk";
|
|
sOrigProc=wndClass.lpfnWndProc;
|
|
wndClass.lpfnWndProc=(WNDPROC)windowProcedure;
|
|
wndClass.hInstance=hProcessInstance;
|
|
::RegisterClass(&wndClass);
|
|
}
|
|
|
|
long FAR PASCAL windowProcedure(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
|
|
{
|
|
if(WM_RBUTTONUP==message)::MessageBeep(0);
|
|
return sOrigProc(hWnd,message,wParam,lParam);
|
|
}
|
|
|
|
|
|
|
|
WORD TreeView::appendNode(NodeType nodeType,DWORD itemIndex,const String &text,DWORD userData,WORD selected)
|
|
{
|
|
HTREEITEM hInsertItem;
|
|
TreeViewItem treeViewItem;
|
|
TreeViewInsert treeViewInsert;
|
|
// String workString;
|
|
|
|
// workString=text;
|
|
treeViewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam);
|
|
treeViewItem.text((LPSTR)(String&)text);
|
|
treeViewItem.maxText(text.length());
|
|
treeViewItem.image(itemIndex);
|
|
treeViewItem.selectedImage(I_IMAGECALLBACK);
|
|
treeViewItem.lParam(userData);
|
|
if(NodeChild==nodeType)treeViewInsert.parent(mLastInsert.insertAfter());
|
|
else treeViewInsert.parent(mLastInsert.parent());
|
|
treeViewInsert.insertAfter(mLastInsert.insertAfter());
|
|
treeViewInsert.viewItem(treeViewItem);
|
|
hInsertItem=insertItem(treeViewInsert);
|
|
if(!hInsertItem)return FALSE;
|
|
if(selected)selectItem(hInsertItem);
|
|
return (hInsertItem?TRUE:FALSE);
|
|
}
|