#include #include #include #include #include #include #include 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; }