#include "tvn_debug.h" #include "stringutils.h" std::string notifyname(DWORD dw) { switch(dw) { case TVN_SELCHANGINGA: return "TVN_SELCHANGINGA"; case TVN_SELCHANGINGW: return "TVN_SELCHANGINGW"; case TVN_SELCHANGEDA: return "TVN_SELCHANGEDA"; case TVN_SELCHANGEDW: return "TVN_SELCHANGEDW"; case TVN_GETDISPINFOA: return "TVN_GETDISPINFOA"; case TVN_GETDISPINFOW: return "TVN_GETDISPINFOW"; case TVN_SETDISPINFOA: return "TVN_SETDISPINFOA"; case TVN_SETDISPINFOW: return "TVN_SETDISPINFOW"; case TVN_ITEMEXPANDINGA: return "TVN_ITEMEXPANDINGA"; case TVN_ITEMEXPANDINGW: return "TVN_ITEMEXPANDINGW"; case TVN_ITEMEXPANDEDA: return "TVN_ITEMEXPANDEDA"; case TVN_ITEMEXPANDEDW: return "TVN_ITEMEXPANDEDW"; case TVN_BEGINDRAGA: return "TVN_BEGINDRAGA"; case TVN_BEGINDRAGW: return "TVN_BEGINDRAGW"; case TVN_BEGINRDRAGA: return "TVN_BEGINRDRAGA"; case TVN_BEGINRDRAGW: return "TVN_BEGINRDRAGW"; case TVN_DELETEITEMA: return "TVN_DELETEITEMA"; case TVN_DELETEITEMW: return "TVN_DELETEITEMW"; case TVN_BEGINLABELEDITA: return "TVN_BEGINLABELEDITA"; case TVN_BEGINLABELEDITW: return "TVN_BEGINLABELEDITW"; case TVN_ENDLABELEDITA: return "TVN_ENDLABELEDITA"; case TVN_ENDLABELEDITW: return "TVN_ENDLABELEDITW"; case TVN_KEYDOWN: return "TVN_KEYDOWN"; case TVN_GETINFOTIPA: return "TVN_GETINFOTIPA"; case TVN_GETINFOTIPW: return "TVN_GETINFOTIPW"; case TVN_SINGLEEXPAND: return "TVN_SINGLEEXPAND"; case NM_OUTOFMEMORY: return "NM_OUTOFMEMORY"; case NM_CLICK: return "NM_CLICK"; case NM_DBLCLK: return "NM_DBLCLK"; case NM_RETURN: return "NM_RETURN"; case NM_RCLICK: return "NM_RCLICK"; case NM_RDBLCLK: return "NM_RDBLCLK"; case NM_SETFOCUS: return "NM_SETFOCUS"; case NM_KILLFOCUS: return "NM_KILLFOCUS"; case NM_CUSTOMDRAW: return "NM_CUSTOMDRAW"; case NM_HOVER: return "NM_HOVER"; case NM_NCHITTEST: return "NM_NCHITTEST"; case NM_KEYDOWN: return "NM_KEYDOWN"; case NM_RELEASEDCAPTURE: return "NM_RELEASEDCAPTURE"; case NM_SETCURSOR: return "NM_SETCURSOR"; case NM_CHAR: return "NM_CHAR"; case NM_TOOLTIPSCREATED: return "NM_TOOLTIPSCREATED"; case NM_LDOWN: return "NM_LDOWN"; case NM_RDOWN: return "NM_RDOWN"; case NM_THEMECHANGED: return "NM_THEMECHANGED"; default: return stringformat("notify(-%d)", -(int)dw); } } std::string TvStateString(DWORD state, DWORD mask) { StringList l; if (state&mask&TVIS_SELECTED ) l.push_back("SELECTED"); if (state&mask&TVIS_CUT ) l.push_back("CUT"); if (state&mask&TVIS_DROPHILITED ) l.push_back("DROPHILITED"); if (state&mask&TVIS_BOLD ) l.push_back("BOLD"); if (state&mask&TVIS_EXPANDED ) l.push_back("EXPANDED"); if (state&mask&TVIS_EXPANDEDONCE ) l.push_back("EXPANDEDONCE"); if (state&mask&TVIS_EXPANDPARTIAL) l.push_back("EXPANDPARTIAL"); if (mask&TVIS_OVERLAYMASK ) { if ((mask&TVIS_OVERLAYMASK)==TVIS_OVERLAYMASK) l.push_back(stringformat("overlay:%d", (state&TVIS_OVERLAYMASK)>>8)); else l.push_back(stringformat("incomplete-overlay-mask:%04x:%04x", mask&TVIS_OVERLAYMASK, state&TVIS_OVERLAYMASK)); } if (mask&TVIS_STATEIMAGEMASK) { if ((mask&TVIS_STATEIMAGEMASK)==TVIS_STATEIMAGEMASK) l.push_back(stringformat("simg:%d", (state&TVIS_STATEIMAGEMASK)>>12)); else l.push_back(stringformat("incomplete-stateimage-mask:%04x:%04x", mask&TVIS_STATEIMAGEMASK, state&TVIS_STATEIMAGEMASK)); } DWORD dwAll=TVIS_SELECTED|TVIS_CUT|TVIS_DROPHILITED|TVIS_BOLD|TVIS_EXPANDED|TVIS_EXPANDEDONCE|TVIS_EXPANDPARTIAL|TVIS_OVERLAYMASK|TVIS_STATEIMAGEMASK|TVIS_USERMASK; if (mask&~dwAll) l.push_back(stringformat("unknownmask=%08lx", mask&~dwAll)); return JoinStringList(l, ","); } std::string TvItemString(TVITEM& tv) { StringList l; if (tv.mask&TVIF_TEXT ) l.push_back(stringformat("%d:'%s'", tv.cchTextMax, tv.pszText)); if (tv.mask&TVIF_IMAGE ) l.push_back(stringformat("img%d", tv.iImage)); if (tv.mask&TVIF_PARAM ) l.push_back(stringformat("l%08lx", tv.lParam)); if (tv.mask&TVIF_STATE ) l.push_back(TvStateString(tv.state, tv.stateMask)); if (tv.mask&TVIF_HANDLE ) l.push_back(stringformat("h%08lx", tv.hItem)); if (tv.mask&TVIF_SELECTEDIMAGE) l.push_back(stringformat("sel%d", tv.iSelectedImage)); if (tv.mask&TVIF_CHILDREN ) l.push_back(stringformat("c%d", tv.cChildren)); DWORD dwAll= TVIF_TEXT|TVIF_IMAGE|TVIF_PARAM|TVIF_STATE|TVIF_HANDLE|TVIF_SELECTEDIMAGE|TVIF_CHILDREN; if (tv.mask&~dwAll) l.push_back(stringformat("unknownmask=%08lx", tv.mask&~dwAll)); return JoinStringList(l, ","); } std::string TvActionString(DWORD action, DWORD code) { if (code==TVN_SELCHANGED || code==TVN_SELCHANGING) { switch(action) { case TVC_UNKNOWN : return "TVC_UNKNOWN"; case TVC_BYMOUSE : return "TVC_BYMOUSE"; case TVC_BYKEYBOARD: return "TVC_BYKEYBOARD"; default: return stringformat("selchange-action-%08lx", action); } } else if (code==TVN_ITEMEXPANDING || code==TVN_ITEMEXPANDED) { switch(action) { case TVE_COLLAPSE : return "TVE_COLLAPSE"; case TVE_EXPAND : return "TVE_EXPAND"; case TVE_TOGGLE : return "TVE_TOGGLE"; case TVE_EXPANDPARTIAL: return "TVE_EXPANDPARTIAL"; case TVE_COLLAPSERESET: return "TVE_COLLAPSERESET"; default: return stringformat("expand-action-%08lx", action); } } else return stringformat("unknown-action-%08lx", action); }