Files
Work/imagelst/FTREE.CPP
2024-08-07 09:16:27 -04:00

123 lines
3.3 KiB
C++

#include <imagelst/ftree.hpp>
#include <imagelst/tvmsghdr.hpp>
#include <imagelst/tvdisp.hpp>
#include <imagelst/tvkey.hpp>
#include <common/window.hpp>
#include <common/dwindow.hpp>
#include <common/rect.hpp>
FolderTree::FolderTree(GUIWindow &parentWindow,const Rect &winRect,int controlID,RGBColor bkColor)
: TreeView(parentWindow,winRect,controlID,TreeView::TreeHasLines|TreeView::TreeHasButtons|TreeView::TreeLinesAtRoot|TreeView::TreeShowSelAlways),
ImageList(parentWindow.processInstance(),"LIST",16,RGBColor(0,0,255))
{
setBkColor(bkColor);
setImageList(*this);
initHandlers();
}
FolderTree::~FolderTree()
{
}
void FolderTree::insertHandler(HandlerType handlerType,PureCallback *lpCallback)
{
mEventHandlers[(int)handlerType]=CallbackPointer(lpCallback);
}
void FolderTree::removeHandler(HandlerType handlerType)
{
mEventHandlers[(int)handlerType]=CallbackPointer();
}
void FolderTree::callHandler(HandlerType handlerType,CallbackData &someCallbackData)
{
mEventHandlers[(int)handlerType].callback(someCallbackData);
}
void FolderTree::initHandlers(void)
{
for(int handlerIndex=0;handlerIndex<=KeyDownHandler;handlerIndex++)
mEventHandlers.insert(&CallbackPointer());
}
// virual overloads
WORD FolderTree::tvnSelChanging(const TreeViewMessageHeader &treeViewMessageHeader)
{
CallbackData callbackData(0,treeViewMessageHeader.itemOld().lParam());
callHandler(SelChangingHandler,callbackData);
return FALSE;
}
WORD FolderTree::tvnSelChanged(const TreeViewMessageHeader &treeViewMessageHeader)
{
CallbackData callbackData(0,treeViewMessageHeader.itemNew().lParam());
callHandler(SelChangedHandler,callbackData);
return FALSE;
}
WORD FolderTree::tvnItemExpanding(const TreeViewMessageHeader &treeViewMessageHeader)
{
CallbackData callbackData(0,(LPARAM)&treeViewMessageHeader);
callHandler(ItemExpandingHandler,callbackData);
return FALSE;
}
WORD FolderTree::tvnItemExpanded(const TreeViewMessageHeader &treeViewMessageHeader)
{
CallbackData callbackData(0,(LPARAM)&treeViewMessageHeader);
callHandler(ItemExpandedHandler,callbackData);
return FALSE;
}
WORD FolderTree::tvnGetDispInfo(TreeViewDisplayInfo &treeViewDisplayInfo)
{
TreeViewItem tvItem(treeViewDisplayInfo.item());
if(treeViewDisplayInfo.item().state()&TVIS_EXPANDED)
{tvItem.image(FolderOpen);tvItem.selectedImage(FolderOpen);}
else
{tvItem.image(FolderClosed);tvItem.selectedImage(FolderClosed);}
treeViewDisplayInfo.item(tvItem);
return TRUE;
}
WORD FolderTree::tvnSetDispInfo(TreeViewDisplayInfo &/*treeViewDisplayInfo*/)
{
return FALSE;
}
WORD FolderTree::tvnBeginDrag(const TreeViewMessageHeader &treeViewMessageHeader)
{
CallbackData callbackData(0,(LPARAM)&treeViewMessageHeader);
callHandler(BeginDragHandler,callbackData);
return FALSE;
}
WORD FolderTree::tvnBeginRDrag(const TreeViewMessageHeader &/*treeViewMessageHeader*/)
{
return FALSE;
}
WORD FolderTree::tvnDeleteItem(const TreeViewMessageHeader &/*treeViewMessageHeader*/)
{
return FALSE;
}
WORD FolderTree::tvnBeginLabelEdit(const TreeViewDisplayInfo &/*treeViewDisplayInfo*/)
{
return FALSE;
}
WORD FolderTree::tvnEndLabelEdit(const TreeViewDisplayInfo &/*treeViewDisplayInfo*/)
{
return FALSE;
}
WORD FolderTree::tvnKeyDown(const TreeViewKeyDown &treeViewKeyDown)
{
CallbackData callbackData(0,(LPARAM)&treeViewKeyDown);
callHandler(KeyDownHandler,callbackData);
return FALSE;
}