void UpdateFavoritesTree(WindowInfo* win) { HWND hwndTree = win->hwndFavTree; if (TreeView_GetCount(hwndTree) > 0) { // PopulateFavTreeIfNeeded will re-enable WM_SETREDRAW SendMessage(hwndTree, WM_SETREDRAW, FALSE, 0); TreeView_DeleteAllItems(hwndTree); PopulateFavTreeIfNeeded(win); } // hide the favorites tree if we've removed the last favorite if (0 == TreeView_GetCount(hwndTree)) { SetSidebarVisibility(win, win->tocVisible, false); } }
void GetAllTreeItems(HWND hTreeView, HTREEITEM hItem, ATL::CSimpleArray<HTREEITEM>& arrItems, int& nIndex) { int nSize = TreeView_GetCount(hTreeView); arrItems.RemoveAll(); GetAllChildItems(hTreeView, TVI_ROOT, hItem, arrItems, nIndex); }
void ExtractAll() { TVITEM t; int i, nl; char *s; HTREEITEM hn, hm; FILE *log; //log = fopen("exalltest.txt", "w"); if(!file) return; nl = TreeView_GetCount(htree); t.mask = TVIF_PARAM; t.hItem = TreeView_GetChild(htree, TVI_ROOT); // First item for(i = 0; i < nl; i++) { TreeView_GetItem(htree, &t); s = GetItemPath(t.hItem); if(!s) {MessageBox(hwnd, "GetItemPath pathbuf overflow!", title, 16); break;} if(t.lParam != -1) { EnsureDirectoriesArePresent(s); ExtractFile(t.lParam, s); //fprintf(log, "FILE "); }//else fprintf(log, " DIR "); //fprintf(log, "%i: %s\n", i, s); hn = TreeView_GetChild(htree, t.hItem); if(!hn) hn = TreeView_GetNextSibling(htree, t.hItem); if(!hn) { hn = t.hItem; gns: hn = TreeView_GetParent(htree, hn); if(!hn) break; hm = TreeView_GetNextSibling(htree, hn); if(!hm) goto gns; hn = hm; } t.hItem = hn; } //fclose(log); }
int findItemInTree(HWND hwnd2Tree, MCONTACT hContact, char *module) { TVITEM item; char text[265]; HTREEITEM lastItem; if (!TreeView_GetCount(hwnd2Tree)) return 0; item.mask = TVIF_STATE | TVIF_PARAM | TVIF_TEXT; item.hItem = TVI_ROOT; item.pszText = text; item.cchTextMax = 264; do { do { lastItem = item.hItem; if (lastItem != TVI_ROOT) { /* these next 2 lines are not from code guru..... */ if (TreeView_GetItem(hwnd2Tree, &item) && item.lParam) { if ((hContact == ((ModuleTreeInfoStruct *)item.lParam)->hContact) && (!module[0] || !mir_strcmp(module, text))) { //TreeView_SelectItem(hwnd2Tree,item.hItem); return (int)item.hItem; } } /* back to coduguru's code*/ } } while ((item.hItem = TreeView_GetChild(hwnd2Tree, lastItem))); while ((!(item.hItem = TreeView_GetNextSibling(hwnd2Tree, lastItem))) && (lastItem = item.hItem = TreeView_GetParent(hwnd2Tree, lastItem))); } while (item.hItem); return -1; }
void freeTree(HWND hwnd2Tree, MCONTACT hContact) { TVITEM item; HTREEITEM lastItem; if (!TreeView_GetCount(hwnd2Tree)) return; item.mask = TVIF_STATE | TVIF_PARAM; item.hItem = TVI_ROOT; do { do { lastItem = item.hItem; if (lastItem != TVI_ROOT) { TreeView_GetItem(hwnd2Tree, &item); /* these next 2 lines are not from code guru..... */ if (item.lParam) { ModuleTreeInfoStruct *mtis = (ModuleTreeInfoStruct *)item.lParam; if (!hContact || (hContact == mtis->hContact)) { if (hContact != NULL) { TreeView_DeleteItem(hwnd2Tree, item.hItem); mir_free(mtis); } else mtis->type = STUB; } } /* back to coduguru's code*/ } } while (item.hItem = TreeView_GetChild(hwnd2Tree, lastItem)); while (!(item.hItem = TreeView_GetNextSibling(hwnd2Tree, lastItem)) && (lastItem = item.hItem = TreeView_GetParent(hwnd2Tree, lastItem))) {} } while (item.hItem); }
bool CMainWindow::_CanInstallNow() { // see if the tree control has been populated HWND hTreeCtrl = m_OETricks.GetTreeCtrl(); if (!hTreeCtrl) return false; // see how many leafs are there (we expect at least 5) UINT nLeafs = TreeView_GetCount(hTreeCtrl); if (nLeafs >= 5) return true; return false; }
BOOL findAndRemoveDuplicates(HWND hwnd2Tree, MCONTACT hContact, char *module) /* the following code to go through the whole tree is nicked from codeguru.. http://www.codeguru.com/Cpp/controls/treeview/treetraversal/comments.php/c683/?thread=7680 */ { TVITEM item; HTREEITEM lastItem, prelastItem; BOOL Result = 0; char text[265]; if (!TreeView_GetCount(hwnd2Tree)) return Result; item.mask = TVIF_STATE | TVIF_PARAM | TVIF_TEXT; item.hItem = TVI_ROOT; item.pszText = text; item.cchTextMax = 264; prelastItem = item.hItem; do { do { lastItem = item.hItem; if (lastItem != TVI_ROOT) { TreeView_GetItem(hwnd2Tree, &item); /* these next lines are not from code guru..... */ if (item.lParam) { ModuleTreeInfoStruct *mtis = (ModuleTreeInfoStruct *)item.lParam; if (hContact == mtis->hContact && !mir_strcmp(text,module)) { mir_free(mtis); TreeView_DeleteItem(hwnd2Tree, item.hItem); lastItem = prelastItem; Result = 1; } else prelastItem = lastItem; } /* back to coduguru's code*/ } } while (item.hItem = TreeView_GetChild(hwnd2Tree, lastItem)); while (!(item.hItem = TreeView_GetNextSibling(hwnd2Tree, lastItem)) && (lastItem = item.hItem = TreeView_GetParent(hwnd2Tree, lastItem))) {} } while ( item.hItem ); /*****************************************************************************/ return Result; }
/* Delete all items from the tree and creates the root node */ HTREEITEM JSONDialog::initTree(HWND hWndDlg) { int TreeCount=TreeView_GetCount(GetDlgItem(this->getHSelf(),IDC_TREE)); if(TreeCount>0) TreeView_DeleteAllItems(GetDlgItem(this->getHSelf(),IDC_TREE)); TV_INSERTSTRUCT tvinsert; tvinsert.hParent=NULL; tvinsert.hInsertAfter=TVI_ROOT; tvinsert.item.mask=TVIF_TEXT; tvinsert.item.pszText=L"JSON"; HTREEITEM item=(HTREEITEM)SendDlgItemMessage(hWndDlg,IDC_TREE,TVM_INSERTITEM,0,(LPARAM)&tvinsert); return item; }
void PopulateFavTreeIfNeeded(WindowInfo* win) { HWND hwndTree = win->hwndFavTree; if (TreeView_GetCount(hwndTree) > 0) { return; } Vec<const WCHAR*> filePathsSorted; GetSortedFilePaths(filePathsSorted); SendMessage(hwndTree, WM_SETREDRAW, FALSE, 0); for (size_t i = 0; i < filePathsSorted.Count(); i++) { DisplayState* f = gFavorites.GetFavByFilePath(filePathsSorted.At(i)); bool isExpanded = win->expandedFavorites.Contains(f); HTREEITEM node = InsertFavTopLevelNode(hwndTree, f, isExpanded); if (f->favorites->Count() > 1) { InsertFavSecondLevelNodes(hwndTree, node, f); } } SendMessage(hwndTree, WM_SETREDRAW, TRUE, 0); UINT fl = RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN; RedrawWindow(hwndTree, nullptr, nullptr, fl); }
static int SaveTree(HWND hToolBarTree) { bool RSide = false; int count = 10; DWORD loc_sepcout = 0; TCHAR strbuf[128]; TVITEM tvi; tvi.mask = TVIF_TEXT | TVIF_PARAM | TVIF_HANDLE; tvi.hItem = TreeView_GetRoot(hToolBarTree); tvi.pszText = strbuf; tvi.cchTextMax = sizeof(strbuf); { mir_cslock lck(ToolBarCS); while (tvi.hItem != NULL) { TreeView_GetItem(hToolBarTree, &tvi); if (_tcscmp(tvi.pszText, MIDDLE_SEPARATOR) == 0) { RSide = true; count = TreeView_GetCount(hToolBarTree) * 10 - count; tvi.hItem = TreeView_GetNextSibling(hToolBarTree, tvi.hItem); continue; } CustomButtonData *cbd = (CustomButtonData*)tvi.lParam; if (cbd) { if (cbd->opFlags) { cbd->bIMButton = (cbd->opFlags & BBSF_IMBUTTON) != 0; cbd->bChatButton = (cbd->opFlags & BBSF_CHATBUTTON) != 0; cbd->bCanBeHidden = (cbd->opFlags & BBSF_CANBEHIDDEN) != 0; } if (RSide && cbd->bLSided) { cbd->bLSided = false; cbd->bRSided = true; cbd->opFlags |= BBSF_NTBSWAPED; } else if (!RSide && cbd->bRSided) { cbd->bLSided = true; cbd->bRSided = false; cbd->opFlags |= BBSF_NTBSWAPED; } if (!TreeView_GetCheckState(hToolBarTree, tvi.hItem)) { cbd->bIMButton = false; cbd->bChatButton = false; if (cbd->bSeparator && !strcmp(cbd->pszModuleName, "Tabsrmm_sep")) cbd->opFlags = BBSF_NTBDESTRUCT; } else { if (!cbd->bIMButton && !cbd->bChatButton) cbd->bIMButton = true; if (cbd->bSeparator && !strcmp(cbd->pszModuleName, "Tabsrmm_sep")) { cbd->bHidden = 0; cbd->opFlags &= ~BBSF_NTBDESTRUCT; ++loc_sepcout; } } cbd->dwPosition = (DWORD)count; CB_WriteButtonSettings(NULL, cbd); if (!(cbd->opFlags & BBSF_NTBDESTRUCT)) (RSide) ? (count -= 10) : (count += 10); } HTREEITEM hItem = TreeView_GetNextSibling(hToolBarTree, tvi.hItem); if (cbd->opFlags & BBSF_NTBDESTRUCT) TreeView_DeleteItem(hToolBarTree, tvi.hItem); tvi.hItem = hItem; } qsort(LButtonsList.getArray(), LButtonsList.getCount(), sizeof(void*), sstSortButtons); qsort(RButtonsList.getArray(), RButtonsList.getCount(), sizeof(void*), sstSortButtons); } db_set_dw(0, "TabSRMM_Toolbar", "SeparatorsCount", loc_sepcout); dwSepCount = loc_sepcout; return 1; }
static INT_PTR CALLBACK GenMenuOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { struct OrderData *dat = (struct OrderData*)GetWindowLongPtr(GetDlgItem(hwndDlg,IDC_MENUITEMS),GWLP_USERDATA); LPNMHDR hdr; switch (msg) { case WM_INITDIALOG: TranslateDialogDefault(hwndDlg); dat=(struct OrderData*)mir_alloc(sizeof(struct OrderData)); SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_MENUITEMS),GWLP_USERDATA,(LONG_PTR)dat); dat->dragging = 0; dat->iInitMenuValue = DBGetContactSettingByte( NULL, "CList", "MoveProtoMenus", FALSE ); MyOldWindowProc = (WNDPROC)GetWindowLongPtr(GetDlgItem(hwndDlg,IDC_MENUITEMS),GWLP_WNDPROC); SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_MENUITEMS),GWLP_WNDPROC,(LONG_PTR)&LBTNDOWNProc); { HIMAGELIST himlCheckBoxes; himlCheckBoxes=ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), (IsWinVerXPPlus() ? ILC_COLOR32 : ILC_COLOR16) | ILC_MASK, 2, 2); ImageList_AddIcon_IconLibLoaded(himlCheckBoxes, SKINICON_OTHER_NOTICK); ImageList_AddIcon_IconLibLoaded(himlCheckBoxes, SKINICON_OTHER_TICK); TreeView_SetImageList(GetDlgItem(hwndDlg,IDC_MENUOBJECTS),himlCheckBoxes,TVSIL_NORMAL); TreeView_SetImageList(GetDlgItem(hwndDlg,IDC_MENUITEMS),himlCheckBoxes,TVSIL_NORMAL); } CheckDlgButton(hwndDlg, dat->iInitMenuValue ? IDC_RADIO2 : IDC_RADIO1, TRUE ); CheckDlgButton(hwndDlg, IDC_DISABLEMENUICONS, bIconsDisabled ); BuildMenuObjectsTree(hwndDlg); return TRUE; case WM_COMMAND: if ( HIWORD(wParam) == BN_CLICKED || HIWORD( wParam ) == BN_DBLCLK ) { switch ( LOWORD( wParam )) { case IDC_INSERTSEPARATOR: InsertSeparator(hwndDlg); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; case IDC_RESETMENU: ResetMenuItems( hwndDlg ); SendMessage( GetParent( hwndDlg ), PSM_CHANGED, 0, 0 ); break; case IDC_DISABLEMENUICONS: case IDC_RADIO1: case IDC_RADIO2: SendMessage( GetParent( hwndDlg ), PSM_CHANGED, 0, 0 ); break; case IDC_GENMENU_DEFAULT: { TVITEM tvi; HTREEITEM hti; MenuItemOptData *iod; hti=TreeView_GetSelection(GetDlgItem(hwndDlg,IDC_MENUITEMS)); if (hti==NULL) break; tvi.mask=TVIF_HANDLE|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM; tvi.hItem=hti; TreeView_GetItem(GetDlgItem(hwndDlg,IDC_MENUITEMS),&tvi); iod = ( MenuItemOptData * )tvi.lParam; if ( iod->name && _tcsstr( iod->name, STR_SEPARATOR )) break; if (iod->name) mir_free(iod->name); iod->name = mir_tstrdup( iod->defname ); SaveTree(hwndDlg); RebuildCurrent(hwndDlg); SendMessage( GetParent( hwndDlg ), PSM_CHANGED, 0, 0 ); } break; case IDC_GENMENU_SET: { TVITEM tvi; TCHAR buf[256]; MenuItemOptData *iod; HTREEITEM hti = TreeView_GetSelection( GetDlgItem( hwndDlg,IDC_MENUITEMS )); if ( hti == NULL ) break; tvi.mask = TVIF_HANDLE|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM; tvi.hItem = hti; SendDlgItemMessage(hwndDlg, IDC_MENUITEMS, TVM_GETITEM, 0, (LPARAM)&tvi); iod = ( MenuItemOptData * )tvi.lParam; if ( iod->name && _tcsstr(iod->name, STR_SEPARATOR )) break; ZeroMemory(buf,sizeof( buf )); GetDlgItemText( hwndDlg, IDC_GENMENU_CUSTOMNAME, buf, SIZEOF( buf )); if (iod->name) mir_free(iod->name); iod->name = mir_tstrdup(buf); SaveTree(hwndDlg); RebuildCurrent(hwndDlg); SendMessage( GetParent( hwndDlg ), PSM_CHANGED, 0, 0 ); } break; } } break; case WM_NOTIFY: hdr = (LPNMHDR)lParam; switch( hdr->idFrom ) { case 0: if (hdr->code == PSN_APPLY ) { bIconsDisabled = IsDlgButtonChecked(hwndDlg, IDC_DISABLEMENUICONS) != 0; DBWriteContactSettingByte(NULL, "CList", "DisableMenuIcons", bIconsDisabled); SaveTree(hwndDlg); int iNewMenuValue = IsDlgButtonChecked(hwndDlg, IDC_RADIO1) ? 0 : 1; if ( iNewMenuValue != dat->iInitMenuValue ) { RebuildProtoMenus( iNewMenuValue ); dat->iInitMenuValue = iNewMenuValue; } RebuildCurrent(hwndDlg); } break; case IDC_MENUOBJECTS: if (hdr->code == TVN_SELCHANGEDA ) RebuildCurrent( hwndDlg ); break; case IDC_MENUITEMS: switch (hdr->code) { case NM_CUSTOMDRAW: { int i= handleCustomDraw(GetDlgItem(hwndDlg,IDC_MENUITEMS),(LPNMTVCUSTOMDRAW) lParam); SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, i); return TRUE; } case TVN_BEGINDRAGA: SetCapture(hwndDlg); dat->dragging=1; dat->hDragItem=((LPNMTREEVIEW)lParam)->itemNew.hItem; TreeView_SelectItem(GetDlgItem(hwndDlg,IDC_MENUITEMS),dat->hDragItem); break; case NM_CLICK: { TVHITTESTINFO hti; hti.pt.x=(short)LOWORD(GetMessagePos()); hti.pt.y=(short)HIWORD(GetMessagePos()); ScreenToClient(hdr->hwndFrom,&hti.pt); if (TreeView_HitTest(hdr->hwndFrom,&hti)) { if (hti.flags&TVHT_ONITEMICON) { TVITEM tvi; tvi.mask=TVIF_HANDLE|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM; tvi.hItem=hti.hItem; TreeView_GetItem(hdr->hwndFrom,&tvi); tvi.iImage=tvi.iSelectedImage=!tvi.iImage; ((MenuItemOptData *)tvi.lParam)->show=tvi.iImage; TreeView_SetItem(hdr->hwndFrom,&tvi); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); //all changes take effect in runtime //ShowWindow(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREEWARNING),SW_SHOW); } /*--------MultiSelection----------*/ if (hti.flags&TVHT_ONITEMLABEL) { /// LabelClicked Set/unset selection TVITEM tvi; HWND tvw=hdr->hwndFrom; tvi.mask=TVIF_HANDLE|TVIF_PARAM; tvi.hItem=hti.hItem; TreeView_GetItem(tvw,&tvi); if (GetKeyState(VK_CONTROL)&0x8000) { if (((MenuItemOptData *)tvi.lParam)->isSelected) ((MenuItemOptData *)tvi.lParam)->isSelected=0; else ((MenuItemOptData *)tvi.lParam)->isSelected=1; //current selection order++. TreeView_SetItem(tvw,&tvi); } else if (GetKeyState(VK_SHIFT)&0x8000) { ; // shifted click } else { // reset all selection except current HTREEITEM hit; hit=TreeView_GetRoot(tvw); if (hit) do { TVITEM tvi={0}; tvi.mask=TVIF_HANDLE|TVIF_PARAM; tvi.hItem=hit; TreeView_GetItem(tvw,&tvi); if (hti.hItem!=hit) ((MenuItemOptData *)tvi.lParam)->isSelected=0; else ((MenuItemOptData *)tvi.lParam)->isSelected=1; TreeView_SetItem(tvw,&tvi); } while (hit=TreeView_GetNextSibling(tvw,hit)); } } } break; } case TVN_SELCHANGING: { LPNMTREEVIEW pn; pn = (LPNMTREEVIEW) lParam; //((MenuItemOptData *)(pn->itemNew.lParam))->isSelected=1; /*if (pn->action==NotKeyPressed) { remove all selection } */ } case TVN_SELCHANGEDA: { TVITEM tvi; HTREEITEM hti; MenuItemOptData *iod; SetDlgItemTextA(hwndDlg,IDC_GENMENU_CUSTOMNAME,""); SetDlgItemTextA(hwndDlg,IDC_GENMENU_SERVICE,""); EnableWindow(GetDlgItem(hwndDlg,IDC_GENMENU_CUSTOMNAME),FALSE); EnableWindow(GetDlgItem(hwndDlg,IDC_GENMENU_DEFAULT),FALSE); EnableWindow(GetDlgItem(hwndDlg,IDC_GENMENU_SET),FALSE); hti=TreeView_GetSelection(GetDlgItem(hwndDlg,IDC_MENUITEMS)); if (hti==NULL) break; tvi.mask=TVIF_HANDLE|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM; tvi.hItem=hti; TreeView_GetItem(GetDlgItem(hwndDlg,IDC_MENUITEMS),&tvi); if ( tvi.lParam == 0 ) break; iod = ( MenuItemOptData * )tvi.lParam; if ( iod->name && _tcsstr(iod->name, STR_SEPARATOR)) break; SetDlgItemText(hwndDlg,IDC_GENMENU_CUSTOMNAME,iod->name); if (iod->pimi->submenu.first == NULL && iod->uniqname) SetDlgItemTextA(hwndDlg, IDC_GENMENU_SERVICE, iod->uniqname); EnableWindow(GetDlgItem(hwndDlg,IDC_GENMENU_DEFAULT), lstrcmp(iod->name, iod->defname) != 0); EnableWindow(GetDlgItem(hwndDlg,IDC_GENMENU_SET),TRUE); EnableWindow(GetDlgItem(hwndDlg,IDC_GENMENU_CUSTOMNAME),TRUE); break; } break; } } break; case WM_MOUSEMOVE: if (!dat||!dat->dragging) break; { TVHITTESTINFO hti; hti.pt.x=(short)LOWORD(lParam); hti.pt.y=(short)HIWORD(lParam); ClientToScreen(hwndDlg,&hti.pt); ScreenToClient(GetDlgItem(hwndDlg,IDC_MENUITEMS),&hti.pt); TreeView_HitTest(GetDlgItem(hwndDlg,IDC_MENUITEMS),&hti); if (hti.flags&(TVHT_ONITEM|TVHT_ONITEMRIGHT)) { HTREEITEM it = hti.hItem; hti.pt.y -= TreeView_GetItemHeight(GetDlgItem(hwndDlg,IDC_MENUITEMS))/2; TreeView_HitTest(GetDlgItem(hwndDlg,IDC_MENUITEMS),&hti); if (!(hti.flags&TVHT_ABOVE)) TreeView_SetInsertMark(GetDlgItem(hwndDlg,IDC_MENUITEMS),hti.hItem,1); else TreeView_SetInsertMark(GetDlgItem(hwndDlg,IDC_MENUITEMS),it,0); } else { if (hti.flags&TVHT_ABOVE) SendDlgItemMessage(hwndDlg,IDC_MENUITEMS,WM_VSCROLL,MAKEWPARAM(SB_LINEUP,0),0); if (hti.flags&TVHT_BELOW) SendDlgItemMessage(hwndDlg,IDC_MENUITEMS,WM_VSCROLL,MAKEWPARAM(SB_LINEDOWN,0),0); TreeView_SetInsertMark(GetDlgItem(hwndDlg,IDC_MENUITEMS),NULL,0); } } break; case WM_LBUTTONUP: if (!dat->dragging) break; TreeView_SetInsertMark(GetDlgItem(hwndDlg,IDC_MENUITEMS),NULL,0); dat->dragging=0; ReleaseCapture(); { TVHITTESTINFO hti; hti.pt.x=(short)LOWORD(lParam); hti.pt.y=(short)HIWORD(lParam); ClientToScreen(hwndDlg,&hti.pt); ScreenToClient(GetDlgItem(hwndDlg,IDC_MENUITEMS),&hti.pt); hti.pt.y-=TreeView_GetItemHeight(GetDlgItem(hwndDlg,IDC_MENUITEMS))/2; TreeView_HitTest(GetDlgItem(hwndDlg,IDC_MENUITEMS),&hti); if (hti.flags&TVHT_ABOVE) hti.hItem=TVI_FIRST; if (dat->hDragItem==hti.hItem) break; dat->hDragItem=NULL; if (hti.flags&(TVHT_ONITEM|TVHT_ONITEMRIGHT)||(hti.hItem==TVI_FIRST)) { HWND tvw; HTREEITEM * pSIT; HTREEITEM FirstItem=NULL; UINT uITCnt,uSic ; tvw=GetDlgItem(hwndDlg,IDC_MENUITEMS); uITCnt=TreeView_GetCount(tvw); uSic=0; if (uITCnt) { pSIT=(HTREEITEM *)mir_alloc(sizeof(HTREEITEM)*uITCnt); if (pSIT) { HTREEITEM hit; hit=TreeView_GetRoot(tvw); if (hit) do { TVITEM tvi={0}; tvi.mask=TVIF_HANDLE|TVIF_PARAM; tvi.hItem=hit; TreeView_GetItem(tvw,&tvi); if (((MenuItemOptData *)tvi.lParam)->isSelected) { pSIT[uSic]=tvi.hItem; uSic++; } }while (hit=TreeView_GetNextSibling(tvw,hit)); // Proceed moving { UINT i; HTREEITEM insertAfter; insertAfter=hti.hItem; for (i=0; i<uSic; i++) { if (insertAfter) insertAfter=MoveItemAbove(tvw,pSIT[i],insertAfter); else break; if (!i) FirstItem=insertAfter; } } // free pointers... mir_free(pSIT); } } if (FirstItem) TreeView_SelectItem(tvw,FirstItem); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); SaveTree(hwndDlg); } } break; case WM_DESTROY: if ( dat ) mir_free( dat ); ImageList_Destroy(TreeView_SetImageList(GetDlgItem(hwndDlg,IDC_MENUOBJECTS),NULL,TVSIL_NORMAL)); FreeTreeData( hwndDlg ); break; } return FALSE; }
TreeView::size_type TreeView::count () const { return (TreeView_GetCount(handle())); }
int KUiShowWndTree::SelParent(HWND hParent, HWND hTree, KSHOWWNDNODE *pNode, char *pszParent) { int nResult = FALSE; KG_PROCESS_ERROR(hTree); KG_PROCESS_ERROR(pNode); int nMaxID = TreeView_GetCount(hTree) + 4; int nStartID = 10000; int nEndID = nStartID; HMENU hMenu = CreatePopupMenu(); KG_PROCESS_ERROR(hMenu); struct MENUNAME { char szName[128]; }; MENUNAME *pMenuItem = new MENUNAME[nMaxID]; KG_PROCESS_ERROR(pMenuItem); if (pNode == &m_Root) { int i; for (i = LAYER_BEGIN; i < LAYER_END; i++) { AppendMenu(hMenu, MF_ENABLED |MF_STRING, nEndID, g_GetFrameLayerLayoutString(i)); strcpy(pMenuItem[nEndID -nStartID].szName, g_GetFrameLayerName(i)); nEndID++; } } else { AppendMenu(hMenu, MF_ENABLED |MF_STRING, nEndID, m_Root.szName); strcpy(pMenuItem[nEndID -nStartID].szName, m_Root.szName); nEndID++; KSHOWWNDNODE *pNow = m_Root.pChildNode; KG_PROCESS_ERROR(pNow); BOOL bChildFinished = FALSE; do { if (bChildFinished) { if(pNow->pNextBrotherNode) { pNow = pNow->pNextBrotherNode; bChildFinished = FALSE; } else { pNow = pNow->pParentNode; bChildFinished = TRUE; } } else { if (pNow != pNode) { BOOL bNeedAdd = TRUE; KSHOWWNDNODE *pParent = pNow->pParentNode; while (pParent) { if(pParent == pNode) { bNeedAdd = FALSE; break; } pParent = pParent->pParentNode; } if (bNeedAdd) { AppendMenu(hMenu, MF_ENABLED |MF_STRING, nEndID, pNow->szName); strcpy(pMenuItem[nEndID - nStartID].szName, pNow->szName); nEndID++; } } if(pNow->pChildNode) { pNow = pNow->pChildNode; bChildFinished = FALSE; } else { if (pNow->pNextBrotherNode) { pNow = pNow->pNextBrotherNode; bChildFinished = FALSE; } else { pNow = pNow->pParentNode; bChildFinished = TRUE; } } } if (pNow == &m_Root) { break; } }while (TRUE); } POINT Pos; GetCursorPos(&Pos); int nSel = TrackPopupMenu(hMenu, TPM_RETURNCMD | TPM_LEFTBUTTON | TPM_NONOTIFY, Pos.x, Pos.y, 0, hParent, NULL); DestroyMenu(hMenu); hMenu = NULL; KG_PROCESS_ERROR(nSel >= nStartID && nSel < nEndID); strcpy(pszParent, pMenuItem[nSel - nStartID].szName); nResult = TRUE; Exit0: if (hMenu) { DestroyMenu(hMenu); } if (pMenuItem) { delete[] pMenuItem; pMenuItem = NULL; } return nResult; }
void SaveMenuTree(HWND hdlg) { int iBl=0,i=0,k=0; int iBtd=g_iButtonsCount; BOOL bDeleted=FALSE; char szMEntry[256]={'\0'}; TCHAR strbuf[256]; HTREEITEM hti=NULL; TVITEM tvi; g_iButtonsCount=TreeView_GetCount(hButtonsList); tvi.pszText = strbuf; tvi.cchTextMax = _countof(strbuf); tvi.mask=TVIF_HANDLE|TVIF_TEXT ; tvi.hItem=TreeView_GetRoot(hButtonsList); TreeView_GetItem(hButtonsList,&tvi); li_ZeroQuickList(QuickList); BalanceButtons(iBtd,g_iButtonsCount); while(ButtonsList[iBl]) { SortedList * sl=NULL; ListData* ld=ButtonsList[iBl]; if (!ld->sl) break; sl=ld->sl; if(ld->dwOPFlags&QMF_DELETNEEDED) { bDeleted=(ld->dwOPFlags&QMF_NEW)?FALSE:TRUE; if(bDeleted) CleanSettings(ld->dwPos,-1); DestroyButton(iBl); continue; } if(ld->ptszQValue!=ld->ptszOPQValue) { if(ld->ptszQValue) mir_free(ld->ptszQValue); ld->ptszQValue=(ld->ptszOPQValue)?ld->ptszOPQValue:NULL; } if(ld->ptszButtonName) mir_free(ld->ptszButtonName); if(iBl>0) if(hti=TreeView_GetNextSibling(hButtonsList,hti?hti:tvi.hItem)) { tvi.hItem=hti; TreeView_GetItem(hButtonsList,&tvi); } ld->ptszButtonName=mir_tstrdup(tvi.pszText); if(ld->ptszQValue) { mir_snprintf(szMEntry, _countof(szMEntry), "ButtonValue_%u", iBl); db_set_ts(NULL, PLGNAME,szMEntry,ld->ptszQValue); } if (ServiceExists(MS_BB_MODIFYBUTTON)&&((ld->dwOPFlags&QMF_NEW)||(ld->dwOPFlags&QMF_RENAMED)||bDeleted)) { BBButton bb={0}; bb.cbSize=sizeof(BBButton); bb.pszModuleName=PLGNAME; bb.dwButtonID=iBl; bb.ptszTooltip=ld->ptszButtonName; CallService(MS_BB_MODIFYBUTTON,0,(LPARAM)&bb); } mir_snprintf(szMEntry, _countof(szMEntry), "ButtonName_%u", iBl); db_set_ts(NULL, PLGNAME,szMEntry,ld->ptszButtonName); ld->dwOPFlags=0; ld->dwPos=iBl; ld->bIsServName=ld->bIsOpServName; mir_snprintf(szMEntry, _countof(szMEntry), "RCEntryIsServiceName_%u", iBl); db_set_b(NULL, PLGNAME,szMEntry,ld->bIsServName); bDeleted=FALSE; qsort(sl->items,sl->realCount,sizeof(ButtonData *),sstSortButtons); for ( i=0; i < sl->realCount; i++ ) { ButtonData * bd= (ButtonData *)sl->items[i]; if(bd->dwOPFlags&QMF_DELETNEEDED){ RemoveMenuEntryNode(sl, i--); continue; } bd->bIsServName=bd->bIsOpServName; bd->bInQMenu=bd->bOpInQMenu; bd->dwPos=bd->dwOPPos; bd->fEntryType=bd->fEntryOpType; bd->dwOPFlags=0; if(bd->pszName!=bd->pszOpName) { if(bd->pszName) mir_free(bd->pszName); bd->pszName=bd->pszOpName?bd->pszOpName:NULL; } if(bd->pszValue!=bd->pszOpValue) { if(bd->pszValue) mir_free(bd->pszValue); bd->pszValue=bd->pszOpValue?bd->pszOpValue:NULL; } if(bd->bInQMenu) { QuickData* qd = (QuickData *)mir_alloc(sizeof(QuickData)); qd->dwPos=k++; qd->fEntryType=bd->fEntryType; qd->bIsService=bd->bIsServName; qd->ptszValue=bd->pszValue; qd->ptszValueName=bd->pszName; List_InsertPtr(QuickList,qd); } SaveModuleSettings(iBl,bd); } CleanSettings(iBl,sl->realCount); iBl++; } db_set_b(NULL, PLGNAME,"ButtonsCount", (BYTE)g_iButtonsCount); }
INT_PTR CALLBACK OptionsProc(HWND hdlg,UINT msg,WPARAM wparam,LPARAM lparam) { switch(msg){ case WM_INITDIALOG:{ DWORD style; g_opHdlg=hdlg; bOptionsInit=TRUE; TranslateDialogDefault(hdlg); if(g_iButtonsCount!=db_get_b(NULL, PLGNAME,"ButtonsCount", 0)) { LOGFONT logFont; HFONT hFont; bNeedRestart=TRUE; EnableWindow(GetDlgItem(hdlg,IDC_BUTTONSLIST),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_BLISTADD),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_BLISTREMOVE),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_MENUTREE),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_MTREEADD),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_MTREEREMOVE),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_RCLICKVALUE),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_BUTTONNAME),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_INQMENU),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_MENUNAME),FALSE); ShowWindow(GetDlgItem(hdlg,IDC_WARNING),SW_SHOW); hFont = (HFONT)SendDlgItemMessage(hdlg, IDC_WARNING, WM_GETFONT, 0, 0); GetObject(hFont, sizeof(logFont), &logFont); logFont.lfWeight = FW_BOLD; hFont = CreateFontIndirect(&logFont); SendDlgItemMessage(hdlg, IDC_WARNING, WM_SETFONT, (WPARAM)hFont, 0); break; } g_iOPButtonsCount=g_iButtonsCount; hButtonsList=GetDlgItem(hdlg,IDC_BUTTONSLIST); hMenuTree=GetDlgItem(hdlg,IDC_MENUTREE); style = GetWindowLongPtr(hButtonsList,GWL_STYLE); style |=TVS_NOHSCROLL; SetWindowLongPtr(hButtonsList,GWL_STYLE, style); style = GetWindowLongPtr(hMenuTree,GWL_STYLE); style |=TVS_NOHSCROLL; SetWindowLongPtr(hMenuTree,GWL_STYLE, style); BuildButtonsList(hButtonsList); if (!TreeView_GetCount(hButtonsList)) EnableWindow(GetDlgItem(hdlg,IDC_RCLICKVALUE),FALSE); mir_subclassWindow( GetDlgItem(hdlg,IDC_BUTTONNAME), EditSubclassProc); mir_subclassWindow( GetDlgItem(hdlg,IDC_MENUNAME), EditSubclassProc); EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_INQMENU),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),FALSE); CheckDlgButton(hdlg,IDC_RAUTOSEND,(g_bRClickAuto=db_get_b(NULL,PLGNAME,"RClickAuto",0)) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hdlg,IDC_LAUTOSEND,(g_bLClickAuto=db_get_b(NULL,PLGNAME,"LClickAuto",0)) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hdlg,IDC_ENABLEQUICKMENU,(g_bQuickMenu=db_get_b(NULL, PLGNAME,"QuickMenu", 1)) ? BST_CHECKED : BST_UNCHECKED); bOptionsInit=FALSE; }break; case WM_LBUTTONUP: if(drag) { TVHITTESTINFO hti; HTREEITEM htiAfter=NULL; ButtonData* bd=NULL; TVITEM tvi; RECT rc; BYTE height; BOOLEAN bAsChild = FALSE; TreeView_SetInsertMark(hMenuTree, NULL, 0 ); ReleaseCapture(); SetCursor( LoadCursor( NULL, IDC_ARROW )); hti.pt.x = ( SHORT )LOWORD( lparam ); hti.pt.y = ( SHORT )HIWORD( lparam ); ClientToScreen(hdlg,&hti.pt); ScreenToClient(hMenuTree,&hti.pt); TreeView_HitTest( hMenuTree, &hti ); if(TreeView_GetParent(hMenuTree,hti.hItem)&&TreeView_GetChild(hMenuTree,hDragItem)) break; if(TreeView_GetChild(hMenuTree,hti.hItem)&&TreeView_GetChild(hMenuTree,hDragItem)) break; if ( hti.flags & TVHT_ABOVE ) { htiAfter = TVI_FIRST; } else if ( hti.flags & ( TVHT_NOWHERE|TVHT_BELOW )) { htiAfter = TVI_LAST; } else if ( hti.flags & ( TVHT_ONITEM|TVHT_ONITEMRIGHT )) { // check where over the item, the pointer is if ( !TreeView_GetItemRect( hMenuTree, hti.hItem, &rc, FALSE )) { drag=0; break; } height = ( BYTE )( rc.bottom - rc.top ); if ( hti.pt.y - ( height / 3 ) < rc.top ) { HTREEITEM hItem = hti.hItem; if ( !( hti.hItem = TreeView_GetPrevSibling( hMenuTree, hItem )) ) { if ( !( hti.hItem = TreeView_GetParent(hMenuTree, hItem ))) htiAfter = TVI_FIRST; else bAsChild = TRUE; } } else if ( hti.pt.y + ( height / 3 ) <= rc.bottom ) { bAsChild = TRUE; } } if(TreeView_GetChild(hMenuTree,hDragItem)&&bAsChild) break; if(hti.hItem){ tvi.hItem=hti.hItem; tvi.mask=TVIF_PARAM |TVIF_HANDLE; TreeView_GetItem(hMenuTree,&tvi); if ((bd=(ButtonData*)tvi.lParam)&&(bd->fEntryOpType&QMF_EX_SEPARATOR)) bAsChild = FALSE; } if(TreeView_GetParent(hMenuTree,hti.hItem)) bAsChild = FALSE; MoveItem( hDragItem, htiAfter?htiAfter:hti.hItem, bAsChild ); SendMessage(GetParent(hdlg),PSM_CHANGED,0,0); drag=0; } break; /////////////////////////////////// //From UserInfoEx by DeathAxe // case WM_MOUSEMOVE: { if (!drag) break; { TVHITTESTINFO hti; hti.pt.x=(short)LOWORD(lparam); hti.pt.y=(short)HIWORD(lparam); ClientToScreen(hdlg,&hti.pt); ScreenToClient(hMenuTree,&hti.pt); TreeView_HitTest(hMenuTree,&hti); if ( hti.flags & ( TVHT_ONITEM|TVHT_ONITEMRIGHT )) { RECT rc; BYTE height; if ( TreeView_GetItemRect(hMenuTree, hti.hItem, &rc, FALSE )) { height = ( BYTE )( rc.bottom - rc.top ); if ( hti.pt.y - ( height / 3 ) < rc.top ) { SetCursor( LoadCursor( NULL, IDC_ARROW )); TreeView_SetInsertMark( hMenuTree, hti.hItem, 0 ); } else if ( hti.pt.y + ( height / 3 ) > rc.bottom ) { SetCursor( LoadCursor( NULL, IDC_ARROW )); TreeView_SetInsertMark( hMenuTree, hti.hItem, 1 ); } else { TreeView_SetInsertMark( hMenuTree, NULL, 0 ); SetCursor( LoadCursor( GetModuleHandle(NULL), MAKEINTRESOURCE( 183 )) ); } } } else { if ( hti.flags & TVHT_ABOVE ) SendMessage( hMenuTree, WM_VSCROLL, MAKEWPARAM( SB_LINEUP, 0 ), 0 ); if ( hti.flags & TVHT_BELOW ) SendMessage( hMenuTree, WM_VSCROLL, MAKEWPARAM( SB_LINEDOWN, 0 ), 0 ); TreeView_SetInsertMark( hMenuTree, NULL, 0 ); } } }break; ///////////// case WM_DESTROY: if (g_varhelpDlg) DestroyWindow(g_varhelpDlg); g_varhelpDlg=NULL; break; case WM_NOTIFY: switch(((LPNMHDR)lparam)->idFrom) { case 0: if (((LPNMHDR)lparam)->code == PSN_APPLY ) { if (!bNeedRestart){ SetMenuEntryProperties(hdlg); SaveMenuTree(hdlg); } db_set_b(NULL,PLGNAME,"RClickAuto",(BYTE)(g_bRClickAuto=IsDlgButtonChecked(hdlg,IDC_RAUTOSEND))); db_set_b(NULL,PLGNAME,"LClickAuto",(BYTE)(g_bLClickAuto=IsDlgButtonChecked(hdlg,IDC_LAUTOSEND))); db_set_b(NULL,PLGNAME,"QuickMenu",(BYTE)(g_bQuickMenu=IsDlgButtonChecked(hdlg,IDC_ENABLEQUICKMENU))); return 1; } else if (((LPNMHDR)lparam)->code == PSN_RESET ) { if (!bNeedRestart) RestoreModuleData(hdlg); return 1; } break; case IDC_MENUTREE: switch (((LPNMHDR)lparam)->code){ case TVN_KEYDOWN:{ TV_KEYDOWN* pTVKeyDown = (TV_KEYDOWN*) ((LPNMHDR)lparam); if ( pTVKeyDown->wVKey == VK_F2 ) TreeView_EditLabel(hMenuTree,TreeView_GetSelection(hMenuTree)); else if ( pTVKeyDown->wVKey == VK_DELETE ) SendMessage(hdlg,WM_COMMAND,IDC_MTREEREMOVE,0); }break; case TVN_BEGINLABELEDIT: hwndEdit=TreeView_GetEditControl(hMenuTree); mir_subclassWindow(hwndEdit, LabelEditSubclassProc); break; case TVN_ENDLABELEDIT: { TVITEM tvi; ButtonData* bd=NULL; TCHAR strbuf[256]; TCHAR szLabel[256]; tvi.pszText = strbuf; tvi.cchTextMax = _countof(strbuf); tvi.mask=TVIF_TEXT |TVIF_HANDLE|TVIF_PARAM; tvi.hItem=TreeView_GetSelection(hMenuTree); TreeView_GetItem(hMenuTree,&tvi); GetWindowText(hwndEdit, szLabel, _countof(szLabel)); hwndEdit=NULL; if (!mir_tstrlen(szLabel)) break; if (bd = (ButtonData*)tvi.lParam){ if (!mir_tstrcmp(szLabel,_T("---"))) { if(TreeView_GetChild(hMenuTree,tvi.hItem)) break; else{ bd->fEntryOpType=QMF_EX_SEPARATOR; EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),FALSE); SetDlgItemText(hdlg, IDC_MENUVALUE, _T("")); } } else { bd->fEntryOpType&=~QMF_EX_SEPARATOR; EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),TRUE); EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),TRUE); SetDlgItemText(hdlg, IDC_MENUVALUE, bd->pszOpValue/*?bd->pszOpValue:bd->pszValue*/); } bd->pszOpName=mir_tstrdup(szLabel); tvi.pszText=szLabel; TreeView_SetItem(hMenuTree, &tvi); SendMessage(GetParent(hdlg),PSM_CHANGED,0,0); } } break; case NM_KILLFOCUS: TreeView_EndEditLabelNow(hButtonsList, 1); break; case TVN_BEGINDRAG: SetCapture(hdlg); drag=1; hDragItem=((LPNMTREEVIEW)lparam)->itemNew.hItem; TreeView_SelectItem(hMenuTree,hDragItem); break; case TVN_SELCHANGING: { HTREEITEM hti = TreeView_GetSelection(hMenuTree); if (hti==NULL) break; TVITEM tvi; tvi.hItem=hti; tvi.mask=TVIF_HANDLE|TVIF_PARAM; TreeView_GetItem(hMenuTree,&tvi); if (tvi.lParam == 0) break; ButtonData *bd = ( ButtonData* )tvi.lParam; if (bd) { TCHAR szValue[256]; GetDlgItemText(hdlg, IDC_MENUVALUE, szValue, _countof(szValue)); if(mir_tstrlen(szValue)) { if(bd->pszOpValue&&(bd->pszOpValue!=bd->pszValue)) mir_free(bd->pszOpValue); bd->pszOpValue=mir_tstrdup(szValue); } bd->bOpInQMenu=IsDlgButtonChecked(hdlg,IDC_INQMENU); bd->bIsOpServName=IsDlgButtonChecked(hdlg,IDC_ISSERVNAME); } } break; case TVN_SELCHANGED: { HTREEITEM hti = TreeView_GetSelection(hMenuTree); if (hti == NULL) break; TVITEM tvi; tvi.mask=TVIF_HANDLE|TVIF_PARAM; tvi.hItem=hti; TreeView_GetItem(hMenuTree,&tvi); ButtonData *bd = ( ButtonData* )tvi.lParam; if (bd) { if (!TreeView_GetChild(hMenuTree, tvi.hItem)&&!(bd->fEntryOpType&QMF_EX_SEPARATOR)) { EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),TRUE); EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),TRUE); EnableWindow(GetDlgItem(hdlg,IDC_INQMENU),TRUE); SetDlgItemText(hdlg, IDC_MENUVALUE, bd->pszOpValue/*?bd->pszOpValue:bd->pszValue*/); } else { EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),FALSE); if (!(bd->fEntryOpType&QMF_EX_SEPARATOR)) EnableWindow(GetDlgItem(hdlg,IDC_INQMENU),FALSE); SetDlgItemText(hdlg, IDC_MENUVALUE, _T("")); } CheckDlgButton(hdlg,IDC_INQMENU,bd->bOpInQMenu ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hdlg,IDC_ISSERVNAME,bd->bIsOpServName ? BST_CHECKED : BST_UNCHECKED); } } } break; case IDC_BUTTONSLIST: switch (((LPNMHDR)lparam)->code) { case TVN_KEYDOWN:{ TV_KEYDOWN* pTVKeyDown = (TV_KEYDOWN*) ((LPNMHDR)lparam); if ( pTVKeyDown->wVKey == VK_F2 ) TreeView_EditLabel(hButtonsList,TreeView_GetSelection(hButtonsList)); else if ( pTVKeyDown->wVKey == VK_DELETE ) SendMessage(hdlg,WM_COMMAND,IDC_BLISTREMOVE,0); }break; case TVN_BEGINLABELEDIT: hwndEdit = TreeView_GetEditControl(hButtonsList); mir_subclassWindow(hwndEdit, LabelEditSubclassProc); break; case TVN_ENDLABELEDIT: { TVITEM tvi; TCHAR strbuf[128]; TCHAR szLabel[128]; tvi.pszText = strbuf; tvi.cchTextMax = _countof(strbuf); tvi.mask=TVIF_TEXT |TVIF_HANDLE|TVIF_PARAM; tvi.hItem=TreeView_GetSelection(hButtonsList); TreeView_GetItem(hButtonsList,&tvi); GetWindowText(hwndEdit, szLabel, _countof(szLabel)); hwndEdit=NULL; if (!mir_tstrlen(szLabel)) break; tvi.pszText=szLabel; ((ListData*)tvi.lParam)->dwOPFlags|=QMF_RENAMED; TreeView_SetItem(hButtonsList, &tvi); SendMessage(GetParent(hdlg),PSM_CHANGED,0,0); } break; case TVN_SELCHANGING: SetMenuEntryProperties(hdlg); break; case TVN_SELCHANGED: { HTREEITEM hti = TreeView_GetSelection(hButtonsList); if(hti==NULL||!TreeView_GetCount(hButtonsList)) { EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_INQMENU),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME2),FALSE); SetDlgItemText(hdlg, IDC_MENUVALUE, _T("")); break; } TVITEM tvi; tvi.mask=TVIF_HANDLE|TVIF_PARAM; tvi.hItem=hti; TreeView_GetItem(hButtonsList,&tvi); if(tvi.lParam==0) break; BuildMenuTree(hMenuTree,(SortedList *)((ListData*)tvi.lParam)->sl); SetDlgItemText(hdlg, IDC_MENUVALUE, _T("")); EnableWindow(GetDlgItem(hdlg,IDC_RCLICKVALUE),TRUE); EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME2),TRUE); CheckDlgButton(hdlg,IDC_ISSERVNAME2,((ListData*)tvi.lParam)->bIsOpServName ? BST_CHECKED : BST_UNCHECKED); if (((ListData*)tvi.lParam)->ptszOPQValue) SetDlgItemText(hdlg, IDC_RCLICKVALUE, ((ListData*)tvi.lParam)->ptszOPQValue); else SetDlgItemText(hdlg, IDC_RCLICKVALUE, _T("")); } break; } break; } break; case WM_COMMAND: switch(LOWORD(wparam)) { case IDC_VARHELP: if (!g_varhelpDlg) g_varhelpDlg=CreateDialog(hinstance,MAKEINTRESOURCE(IDD_HELPDIALOG), 0, HelpDlgProc); else //ShowWindow(g_varhelpDlg,SW_SHOWDEFAULT); SetWindowPos(g_varhelpDlg,0,0,0,0,0,SWP_SHOWWINDOW|SWP_NOMOVE|SWP_NOSIZE); break; case IDC_BLISTADD: { TVINSERTSTRUCT tvis; ListData* ld=NULL; TCHAR namebuff[MAX_PATH]={'\0'}; int count=TreeView_GetCount(hButtonsList); if (count>10) break; if(g_iOPButtonsCount==99){ MessageBox(NULL, TranslateT("Congratulation!\r\nYou have clicked this button 100 times!\r\nThere was access violation at this point...\r\nAnd now function for freeing resources must be called...\r\nBut no! there's only break :D"), TranslateT("You win!"),MB_OK); break; } ld = (ListData *)mir_alloc(sizeof(ListData)); ButtonsList[g_iOPButtonsCount++]=ld; ld->sl=List_Create(0,1); ld->dwOPFlags=QMF_NEW; ld->bIsOpServName=0; ld->ptszButtonName=NULL; ld->ptszOPQValue=NULL; ld->ptszQValue=NULL; tvis.hParent = NULL; tvis.hInsertAfter = TVI_LAST; GetDlgItemText(hdlg, IDC_BUTTONNAME, namebuff, _countof(namebuff)); tvis.item.mask=TVIF_PARAM|TVIF_TEXT; tvis.item.pszText=(mir_tstrlen(namebuff))?namebuff:TranslateT("New Button"); tvis.item.lParam=(LPARAM)ld; TreeView_SelectItem(hButtonsList,TreeView_InsertItem(hButtonsList,&tvis)); }break; case IDC_BLISTREMOVE: { TVITEM tvi; ListData* ld; if (!(tvi.hItem=TreeView_GetSelection(hButtonsList))) break; tvi.mask=TVIF_HANDLE|TVIF_PARAM; TreeView_GetItem(hButtonsList,&tvi); ld= (ListData*)tvi.lParam; ld->dwOPFlags|=QMF_DELETNEEDED; TreeView_DeleteItem(hButtonsList,tvi.hItem); if (!TreeView_GetCount(hButtonsList)) { TreeView_DeleteAllItems(hMenuTree); EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_RCLICKVALUE),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_INQMENU),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME2),FALSE); SetDlgItemText(hdlg, IDC_MENUVALUE, _T("")); SetDlgItemText(hdlg, IDC_RCLICKVALUE, _T("")); } }break; case IDC_MTREEADD: { TVINSERTSTRUCT tvis; TVITEM tvi; ButtonData *bd=NULL; SortedList *sl=NULL; TCHAR namebuff[MAX_PATH]={'\0'}; if (!TreeView_GetCount(hButtonsList)) break; if (!(tvi.hItem=TreeView_GetSelection(hButtonsList))) break; bd = (ButtonData *)mir_alloc(sizeof(ButtonData)); memset(bd,0,sizeof(ButtonData)); GetDlgItemText(hdlg, IDC_MENUNAME, namebuff, _countof(namebuff)); bd->dwOPPos=TreeView_GetCount(hMenuTree)-1; bd->pszOpName=mir_tstrlen(namebuff)?mir_tstrdup(namebuff):mir_tstrdup(TranslateT("New Menu Entry")); bd->pszOpValue=mir_tstrdup(bd->pszOpName); bd->fEntryOpType=!mir_tstrcmp(namebuff,_T("---"))?QMF_EX_SEPARATOR:0; bd->dwOPFlags=QMF_NEW; bd->pszName=NULL; bd->pszValue=NULL; tvi.mask=TVIF_HANDLE|TVIF_PARAM; TreeView_GetItem(hButtonsList,&tvi); sl=((ListData*)tvi.lParam)->sl; List_InsertPtr(sl,bd); tvis.hParent = NULL; tvis.hInsertAfter = TVI_LAST; tvis.item.mask=TVIF_PARAM|TVIF_TEXT; tvis.item.pszText=bd->pszOpName; tvis.item.lParam=(LPARAM)bd; TreeView_SelectItem(hMenuTree,TreeView_InsertItem(hMenuTree,&tvis)); }break; case IDC_MTREEREMOVE: { TVITEM tvi; TVINSERTSTRUCT tvis; HTREEITEM hti=NULL; ButtonData *bd=NULL; tvi.mask=TVIF_HANDLE|TVIF_PARAM; if (!(tvi.hItem=TreeView_GetSelection(hMenuTree))) break; TreeView_GetItem(hMenuTree,&tvi); hti=tvi.hItem; bd= (ButtonData*)tvi.lParam; bd->dwOPFlags|=QMF_DELETNEEDED; if(tvi.hItem=TreeView_GetChild(hMenuTree,tvi.hItem)) { TCHAR strbuf[128]; while(tvi.hItem){ tvis.hInsertAfter=hti; tvi.pszText = strbuf; tvi.cchTextMax = _countof(strbuf); tvi.mask=TVIF_HANDLE|TVIF_PARAM|TVIF_TEXT; TreeView_GetItem(hMenuTree,&tvi); tvis.hParent=NULL; tvis.item=tvi; TreeView_InsertItem(hMenuTree,&tvis); tvi.hItem=TreeView_GetNextSibling(hMenuTree,tvi.hItem); } } TreeView_DeleteItem(hMenuTree,hti); if (!TreeView_GetCount(hMenuTree)) { EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_INQMENU),FALSE); SetDlgItemText(hdlg, IDC_MENUVALUE, _T("")); } }break; } break; case WM_CLOSE: EndDialog(hdlg,0); return 0; } if (HIWORD(wparam)==BN_CLICKED && GetFocus()==(HWND)lparam) SendMessage(GetParent(hdlg),PSM_CHANGED,0,0); else if ((HIWORD(wparam) == EN_CHANGE)&&(GetFocus()==(HWND)lparam)) if (!bOptionsInit) SendMessage(GetParent(hdlg),PSM_CHANGED,0,0); return 0; }
//------------------------------------------------------------------------------ BOOL CALLBACK DialogProc_conf(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_COMMAND: if (HIWORD(wParam) == BN_CLICKED) { switch(LOWORD(wParam)) { case BT_START: if (start_scan) CreateThread(NULL,0,StopGUIScan,0,0,0); else { //init start_scan = TRUE; //local or not ? if(TreeView_GetCount(htrv_files) > NB_MX_TYPE_FILES_TITLE)LOCAL_SCAN = FALSE; else LOCAL_SCAN = TRUE; //read state ! if (IsDlgButtonChecked(h_conf,BT_ACL_FILE_CHK)==BST_CHECKED)FILE_ACL=TRUE; else FILE_ACL=FALSE; if (IsDlgButtonChecked(h_conf,BT_ADS_FILE_CHK)==BST_CHECKED)FILE_ADS=TRUE; else FILE_ADS=FALSE; if (IsDlgButtonChecked(h_conf,BT_SHA_FILE_CHK)==BST_CHECKED)FILE_SHA=TRUE; else FILE_SHA=FALSE; if (IsDlgButtonChecked(h_conf,BT_UTC_CHK)==BST_CHECKED)UTC_TIME=TRUE; else UTC_TIME=FALSE; if (IsDlgButtonChecked(h_conf,BT_MAGIC_CHK)==BST_CHECKED)enable_magic=TRUE; else enable_magic=FALSE; if (IsDlgButtonChecked(h_conf,BT_RA_CHK)==BST_CHECKED)enable_remote=TRUE; else enable_remote=FALSE; if (Ischeck_treeview(htrv_test, H_tests[INDEX_FILE_NK]))enable_LNK= TRUE; else enable_LNK= FALSE; EnableWindow(htrv_files,FALSE); EnableWindow(GetDlgItem((HWND)h_conf,BT_ACL_FILE_CHK),FALSE); EnableWindow(GetDlgItem((HWND)h_conf,BT_ADS_FILE_CHK),FALSE); EnableWindow(GetDlgItem((HWND)h_conf,BT_SHA_FILE_CHK),FALSE); EnableWindow(GetDlgItem((HWND)h_conf,BT_UTC_CHK),FALSE); EnableWindow(GetDlgItem((HWND)h_conf,BT_MAGIC_CHK),FALSE); EnableWindow(GetDlgItem((HWND)h_conf,BT_RA_CHK),FALSE); if(TreeView_GetCount(htrv_files) > NB_MX_TYPE_FILES_TITLE)LOCAL_SCAN = FALSE; else LOCAL_SCAN = TRUE; //create new session and select it ! SendMessage(hCombo_session, CB_RESETCONTENT,0,0); FORMAT_CALBAK_READ_INFO fcri; fcri.type = TYPE_SQL_ADD_SESSION; SQLITE_WriteData(&fcri, SQLITE_LOCAL_BDD); //start h_thread_scan = CreateThread(NULL,0,GUIScan,0,0,0); SetWindowText(GetDlgItem((HWND)h_conf,BT_START),cps[TXT_BT_STOP].c); } break; //---------------------------------------- case POPUP_TRV_FILES_ADD_FILE: { char files[MAX_LINE_DBSIZE]=""; memset(files,0,MAX_LINE_DBSIZE); OPENFILENAME ofn; ZeroMemory(&ofn, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = h_conf; ofn.lpstrFile = files; ofn.nMaxFile = MAX_LINE_DBSIZE; ofn.lpstrFilter = "*.* \0*.*\0" "*.log\0*.log\0" "*.evt\0*.evt\0" "*.evtx\0*.evtx\0" "*.db\0*.db\0" "*.sqlite\0*.sqlite\0" "*.dat\0*.dat\0" "*.pf\0*.pf\0" "*.job\0*.job\0" "ntds.dit\0ntds.dit\0" "sam\0sam\0" "system\0system\0" "software\0software\0" "security\0security\0" "default\0default\0" "hardware\0hardware\0"; ofn.nFilterIndex = 1; ofn.Flags =/*OFN_FILEMUSTEXIST |*/ OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT|OFN_EXPLORER|OFN_SHOWHELP; ofn.lpstrDefExt ="*.*"; if (GetOpenFileName(&ofn)==TRUE) { //firt is path char path[MAX_PATH],totalpath[MAX_PATH]; strncpy(path,files,MAX_PATH); //after file name char *p = files+strlen(files)+1; if (*p == 0)FileToTreeView(path); while (*p) { snprintf(totalpath,MAX_PATH,"%s\\%s",path,p); FileToTreeView(totalpath); p = p+strlen(p)+1; } //tri and clean CleanTreeViewFiles(htrv_files); //expend des branches SendMessage(htrv_files,TVM_EXPAND, TVE_EXPAND,(LPARAM)TRV_HTREEITEM_CONF[FILES_TITLE_LOGS]); SendMessage(htrv_files,TVM_EXPAND, TVE_EXPAND,(LPARAM)TRV_HTREEITEM_CONF[FILES_TITLE_FILES]); SendMessage(htrv_files,TVM_EXPAND, TVE_EXPAND,(LPARAM)TRV_HTREEITEM_CONF[FILES_TITLE_REGISTRY]); SendMessage(htrv_files,TVM_EXPAND, TVE_EXPAND,(LPARAM)TRV_HTREEITEM_CONF[FILES_TITLE_APPLI]); } } break; case POPUP_TRV_FILES_ADD_PATH: { BROWSEINFO browser; LPITEMIDLIST lip; char path[MAX_PATH] = ""; browser.hwndOwner = h_conf; browser.pidlRoot = 0; browser.lpfn = 0; browser.iImage = 0; browser.lParam = 0; browser.ulFlags = BIF_NEWDIALOGSTYLE; browser.pszDisplayName = path; browser.lpszTitle = ""; lip = SHBrowseForFolder(&browser); if (lip != NULL) { if (SHGetPathFromIDList(lip,path)) { FileToTreeView(path); //tri and clean CleanTreeViewFiles(htrv_files); //expend all SendMessage(htrv_files,TVM_EXPAND, TVE_EXPAND,(LPARAM)TRV_HTREEITEM_CONF[FILES_TITLE_FILES]); SendMessage(htrv_files,TVM_EXPAND, TVE_EXPAND,(LPARAM)TRV_HTREEITEM_CONF[FILES_TITLE_LOGS]); SendMessage(htrv_files,TVM_EXPAND, TVE_EXPAND,(LPARAM)TRV_HTREEITEM_CONF[FILES_TITLE_REGISTRY]); SendMessage(htrv_files,TVM_EXPAND, TVE_EXPAND,(LPARAM)TRV_HTREEITEM_CONF[FILES_TITLE_APPLI]); } } } break; case POPUP_TRV_FILES_UP: { //get selection + parent HTREEITEM hitem = (HTREEITEM)SendMessage(htrv_files,TVM_GETNEXTITEM,(WPARAM)TVGN_CARET, (LPARAM)0); HTREEITEM hparent = (HTREEITEM)SendMessage(htrv_files,TVM_GETNEXTITEM,(WPARAM)TVGN_PARENT, (LPARAM)hitem); //get txt char tmp[MAX_PATH]; GetItemTreeView(hitem,htrv_files,tmp, MAX_PATH); //add item if (hparent == TRV_HTREEITEM_CONF[FILES_TITLE_LOGS])AddItemTreeView(htrv_files,tmp, TRV_HTREEITEM_CONF[FILES_TITLE_APPLI]); else if (hparent == TRV_HTREEITEM_CONF[FILES_TITLE_FILES])AddItemTreeView(htrv_files,tmp, TRV_HTREEITEM_CONF[FILES_TITLE_LOGS]); else if (hparent == TRV_HTREEITEM_CONF[FILES_TITLE_REGISTRY])AddItemTreeView(htrv_files,tmp, TRV_HTREEITEM_CONF[FILES_TITLE_FILES]); else if (hparent == TRV_HTREEITEM_CONF[FILES_TITLE_APPLI])AddItemTreeView(htrv_files,tmp, TRV_HTREEITEM_CONF[FILES_TITLE_REGISTRY]); //remove item SendMessage(htrv_files,TVM_DELETEITEM,(WPARAM)0, (LPARAM)hitem); //expend all SendMessage(htrv_files,TVM_EXPAND, TVE_EXPAND,(LPARAM)TRV_HTREEITEM_CONF[FILES_TITLE_FILES]); SendMessage(htrv_files,TVM_EXPAND, TVE_EXPAND,(LPARAM)TRV_HTREEITEM_CONF[FILES_TITLE_LOGS]); SendMessage(htrv_files,TVM_EXPAND, TVE_EXPAND,(LPARAM)TRV_HTREEITEM_CONF[FILES_TITLE_REGISTRY]); SendMessage(htrv_files,TVM_EXPAND, TVE_EXPAND,(LPARAM)TRV_HTREEITEM_CONF[FILES_TITLE_APPLI]); } break; case POPUP_TRV_FILES_DOWN: { //get selection + parent HTREEITEM hitem = (HTREEITEM)SendMessage(htrv_files,TVM_GETNEXTITEM,(WPARAM)TVGN_CARET, (LPARAM)0); HTREEITEM hparent = (HTREEITEM)SendMessage(htrv_files,TVM_GETNEXTITEM,(WPARAM)TVGN_PARENT, (LPARAM)hitem); //get txt char tmp[MAX_PATH]; GetItemTreeView(hitem,htrv_files,tmp, MAX_PATH); //add item if (hparent == TRV_HTREEITEM_CONF[FILES_TITLE_LOGS])AddItemTreeView(htrv_files,tmp, TRV_HTREEITEM_CONF[FILES_TITLE_FILES]); else if (hparent == TRV_HTREEITEM_CONF[FILES_TITLE_FILES])AddItemTreeView(htrv_files,tmp, TRV_HTREEITEM_CONF[FILES_TITLE_REGISTRY]); else if (hparent == TRV_HTREEITEM_CONF[FILES_TITLE_REGISTRY])AddItemTreeView(htrv_files,tmp, TRV_HTREEITEM_CONF[FILES_TITLE_APPLI]); else if (hparent == TRV_HTREEITEM_CONF[FILES_TITLE_APPLI])AddItemTreeView(htrv_files,tmp, TRV_HTREEITEM_CONF[FILES_TITLE_LOGS]); //remove item SendMessage(htrv_files,TVM_DELETEITEM,(WPARAM)0, (LPARAM)hitem); //expend all SendMessage(htrv_files,TVM_EXPAND, TVE_EXPAND,(LPARAM)TRV_HTREEITEM_CONF[FILES_TITLE_FILES]); SendMessage(htrv_files,TVM_EXPAND, TVE_EXPAND,(LPARAM)TRV_HTREEITEM_CONF[FILES_TITLE_LOGS]); SendMessage(htrv_files,TVM_EXPAND, TVE_EXPAND,(LPARAM)TRV_HTREEITEM_CONF[FILES_TITLE_REGISTRY]); SendMessage(htrv_files,TVM_EXPAND, TVE_EXPAND,(LPARAM)TRV_HTREEITEM_CONF[FILES_TITLE_APPLI]); } break; case POPUP_TRV_FILES_REMOVE_ITEMS:TreeView_DeleteItem(htrv_files, (HTREEITEM)SendMessage(htrv_files,TVM_GETNEXTITEM,(WPARAM)TVGN_CARET, (LPARAM)0));break; case POPUP_TRV_FILES_CLEAN_ALL: SendMessage(htrv_files,TVM_DELETEITEM,(WPARAM)0, (LPARAM)TVI_ROOT); check_childs_treeview(htrv_test, FALSE); TRV_HTREEITEM_CONF[FILES_TITLE_LOGS] = AddItemTreeView(htrv_files,cps[TXT_FILE_AUDIT].c, TVI_ROOT); TRV_HTREEITEM_CONF[FILES_TITLE_FILES] = AddItemTreeView(htrv_files,cps[TXT_FILE_REP].c, TVI_ROOT); TRV_HTREEITEM_CONF[FILES_TITLE_REGISTRY] = AddItemTreeView(htrv_files,cps[TXT_FILE_REGISTRY].c, TVI_ROOT); TRV_HTREEITEM_CONF[FILES_TITLE_APPLI] = AddItemTreeView(htrv_files,cps[TXT_FILE_APPLI].c, TVI_ROOT); break; case POPUP_TRV_FILES_OPEN_PATH: { //get item txt char path[MAX_PATH]; TVITEM tvitem; tvitem.mask = TVIF_HANDLE|TVIF_TEXT; tvitem.hItem = (HTREEITEM)SendMessage(htrv_files,TVM_GETNEXTITEM,(WPARAM)TVGN_CARET, (LPARAM)0); tvitem.cchTextMax = MAX_PATH; tvitem.pszText = path; if (SendMessage(htrv_files,TVM_GETITEM,(WPARAM)0, (LPARAM)&tvitem)) { //directory or file if(isDirectory(path))ShellExecute(h_main, "explore", path, NULL,NULL,SW_SHOW); else { //extract char *c = path; while (*c++); while (*c != '\\')c--; c++; *c=0; ShellExecute(h_main, "explore", path, NULL,NULL,SW_SHOW); } } } break; case POPUP_TRV_FILES_AUTO_SEARCH: if (B_AUTOSEARCH) { B_AUTOSEARCH = FALSE; DWORD IDThread; GetExitCodeThread(h_AUTOSEARCH,&IDThread); TerminateThread(h_AUTOSEARCH,IDThread); //clean results unsigned int i; for (i=0;i<NB_MX_TYPE_FILES_TITLE;i++) { //tri SendMessage(htrv_files,TVM_SORTCHILDREN, TRUE,(LPARAM)TRV_HTREEITEM_CONF[i]); SupDoublon(htrv_files,TRV_HTREEITEM_CONF[i]); SendMessage(htrv_files,TVM_EXPAND, TVE_EXPAND,(LPARAM)TRV_HTREEITEM_CONF[i]); } }else { B_AUTOSEARCH = TRUE; h_AUTOSEARCH = CreateThread(NULL,0,AutoSearchFiles,0,0,0); } break; case POPUP_TRV_FILES_AUTO_SEARCH_PATH: if (B_AUTOSEARCH) { B_AUTOSEARCH = FALSE; DWORD IDThread; GetExitCodeThread(h_AUTOSEARCH,&IDThread); TerminateThread(h_AUTOSEARCH,IDThread); //clean results unsigned int i; for (i=0;i<NB_MX_TYPE_FILES_TITLE;i++) { //tri SendMessage(htrv_files,TVM_SORTCHILDREN, TRUE,(LPARAM)TRV_HTREEITEM_CONF[i]); SupDoublon(htrv_files,TRV_HTREEITEM_CONF[i]); SendMessage(htrv_files,TVM_EXPAND, TVE_EXPAND,(LPARAM)TRV_HTREEITEM_CONF[i]); } }else { BROWSEINFO browser; LPITEMIDLIST lip; char path[MAX_PATH] = ""; browser.hwndOwner = h_conf; browser.pidlRoot = 0; browser.lpfn = 0; browser.iImage = 0; browser.lParam = 0; browser.ulFlags = BIF_NEWDIALOGSTYLE; browser.pszDisplayName = path; browser.lpszTitle = ""; lip = SHBrowseForFolder(&browser); if (lip != NULL) { if (SHGetPathFromIDList(lip,path)) { strncat(path,"\\\0",MAX_PATH); B_AUTOSEARCH = TRUE; h_AUTOSEARCH = CreateThread(NULL,0,AutoSearchFiles,path,0,0); } } } break; case POPUP_TRV_FILES_SAVE_LIST: { char file[MAX_PATH]=""; OPENFILENAME ofn; ZeroMemory(&ofn, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = h_conf; ofn.lpstrFile = file; ofn.nMaxFile = MAX_PATH; ofn.lpstrFilter ="*.txt \0*.txt\0*.csv\0*.csv\0"; ofn.nFilterIndex = 1; ofn.Flags =OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; ofn.lpstrDefExt =".txt\0"; if (GetSaveFileName(&ofn)==TRUE) { if (ofn.nFilterIndex == 2) SaveTRV(htrv_files, file, SAVE_TYPE_CSV); else SaveTRV(htrv_files, file, SAVE_TYPE_TXT); } } break; case POPUP_TRV_FILES_LOAD_LIST: { char file[MAX_LINE_SIZE]=""; memset(file,0,MAX_LINE_SIZE); OPENFILENAME ofn; ZeroMemory(&ofn, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = h_conf; ofn.lpstrFile = file; ofn.nMaxFile = MAX_LINE_SIZE; ofn.lpstrFilter = "*.* \0*.*\0" "*.txt\0*.txt\0" "*.csv\0*.csv\0"; ofn.nFilterIndex = 1; ofn.Flags =/*OFN_FILEMUSTEXIST |*/ OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT|OFN_EXPLORER|OFN_SHOWHELP; ofn.lpstrDefExt ="*.*"; if (GetOpenFileName(&ofn)==TRUE) { loadFile_test(file, ofn.nFilterIndex); } } break; case POPUP_TRV_CHECK_ALL:check_childs_treeview(htrv_test, TRUE);break; case POPUP_TRV_UNCHECK_ALL:check_childs_treeview(htrv_test, FALSE);break; case POPUP_TRV_STOP_TEST: { //get item index int index = GetTrvItemIndex((HTREEITEM)SendMessage(htrv_test,TVM_GETNEXTITEM,(WPARAM)TVGN_CARET, (LPARAM)0), htrv_test); if (index < NB_TESTS) { //kill the thread DWORD IDThread; GetExitCodeThread(h_thread_test[index],&IDThread); TerminateThread(h_thread_test[index],IDThread); h_thread_test[index] = 0; check_treeview(htrv_test, H_tests[index], TRV_STATE_UNCHECK); } } break; } } break; case WM_NOTIFY: /*if (((LPNMHDR)lParam)->code == LVN_COLUMNCLICK) { TRI_PROCESS_VIEW = !TRI_PROCESS_VIEW; c_Tri(((LPNMHDR)lParam)->hwndFrom,((LPNMLISTVIEW)lParam)->iSubItem,TRI_PROCESS_VIEW); }else */if (((LPNMHDR)lParam)->code == NM_CLICK && ((LPNMHDR)lParam)->hwndFrom == htrv_test) { //selected item and state TV_HITTESTINFO Struct; POINT pt; GetCursorPos(&pt); ScreenToClient(htrv_test, &pt); Struct.pt = pt; HTREEITEM hItemSelect = TreeView_HitTest(htrv_test, &Struct); if (hItemSelect != NULL) { if (Struct.flags == TVHT_ONITEMSTATEICON)TreeView_SelectItem(htrv_test,hItemSelect); else//check case { if (Ischeck_treeview(htrv_test, hItemSelect))check_treeview(htrv_test, hItemSelect, TRV_STATE_CHECK); else check_treeview(htrv_test, hItemSelect, TRV_STATE_UNCHECK); } } } break; case WM_CONTEXTMENU://popup menu if ((HWND)wParam == htrv_test) { //select trv item TV_HITTESTINFO tvh_info; tvh_info.pt.x = LOWORD(lParam); tvh_info.pt.y = HIWORD(lParam); ScreenToClient(htrv_test, &(tvh_info.pt)); HTREEITEM hItemSelect = TreeView_HitTest(htrv_test, &tvh_info); if (hItemSelect != 0)TreeView_SelectItem(htrv_test,hItemSelect); //popup HMENU hmenu; if ((hmenu = LoadMenu(hinst, MAKEINTRESOURCE(POPUP_TRV_TEST)))!= NULL) { //set text !!! ModifyMenu(hmenu,POPUP_TRV_CHECK_ALL ,MF_BYCOMMAND|MF_STRING ,POPUP_TRV_CHECK_ALL ,cps[TXT_POPUP_CHECK_ALL].c); ModifyMenu(hmenu,POPUP_TRV_UNCHECK_ALL ,MF_BYCOMMAND|MF_STRING ,POPUP_TRV_UNCHECK_ALL ,cps[TXT_POPUP_UNCHECK_ALL].c); HTREEITEM item = (HTREEITEM)SendMessage(htrv_test,TVM_GETNEXTITEM,(WPARAM)TVGN_CARET, (LPARAM)0); BOOL check = Ischeck_treeview(htrv_test, item); if (start_scan && (item!=NULL) && check && (h_thread_test[GetTrvItemIndex(item, htrv_test)]!=NULL)) { ModifyMenu(hmenu,POPUP_TRV_STOP_TEST ,MF_BYCOMMAND|MF_STRING ,POPUP_TRV_STOP_TEST ,cps[TXT_POPUP_STOP_TEST].c); }else { RemoveMenu(hmenu,POPUP_TRV_STOP_TEST,MF_BYCOMMAND); RemoveMenu(GetSubMenu(hmenu, 0),2,MF_BYPOSITION); } //affichage du popup menu POINT pos; if (GetCursorPos(&pos)!=0) { TrackPopupMenuEx(GetSubMenu(hmenu, 0), 0, pos.x, pos.y,hwnd, NULL); }else TrackPopupMenuEx(GetSubMenu(hmenu, 0), 0, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam),hwnd, NULL); DestroyMenu(hmenu); } }else if ((HWND)wParam == htrv_files) { //select trv item TV_HITTESTINFO tvh_info; tvh_info.pt.x = LOWORD(lParam); tvh_info.pt.y = HIWORD(lParam); ScreenToClient(htrv_files, &(tvh_info.pt)); HTREEITEM hItemSelect = TreeView_HitTest(htrv_files, &tvh_info); if (hItemSelect != NULL)TreeView_SelectItem(htrv_files,hItemSelect); //popup HMENU hmenu; if ((hmenu = LoadMenu(hinst, MAKEINTRESOURCE(POPUP_TRV_FILES)))!= NULL) { //set text !!! ModifyMenu(hmenu,POPUP_TRV_FILES_ADD_FILE ,MF_BYCOMMAND|MF_STRING ,POPUP_TRV_FILES_ADD_FILE ,cps[TXT_POPUP_ADD_FILE].c); ModifyMenu(hmenu,POPUP_TRV_FILES_ADD_PATH ,MF_BYCOMMAND|MF_STRING ,POPUP_TRV_FILES_ADD_PATH ,cps[TXT_POPUP_ADD_PATH].c); if (B_AUTOSEARCH) { RemoveMenu(hmenu,POPUP_TRV_FILES_AUTO_SEARCH_PATH ,MF_BYCOMMAND); ModifyMenu(hmenu,POPUP_TRV_FILES_AUTO_SEARCH ,MF_BYCOMMAND|MF_STRING ,POPUP_TRV_FILES_AUTO_SEARCH ,cps[TXT_POPUP_AUTO_SEARCH_STOP].c); }else { ModifyMenu(hmenu,POPUP_TRV_FILES_AUTO_SEARCH ,MF_BYCOMMAND|MF_STRING ,POPUP_TRV_FILES_AUTO_SEARCH ,cps[TXT_POPUP_AUTO_SEARCH].c); ModifyMenu(hmenu,POPUP_TRV_FILES_AUTO_SEARCH_PATH ,MF_BYCOMMAND|MF_STRING ,POPUP_TRV_FILES_AUTO_SEARCH_PATH ,cps[TXT_POPUP_AUTO_SEARCH_PATH].c); } if (SendMessage(htrv_files,TVM_GETCOUNT,(WPARAM)0,(LPARAM)0) > 4) { ModifyMenu(hmenu,POPUP_TRV_FILES_UP ,MF_BYCOMMAND|MF_STRING ,POPUP_TRV_FILES_UP ,cps[TXT_POPUP_UP].c); ModifyMenu(hmenu,POPUP_TRV_FILES_DOWN ,MF_BYCOMMAND|MF_STRING ,POPUP_TRV_FILES_DOWN ,cps[TXT_POPUP_DOWN].c); ModifyMenu(hmenu,POPUP_TRV_FILES_REMOVE_ITEMS ,MF_BYCOMMAND|MF_STRING ,POPUP_TRV_FILES_REMOVE_ITEMS ,cps[TXT_POPUP_REMOVE_ITEMS].c); ModifyMenu(hmenu,POPUP_TRV_FILES_CLEAN_ALL ,MF_BYCOMMAND|MF_STRING ,POPUP_TRV_FILES_CLEAN_ALL ,cps[TXT_POPUP_CLEAN_ALL].c); ModifyMenu(hmenu,POPUP_TRV_FILES_OPEN_PATH ,MF_BYCOMMAND|MF_STRING ,POPUP_TRV_FILES_OPEN_PATH ,cps[TXT_POPUP_OPEN_PATH].c); ModifyMenu(hmenu,POPUP_TRV_FILES_SAVE_LIST ,MF_BYCOMMAND|MF_STRING ,POPUP_TRV_FILES_SAVE_LIST ,cps[TXT_POPUP_SAVE_LIST].c); }else { RemoveMenu(GetSubMenu(hmenu,0),2 ,MF_BYPOSITION); RemoveMenu(hmenu,POPUP_TRV_FILES_UP ,MF_BYCOMMAND); RemoveMenu(hmenu,POPUP_TRV_FILES_DOWN ,MF_BYCOMMAND); RemoveMenu(hmenu,POPUP_TRV_FILES_REMOVE_ITEMS ,MF_BYCOMMAND); RemoveMenu(hmenu,POPUP_TRV_FILES_CLEAN_ALL ,MF_BYCOMMAND); RemoveMenu(hmenu,POPUP_TRV_FILES_OPEN_PATH ,MF_BYCOMMAND); RemoveMenu(hmenu,POPUP_TRV_FILES_SAVE_LIST ,MF_BYCOMMAND); } //affichage du popup menu POINT pos; if (GetCursorPos(&pos)!=0) { TrackPopupMenuEx(GetSubMenu(hmenu, 0), 0, pos.x, pos.y,hwnd, NULL); }else TrackPopupMenuEx(GetSubMenu(hmenu, 0), 0, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam),hwnd, NULL); DestroyMenu(hmenu); } } break; case WM_DROPFILES://gestion du drag and drop de fichier ^^ { if (B_AUTOSEARCH)break; HDROP H_DropInfo=(HDROP)wParam; char tmp[MAX_PATH]; DWORD i,nb_path = DragQueryFile(H_DropInfo, 0xFFFFFFFF, tmp, MAX_PATH); for (i=0;i<nb_path;i++) { //get data DragQueryFile(H_DropInfo, i, tmp, MAX_PATH); //add FileToTreeView(tmp); } DragFinish(H_DropInfo); //tri and clean CleanTreeViewFiles(htrv_files); //expend des branches SendMessage(htrv_files,TVM_EXPAND, TVE_EXPAND,(LPARAM)TRV_HTREEITEM_CONF[FILES_TITLE_FILES]); SendMessage(htrv_files,TVM_EXPAND, TVE_EXPAND,(LPARAM)TRV_HTREEITEM_CONF[FILES_TITLE_LOGS]); SendMessage(htrv_files,TVM_EXPAND, TVE_EXPAND,(LPARAM)TRV_HTREEITEM_CONF[FILES_TITLE_REGISTRY]); SendMessage(htrv_files,TVM_EXPAND, TVE_EXPAND,(LPARAM)TRV_HTREEITEM_CONF[FILES_TITLE_APPLI]); } break; case WM_INITDIALOG: //add language correction SetWindowText(GetDlgItem(hwnd,BT_ACL_FILE_CHK),cps[TXT_CHECK_ACL].c); SetWindowText(GetDlgItem(hwnd,BT_SHA_FILE_CHK),cps[TXT_CHECK_SHA].c); SetWindowText(GetDlgItem(hwnd,BT_ADS_FILE_CHK),cps[TXT_CHECK_ADS].c); SetWindowText(GetDlgItem(hwnd,BT_START),cps[TXT_BT_START].c); SetWindowText(GetDlgItem(hwnd,GRP_CONF),cps[TXT_GRP_CONF].c); //check all tests CheckDlgButton(hwnd,BT_ACL_FILE_CHK,BST_CHECKED); CheckDlgButton(hwnd,BT_ADS_FILE_CHK,BST_CHECKED); CheckDlgButton(hwnd,BT_UTC_CHK,BST_CHECKED); //add icon SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(GetModuleHandle(0), MAKEINTRESOURCE(ICON_APP))); //add files owners htrv_files = GetDlgItem(hwnd,TRV_FILES); SendMessage(htrv_files,CBEM_SETIMAGELIST,0,(LPARAM)H_ImagList_icon); TRV_HTREEITEM_CONF[FILES_TITLE_LOGS] = AddItemTreeView(htrv_files,cps[TXT_FILE_AUDIT].c, TVI_ROOT); TRV_HTREEITEM_CONF[FILES_TITLE_FILES] = AddItemTreeView(htrv_files,cps[TXT_FILE_REP].c, TVI_ROOT); TRV_HTREEITEM_CONF[FILES_TITLE_REGISTRY] = AddItemTreeView(htrv_files,cps[TXT_FILE_REGISTRY].c, TVI_ROOT); TRV_HTREEITEM_CONF[FILES_TITLE_APPLI] = AddItemTreeView(htrv_files,cps[TXT_FILE_APPLI].c, TVI_ROOT); //add list of test //get all tests in list of rubriques htrv_test = GetDlgItem(hwnd,TRV_TEST); unsigned int i; NB_TESTS = SendMessage(hlstbox, LB_GETCOUNT,0,0); char tmp[DEFAULT_TMP_SIZE]; for (i=0;i<NB_TESTS;i++) { if (SendMessage(hlstbox, LB_GETTEXTLEN,i,0) < DEFAULT_TMP_SIZE) { tmp[0] = 0; if(SendMessage(hlstbox, LB_GETTEXT,i,(LPARAM)tmp) > 0) { //add item H_tests[i] = AddItemTreeView(htrv_test,tmp, TVI_ROOT); } } } break; case WM_SIZE: { unsigned int mWidth = LOWORD(lParam); unsigned int mHeight = HIWORD(lParam); //controle de la taille minimum if ((mWidth<800) || (mHeight<600)) { RECT Rect; GetWindowRect(hwnd, &Rect); MoveWindow(hwnd,Rect.left,Rect.top,800+20,600+64,TRUE); }else { MoveWindow(GetDlgItem(hwnd,TRV_FILES),0,0,mWidth/2,mHeight-27,TRUE); MoveWindow(GetDlgItem(hwnd,TRV_TEST),mWidth/2+2,0,(mWidth/2)-2,mHeight-167,TRUE); MoveWindow(GetDlgItem(hwnd,GRP_CONF),mWidth/2+2,mHeight-165,(mWidth/2)-2,98,TRUE); MoveWindow(GetDlgItem(hwnd,BT_ACL_FILE_CHK),mWidth/2+20,mHeight-148,(mWidth/2)-40,17,TRUE); MoveWindow(GetDlgItem(hwnd,BT_ADS_FILE_CHK),mWidth/2+20,mHeight-128,(mWidth/2)-40,17,TRUE); MoveWindow(GetDlgItem(hwnd,BT_SHA_FILE_CHK),mWidth/2+20,mHeight-108,(mWidth/2)-40,17,TRUE); MoveWindow(GetDlgItem(hwnd,BT_UTC_CHK),mWidth/2+20,mHeight-88,(mWidth/4)-40,17,TRUE); MoveWindow(GetDlgItem(hwnd,BT_RA_CHK),mWidth*3/4+20,mHeight-108,(mWidth*1/4)-40,17,TRUE); MoveWindow(GetDlgItem(hwnd,BT_MAGIC_CHK),mWidth*3/4+20,mHeight-88,(mWidth*1/4)-40,17,TRUE); MoveWindow(GetDlgItem(hwnd,BT_START),mWidth/2+2,mHeight-64,(mWidth/2)-2,38,TRUE); MoveWindow(GetDlgItem(hwnd,DLG_CONF_SB),0,mHeight-25,mWidth,25,TRUE); } InvalidateRect(hwnd, NULL, TRUE); } break; case WM_CLOSE: { //if in stop case if ((start_scan == FALSE) && (stop_scan == TRUE)) { sqlite3_close(db_scan); CloseWindow(hwnd); PostQuitMessage(0); } //kill all threads unsigned int i; DWORD IDThread; for (i=0;i<NB_TESTS;i++) { GetExitCodeThread(h_thread_test[i],&IDThread); TerminateThread(h_thread_test[i],IDThread); } GetExitCodeThread(h_thread_scan,&IDThread); TerminateThread(h_thread_scan,IDThread); ShowWindow (h_main, SW_SHOW); UpdateWindow(h_main); EndDialog(hwnd, 0); } break; } return 0; }
LRESULT APIENTRY CWinLog::localWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) { CWinLog* pThis = ( CWinLog * ) GetWindowLong( hwnd, GWL_USERDATA ); switch( message ) { case WM_USERSENDMESSAGE : { CSyncLock lock( &( pThis->m_CriticalSection ) ); if( !pThis->m_CurrMessage.empty( ) ) { std::string tmpString; TVINSERTSTRUCT MainItem; TVITEM &item = MainItem.item; std::string::size_type k, i; for( i=0 ; i < pThis->m_CurrMessage.size() ; i++ ) { tmpString = pThis->m_CurrMessage[ i ]; // Remove control code from string while( 1 ) { k = tmpString.find( '\n' ); if( k == tmpString.npos ) break; tmpString.replace( k, 2, " " ); } if( TreeView_GetCount( pThis->m_hEdit ) >= pThis->m_lMaxLines ) TreeView_DeleteItem( pThis->m_hEdit, TreeView_GetRoot( pThis->m_hEdit ) ); item.mask = TVIF_TEXT; item.hItem = NULL; item.cChildren = item.lParam = item.iImage = item.state = 0; item.pszText = ( LPTSTR )tmpString.c_str( ); item.cchTextMax = tmpString.length( ); item.stateMask = ( UINT )-1; MainItem.hInsertAfter = TVI_LAST; MainItem.hParent = NULL; TreeView_InsertItem( pThis->m_hEdit, &MainItem ); } pThis->m_CurrMessage.clear(); } break; } case WM_SETFOCUS: if( pThis != NULL ) SetFocus( ( HWND )pThis->m_hEdit ); return 0; case WM_SIZE: if( pThis != NULL ) MoveWindow( ( HWND )pThis->m_hEdit, 0, 0, LOWORD( lParam ), HIWORD( lParam ), TRUE); return 0; case WM_DESTROY: return 0; case WM_CLOSE: ExitThread(0); default: return DefWindowProc( hwnd, message, wParam, lParam ); } return NULL; }
UINT TreeView::GetCount() { return TreeView_GetCount(m_hWindow); }
static INT_PTR CALLBACK TemplateDlg(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { static HWND hTreeCtrl; static HWND hOkBtn; static HWND hEditBtn; static HWND hInsertBtn; static HWND hRemoveMarkerBtn; static int LDX, LDY, BDX; static LPARAM param; if(WM_INITDIALOG == uMsg) { RECT rcWR, rcCR; POINT pt; EDITINFO ei; param = lParam; GetClientRect(hWndDlg,&rcWR); hTreeCtrl = GetDlgItem(hWndDlg,IDC_TREE); hOkBtn = GetDlgItem(hWndDlg,IDOK); hEditBtn = GetDlgItem(hWndDlg,IDC_EDIT); hInsertBtn = GetDlgItem(hWndDlg,IDC_INSERT); hRemoveMarkerBtn = GetDlgItem(hWndDlg, IDC_REMMARKER); GetWindowRect(hTreeCtrl,&rcCR); pt.x = rcCR.right; pt.y = rcCR.bottom; ScreenToClient(hWndDlg,&pt); LDX = rcWR.right - pt.x; LDY = rcWR.bottom - pt.y; GetWindowRect(hOkBtn,&rcCR); pt.x=rcCR.left; pt.y=0; ScreenToClient(hWndDlg,&pt); BDX = rcWR.right - pt.x; { TVINSERTSTRUCTW tvi; HTREEITEM hEmpty; WCHAR szRoot[MAX_PATH]; SHFILEINFOW sfi; HIMAGELIST hList = (HIMAGELIST)SHGetFileInfoW(g_szAkelPath,0,&sfi,sizeof(sfi),SHGFI_SYSICONINDEX|SHGFI_SMALLICON); TreeView_SetImageList(hTreeCtrl,hList,TVSIL_NORMAL); lstrcpyW(szRoot,g_szAkelPath); lstrcatW(szRoot,TEMPLATES_PATH); FillTreeCtrl(hTreeCtrl,szRoot,TVI_ROOT); TreeView_SortChildren(hTreeCtrl,TVI_ROOT,FALSE); tvi.hParent = TVI_ROOT; tvi.hInsertAfter = TVI_FIRST; tvi.item.pszText = L"<Empty>"; tvi.item.lParam = TVNT_EMPTY; tvi.item.iImage = tvi.item.iSelectedImage = 3; tvi.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE; hEmpty = TreeView_InsertItem(hTreeCtrl,&tvi); if(TreeView_GetCount(hTreeCtrl)>0) { TreeView_SelectItem(hTreeCtrl,hEmpty); EnableWindow(hOkBtn,TRUE); } else { EnableWindow(hOkBtn,FALSE); } } if(!(lParam&DCP_ALLOWEDIT)) { DestroyWindow(hEditBtn); hEditBtn = NULL; } if(SendMessageW(g_hMainWnd,AKD_GETEDITINFO,(WPARAM)NULL,(LPARAM)&ei)) { if(!IsWindow(ei.hWndEdit) || (!(lParam&DCP_ALLOWINSERT))) { DestroyWindow(hInsertBtn); hInsertBtn = NULL; } } SendMessageW(hRemoveMarkerBtn, BM_SETCHECK,g_bRemoveMarker?BST_CHECKED:BST_UNCHECKED,0); PostMessageW(hWndDlg,WM_COMMAND,MAKEWPARAM(IDC_TREE,LBN_SELCHANGE),0); RestorePosition(hWndDlg); #ifndef NO_SMALL_ICON SendMessageW(hWndDlg, WM_SETICON,(WPARAM)ICON_SMALL,(LPARAM)g_hMainIcon); #endif SendMessageW(hWndDlg, WM_SETICON,(WPARAM)ICON_BIG,(LPARAM)g_hMainIcon); return TRUE; } else if(WM_COMMAND == uMsg) { if(((LOWORD(wParam) == IDOK) || (LOWORD(wParam) == IDC_EDIT) || (LOWORD(wParam) == IDC_INSERT)) && (HIWORD(wParam) == BN_CLICKED)) { HTREEITEM hItem = TreeView_GetSelection(hTreeCtrl); TVITEM item; INT_PTR len = 0; if(!hItem) return TRUE; item.hItem = hItem; item.lParam = 0; item.mask = TVIF_PARAM; if(!TreeView_GetItem(hTreeCtrl,&item)) return TRUE; if(item.lParam==TVNT_DIR) return TRUE; lstrcpyW(g_szTemplate,g_szAkelPath); lstrcatW(g_szTemplate,TEMPLATES_PATH); lstrcatW(g_szTemplate,L"\\"); g_bRemoveMarker = (SendMessageW(hRemoveMarkerBtn, BM_GETCHECK, 0, 0)==BST_CHECKED)?TRUE:FALSE; UpdateSettings(TSF_REMOVEMARKER,FALSE); len = lstrlenW(g_szTemplate); if(RebuildPath(hTreeCtrl, hItem, g_szTemplate+len)) { if(lstrlenW(g_szTemplate) == len) { //! Opening empty template g_szTemplate[0] = 0; } EndDialog(hWndDlg,LOWORD(wParam)); } else { g_szTemplate[0]=0; } return TRUE; } else if((LOWORD(wParam)==IDCANCEL) && (HIWORD(wParam) == BN_CLICKED)) { EndDialog(hWndDlg,IDCANCEL); return TRUE; } } else if(WM_NOTIFY == uMsg) { if(IDC_TREE == wParam) { if(((LPNMHDR)lParam)->code == TVN_SELCHANGED) { LPNMTREEVIEWW ptv = (LPNMTREEVIEWW)lParam; if(ptv->itemNew.hItem && (ptv->itemNew.mask&TVIF_PARAM)) { if(hOkBtn) { EnableWindow(hOkBtn, (ptv->itemNew.lParam != TVNT_DIR)); } if(hEditBtn) { EnableWindow(hEditBtn, ptv->itemNew.lParam == TVNT_FILE); } if(hInsertBtn) { EnableWindow(hInsertBtn, ptv->itemNew.lParam == TVNT_FILE); } } return TRUE; } else if(((LPNMHDR)lParam)->code == NM_DBLCLK) { DWORD pos = GetMessagePos(); TVHITTESTINFO thi; HTREEITEM hit=0; thi.pt.x = GET_X_LPARAM(pos); thi.pt.y = GET_Y_LPARAM(pos); ScreenToClient(hTreeCtrl,&thi.pt); thi.hItem =0; thi.flags =0; hit = TreeView_HitTest(hTreeCtrl,&thi); if(thi.hItem) { TVITEM item; item.hItem = thi.hItem; item.mask = TVIF_PARAM; TreeView_GetItem(hTreeCtrl,&item); if(hOkBtn) { EnableWindow(hOkBtn, item.lParam != TVNT_DIR); } if(hEditBtn) { EnableWindow(hEditBtn, item.lParam == TVNT_FILE); } if(hInsertBtn) { EnableWindow(hInsertBtn, item.lParam != TVNT_DIR); } if(item.lParam != TVNT_DIR) PostMessageW(hWndDlg,WM_COMMAND,MAKEWPARAM(IDOK,BN_CLICKED),0); } return TRUE; } } } else if(WM_CLOSE == uMsg) { PostMessageW(hWndDlg,WM_COMMAND,MAKEWPARAM(IDCANCEL,BN_CLICKED),0); return TRUE; } else if(WM_DESTROY == uMsg) { SavePosition(hWndDlg); } else if(WM_SIZE == uMsg) { RECT rcWindow, rcNew; POINT pt; GetClientRect(hWndDlg,&rcWindow); GetWindowRect(hTreeCtrl,&rcNew); pt.x = rcNew.left; pt.y = rcNew.top; ScreenToClient(hWndDlg,&pt); MoveWindow(hTreeCtrl,pt.x,pt.y,rcWindow.right-LDX-pt.x, rcWindow.bottom-LDY-pt.y,TRUE); MoveButton(hWndDlg,hOkBtn,rcWindow, BDX); MoveButton(hWndDlg,GetDlgItem(hWndDlg,IDCANCEL),rcWindow, BDX); MoveButton(hWndDlg,hEditBtn,rcWindow, BDX); MoveButton(hWndDlg,hInsertBtn,rcWindow, BDX); MoveButton(hWndDlg,hRemoveMarkerBtn,rcWindow,BDX); InvalidateRect(hWndDlg,NULL,TRUE); } else if(WM_PAINT == uMsg) { RECT rc; PAINTSTRUCT ps; HDC dc = BeginPaint(hWndDlg, &ps); if(dc) { GetClientRect(hWndDlg, &rc); rc.left = rc.right - GetSystemMetrics(SM_CXVSCROLL); rc.top = rc.bottom - GetSystemMetrics(SM_CYVSCROLL); DrawFrameControl(dc, &rc, DFC_SCROLL, DFCS_SCROLLSIZEGRIP); EndPaint(hWndDlg, &ps); } } return FALSE; }
UINT GetNodeCount(void) { return TreeView_GetCount(m_hWnd); }
INT_PTR CALLBACK CFileGroups::DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { // OutputDebugString("%s(%08X, %s, %08X, %08X)", __FUNCTION__, hwndDlg, // GetMessageName(uMsg), wParam, lParam); static filegroups_t *pfile_groups(0); static HWND hwndTVCtrl, hwndEditCtrl; OPENFILENAME ofn; TVINSERTSTRUCT tvis; TVITEMEX tvi; HTREEITEM hti, hParent, hGroup, hChild, hSel; char text[MAX_PATH], drive[_MAX_DRIVE], dir[_MAX_DIR], path[QMAXPATH], ext[_MAX_EXT]; BOOL hasSelection; switch (uMsg) { case WM_INITDIALOG: { _ASSERTE(lParam != 0); if (lParam == 0) { EndDialog(hwndDlg, IDCANCEL); return FALSE; } pfile_groups = reinterpret_cast<filegroups_t *>(lParam); hwndTVCtrl = GetDlgItem(hwndDlg, IDC_GROUPVWR); _ASSERTE(hwndTVCtrl != 0); if (hwndTVCtrl == NULL) { EndDialog(hwndDlg, IDCANCEL); return FALSE; } hwndEditCtrl = NULL; for (filegroups_t::const_iterator i = pfile_groups->begin(); i != pfile_groups->end(); ++i) { tvis.hParent = TVI_ROOT; tvis.hInsertAfter = TVI_SORT; tvis.itemex.mask = TVIF_STATE | TVIF_TEXT; tvis.itemex.state = 0; //TVIS_EXPANDED; tvis.itemex.stateMask = 0; tvis.itemex.pszText = const_cast<LPTSTR>(i->first.c_str()); hParent = TreeView_InsertItem(hwndTVCtrl, &tvis); _ASSERTE(hParent != NULL); if (hParent == NULL) continue; for (filegroups_t::mapped_type::const_iterator j = i->second.begin(); j != i->second.end(); ++j) { tvis.hParent = hParent; tvis.hInsertAfter = TVI_SORT; tvis.itemex.mask = TVIF_TEXT; tvis.itemex.pszText = const_cast<LPTSTR>(j->c_str()); hti = TreeView_InsertItem(hwndTVCtrl, &tvis); _ASSERTE(hti != NULL); } EnableDlgItem(hwndDlg, IDADD, TreeView_GetCount(hwndTVCtrl) > 0); EnableDlgItem(hwndDlg, IDREMOVE, TreeView_GetSelection(hwndTVCtrl) != 0); } static const tooltip_item_t tooltips[] = { IDC_GROUPVWR, "You can edit group names or filenames inplace by left clicking or pressing F2 on selected item", }; HWND hwndTT(CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, NULL, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP | TTS_BALLOON, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hwndDlg, NULL, hInstance, NULL)); SetWindowPos(hwndTT, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); SendMessage(hwndTT, TTM_SETMAXTIPWIDTH, 0, static_cast<LPARAM>(400)); SendMessage(hwndTT, TTM_SETDELAYTIME, static_cast<WPARAM>(TTDT_AUTOPOP), static_cast<LPARAM>(20000)); TOOLINFO tt; memset(&tt, 0, sizeof tt); tt.cbSize = sizeof tt; tt.uFlags = TTF_SUBCLASS | TTF_IDISHWND | TTF_TRANSPARENT; tt.hwnd = hwndDlg; tt.hinst = hInstance; for (UINT j = 0; j < qnumber(tooltips); ++j) { tt.uId = reinterpret_cast<UINT_PTR>(GetDlgItem(hwndDlg, tooltips[j].uID)); tt.lpszText = const_cast<LPTSTR>(tooltips[j].lpText); SendMessage(hwndTT, TTM_ADDTOOL, 0, reinterpret_cast<LPARAM>(&tt)); } return TRUE; } case WM_CLOSE: EndDialog(hwndDlg, LOWORD(wParam)); return TRUE; case WM_COMMAND: //if (hwndEditCtrl != NULL) return FALSE; switch (HIWORD(wParam)) { case BN_CLICKED: switch (LOWORD(wParam)) { case IDOK: if (hwndEditCtrl != NULL) { TreeView_EndEditLabelNow(hwndTVCtrl, FALSE); SetWindowLong(hwndDlg, DWL_MSGRESULT, TRUE); return TRUE; } _ASSERTE(pfile_groups != 0); pfile_groups->clear(); for (hGroup = TreeView_GetRoot(hwndTVCtrl); hGroup != NULL; hGroup = TreeView_GetNextSibling(hwndTVCtrl, hGroup)) { tvi.mask = TVIF_HANDLE | TVIF_TEXT; tvi.hItem = hGroup; tvi.pszText = text; tvi.cchTextMax = sizeof text; if (TreeView_GetItem(hwndTVCtrl, &tvi)) { filegroups_t::iterator i(pfile_groups->insert(pfile_groups->begin(), filegroups_t::value_type(text, filegroups_t::mapped_type()))); _ASSERTE(i != pfile_groups->end()); filegroups_t::mapped_type * pcurrentset(i != pfile_groups->end() ? &i->second : 0); if (pcurrentset != 0) for (hChild = TreeView_GetChild(hwndTVCtrl, hGroup); hChild != NULL; hChild = TreeView_GetNextSibling(hwndTVCtrl, hChild)) { tvi.mask = TVIF_HANDLE | TVIF_TEXT; tvi.hItem = hChild; tvi.pszText = text; tvi.cchTextMax = sizeof text; if (TreeView_GetItem(hwndTVCtrl, &tvi)) { /*if (qfileexist(text)) */pcurrentset->insert(text); } #ifdef _DEBUG else _RPTF3(_CRT_ERROR, "%s(%08X, WM_COMMAND, ...): TreeView_GetItem(%08X, ...) returned NULL\n", __FUNCTION__, hwndDlg, hwndTVCtrl); #endif // _DEBUG } } #ifdef _DEBUG else _RPTF3(_CRT_ERROR, "%s(%08X, WM_COMMAND, ...): TreeView_GetItem(%08X, ...) returned NULL\n", __FUNCTION__, hwndDlg, hwndTVCtrl); #endif // _DEBUG } case IDCANCEL: if (hwndEditCtrl != NULL) TreeView_EndEditLabelNow(hwndTVCtrl, TRUE); else EndDialog(hwndDlg, LOWORD(wParam)); SetWindowLong(hwndDlg, DWL_MSGRESULT, 0); return TRUE; case IDADD: { hSel = TreeView_GetSelection(hwndTVCtrl); if (hSel == NULL) hSel = TreeView_GetRoot(hwndTVCtrl); if (hSel != NULL) { hGroup = TreeView_GetParent(hwndTVCtrl, hSel); if (hGroup == NULL) hGroup = hSel; memset(&ofn, 0, sizeof ofn); ofn.lStructSize = sizeof ofn; ofn.hInstance = hInstance; ofn.hwndOwner = hwndDlg; ofn.lpstrTitle = CFileGroups::lpstrTitle; boost::scoped_array<char> FileName(new char[0x10000]); if (!FileName) { _RPTF2(_CRT_ERROR, "%s(...): failed to allocate new string of size 0x%X\n", __FUNCTION__, 0x10000); SetWindowLong(hwndDlg, DWL_MSGRESULT, 0); throw std::bad_alloc(); //break; } FileName[0] = 0; ofn.lpstrFile = FileName.get(); ofn.nMaxFile = 0x10000; ofn.Flags = OFN_ENABLESIZING | OFN_EXPLORER | OFN_FORCESHOWHIDDEN | OFN_LONGNAMES | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT; ofn.lpstrFilter = CFileGroups::lpstrFilter; ofn.nFilterIndex = CFileGroups::nFilterIndex; ofn.lpstrDefExt = CFileGroups::lpstrDefExt; get_input_file_path(CPY(path)); _splitpath(path, drive, dir, 0, 0); _makepath(path, drive, dir, 0, 0); ofn.lpstrInitialDir = path; ofn.nMaxFile = 0x10000; if (GetOpenFileName(&ofn)) if (ofn.nFileOffset > strlen(ofn.lpstrFile)) while (*(ofn.lpstrFile + ofn.nFileOffset)) { AddFile(hwndTVCtrl, hGroup, _sprintf("%s\\%s", ofn.lpstrFile, ofn.lpstrFile + ofn.nFileOffset).c_str()); ofn.nFileOffset += strlen(ofn.lpstrFile + ofn.nFileOffset) + 1; } else AddFile(hwndTVCtrl, hGroup, ofn.lpstrFile); EnableDlgItem(hwndDlg, IDADD, TRUE); EnableDlgItem(hwndDlg, IDREMOVE, TreeView_GetSelection(hwndTVCtrl) != 0); } SetWindowLong(hwndDlg, DWL_MSGRESULT, 0); return TRUE; } case IDADDGROUP: { char *newgroup(askstr(HIST_IDENT, NULL, "New group name")); if (newgroup != 0 && strlen(newgroup) > 0) { if (strlen(newgroup) >= MAX_PATH) newgroup[MAX_PATH - 1] = 0; for (hGroup = TreeView_GetRoot(hwndTVCtrl); hGroup != NULL; hGroup = TreeView_GetNextSibling(hwndTVCtrl, hGroup)) { tvi.mask = TVIF_HANDLE | TVIF_TEXT; tvi.hItem = hGroup; tvi.pszText = text; tvi.cchTextMax = sizeof text; if (TreeView_GetItem(hwndTVCtrl, &tvi)) { if (strcmp(newgroup, text) == 0) { warning("Group with this name already exists"); SetWindowLong(hwndDlg, DWL_MSGRESULT, 0); return FALSE; } } #ifdef _DEBUG else _RPTF3(_CRT_ERROR, "%s(%08X, WM_COMMAND, ...): TreeView_GetItem(%08X, ...) returned NULL\n", __FUNCTION__, hwndDlg, hwndTVCtrl); #endif // _DEBUG } tvis.hParent = TVI_ROOT; tvis.hInsertAfter = TVI_SORT; tvis.itemex.mask = TVIF_STATE | TVIF_TEXT; tvis.itemex.state = TVIS_EXPANDED; tvis.itemex.stateMask = 0; tvis.itemex.pszText = newgroup; hti = TreeView_InsertItem(hwndTVCtrl, &tvis); _ASSERTE(hti != NULL); if (hti != NULL) { TreeView_SelectItem(hwndTVCtrl, hti); TreeView_Expand(hwndTVCtrl, hti, TVE_EXPAND); EnableDlgItem(hwndDlg, IDADD, TRUE); EnableDlgItem(hwndDlg, IDREMOVE, TRUE); } } SetWindowLong(hwndDlg, DWL_MSGRESULT, 0); return TRUE; } case IDREMOVE: if ((hSel = TreeView_GetSelection(hwndTVCtrl)) != NULL) { if ((hParent = TreeView_GetParent(hwndTVCtrl, hSel)) == NULL && TreeView_GetChild(hwndTVCtrl, hSel) != NULL) { // is group std::string msg("Are you sure to delete group '"); tvi.mask = TVIF_HANDLE | TVIF_TEXT; tvi.hItem = hSel; tvi.pszText = text; tvi.cchTextMax = sizeof text; if (TreeView_GetItem(hwndTVCtrl, &tvi)) msg.append(text); msg.append("' and all it's files?"); if (MessageBox(hwndDlg, msg.c_str(), "libnames matching", MB_ICONQUESTION | MB_YESNO | MB_DEFBUTTON1) == IDYES) TreeView_DeleteItem(hwndTVCtrl, hSel); } else // is file or group has no files - delete without confirmation TreeView_DeleteItem(hwndTVCtrl, hSel); if (TreeView_GetCount(hwndTVCtrl) <= 0) EnableDlgItem(hwndDlg, IDADD, FALSE); EnableDlgItem(hwndDlg, IDREMOVE, TreeView_GetSelection(hwndTVCtrl) != NULL); } SetWindowLong(hwndDlg, DWL_MSGRESULT, 0); return TRUE; } break; } break; case WM_NOTIFY: _ASSERTE(lParam != NULL); if (lParam != NULL) { // OutputDebugString("%s(%08X, WM_NOTIFY, ...): hwndFrom=%08X idFrom=%u code=0x%X", // __FUNCTION__, hwndDlg, reinterpret_cast<LPNMHDR>(lParam)->hwndFrom, reinterpret_cast<LPNMHDR>(lParam)->idFrom, // reinterpret_cast<LPNMHDR>(lParam)->code); switch (reinterpret_cast<LPNMHDR>(lParam)->idFrom) { case IDC_GROUPVWR: switch (reinterpret_cast<LPNMHDR>(lParam)->code) { case TVN_KEYDOWN: switch (reinterpret_cast<LPNMTVKEYDOWN>(lParam)->wVKey) { case VK_F2: if ((hSel = TreeView_GetSelection(hwndTVCtrl)) != NULL) TreeView_EditLabel(hwndTVCtrl, hSel); SetWindowLong(hwndDlg, DWL_MSGRESULT, TRUE); return TRUE; case VK_INSERT: SendMessage(hwndDlg, WM_COMMAND, (hSel = TreeView_GetSelection(hwndTVCtrl)) != NULL && TreeView_GetParent(hwndTVCtrl, hSel) != NULL ? MAKELONG(IDADD, BN_CLICKED) : MAKELONG(IDADDGROUP, BN_CLICKED), reinterpret_cast<LPARAM>(hwndTVCtrl)); SetWindowLong(hwndDlg, DWL_MSGRESULT, TRUE); return TRUE; case VK_DELETE: SendMessage(hwndDlg, WM_COMMAND, MAKELONG(IDREMOVE, BN_CLICKED), reinterpret_cast<LPARAM>(hwndTVCtrl)); SetWindowLong(hwndDlg, DWL_MSGRESULT, TRUE); return TRUE; } break; case TVN_BEGINLABELEDIT: { if ((hSel = TreeView_GetSelection(hwndTVCtrl)) != NULL && TreeView_GetParent(hwndTVCtrl, hSel) != NULL) { tvi.mask = TVIF_HANDLE | TVIF_TEXT; tvi.hItem = hSel; tvi.pszText = text; tvi.cchTextMax = sizeof text; if (TreeView_GetItem(hwndTVCtrl, &tvi)) { memset(&ofn, 0, sizeof ofn); ofn.lStructSize = sizeof ofn; ofn.lpstrFile = text; ofn.nMaxFile = sizeof text; _splitpath(text, drive, dir, 0, ext); _makepath(path, drive, dir, 0, 0); ofn.lpstrInitialDir = path; ofn.hwndOwner = hwndDlg; ofn.hInstance = hInstance; ofn.Flags = OFN_ENABLESIZING | OFN_EXPLORER | OFN_FORCESHOWHIDDEN | OFN_LONGNAMES | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; ofn.lpstrTitle = "Change file's location"; ofn.lpstrFilter = "all files\0*.*\0"; ofn.nFilterIndex = 1; ofn.lpstrDefExt = ext; if (GetOpenFileName(&ofn)) { tvi.mask = TVIF_HANDLE | TVIF_TEXT; TreeView_SetItem(hwndTVCtrl, &tvi); } SetWindowLong(hwndDlg, DWL_MSGRESULT, TRUE); return TRUE; } #ifdef _DEBUG else _RPTF2(_CRT_WARN, "%s(...): TreeView_GetItem(%08X, ...) returned NULL", __FUNCTION__, hwndTVCtrl); #endif // _DEBUG } hwndEditCtrl = TreeView_GetEditControl(hwndTVCtrl); _ASSERTE(hwndEditCtrl != NULL); SendMessage(hwndEditCtrl, EM_LIMITTEXT, MAX_PATH - 1, 0); SetWindowLong(hwndDlg, DWL_MSGRESULT, FALSE); return TRUE; } case TVN_ENDLABELEDIT: hwndEditCtrl = NULL; SetWindowLong(hwndDlg, DWL_MSGRESULT, reinterpret_cast<LPNMTVDISPINFO>(lParam)->item.pszText != NULL && strlen(reinterpret_cast<LPNMTVDISPINFO>(lParam)->item.pszText) > 0 && strlen(reinterpret_cast<LPNMTVDISPINFO>(lParam)->item.pszText) < MAX_PATH); return TRUE; case TVN_SELCHANGED: EnableDlgItem(hwndDlg, IDREMOVE, TreeView_GetSelection(hwndTVCtrl) != 0); return TRUE; //case WM_LBUTTONDBLCLCK: // break; } // switch code break; } // switch idFrom } // lParam != NULL break; } // main switch return 0; }
static BOOL CALLBACK GenMenuOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { struct OrderData *dat = (struct OrderData*)GetWindowLong(GetDlgItem(hwndDlg,IDC_MENUITEMS),GWL_USERDATA); switch (msg) { case WM_INITDIALOG: { TranslateDialogDefault(hwndDlg); dat=(struct OrderData*)mir_alloc(sizeof(struct OrderData)); SetWindowLong(GetDlgItem(hwndDlg,IDC_MENUITEMS),GWL_USERDATA,(LONG)dat); dat->dragging=0; MyOldWindowProc=(WNDPROC)GetWindowLong(GetDlgItem(hwndDlg,IDC_MENUITEMS),GWL_WNDPROC); SetWindowLong(GetDlgItem(hwndDlg,IDC_MENUITEMS),GWL_WNDPROC,(LONG)&LBTNDOWNProc); //SetWindowLong(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),GWL_STYLE,GetWindowLong(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),GWL_STYLE)|TVS_NOHSCROLL); { HIMAGELIST himlCheckBoxes; himlCheckBoxes=ImageList_Create(GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON),ILC_COLOR32|ILC_MASK,2,2); ImageList_AddIcon(himlCheckBoxes,LoadIcon(g_hInst,MAKEINTRESOURCE(IDI_NOTICK))); ImageList_AddIcon(himlCheckBoxes,LoadIcon(g_hInst,MAKEINTRESOURCE(IDI_TICK))); TreeView_SetImageList(GetDlgItem(hwndDlg,IDC_MENUOBJECTS),himlCheckBoxes,TVSIL_NORMAL); TreeView_SetImageList(GetDlgItem(hwndDlg,IDC_MENUITEMS),himlCheckBoxes,TVSIL_NORMAL); } BuildMenuObjectsTree(hwndDlg); // Tree // BuildTree(hwndDlg); // OptionsOpened=TRUE; // OptionshWnd=hwndDlg; return TRUE; } case WM_COMMAND: { if ((HIWORD(wParam)==BN_CLICKED|| HIWORD(wParam)==BN_DBLCLK)) { int ctrlid=LOWORD(wParam); if (ctrlid==IDC_INSERTSEPARATOR) { InsertSeparator(hwndDlg); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); } if (ctrlid==IDC_GENMENU_DEFAULT) { TVITEM tvi; HTREEITEM hti; char buf[256]; hti=TreeView_GetSelection(GetDlgItem(hwndDlg,IDC_MENUITEMS)); if (hti==NULL) break; tvi.mask=TVIF_HANDLE|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM; tvi.hItem=hti; TreeView_GetItem(GetDlgItem(hwndDlg,IDC_MENUITEMS),&tvi); if ( _tcsstr(((MenuItemOptData *)tvi.lParam)->name, _T("---------------------------------------------"))) break; ZeroMemory(buf,256); GetDlgItemTextA(hwndDlg,IDC_GENMENU_CUSTOMNAME,buf,256); if (((MenuItemOptData *)tvi.lParam)->name) { mir_free(((MenuItemOptData *)tvi.lParam)->name); } ((MenuItemOptData *)tvi.lParam)->name = mir_tstrdup( ((MenuItemOptData *)tvi.lParam)->defname ); SaveTree(hwndDlg); RebuildCurrent(hwndDlg); } if (ctrlid==IDC_GENMENU_SET) { TVITEM tvi; TCHAR buf[256]; HTREEITEM hti = TreeView_GetSelection( GetDlgItem( hwndDlg,IDC_MENUITEMS )); if ( hti == NULL ) break; tvi.mask = TVIF_HANDLE|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM; tvi.hItem = hti; SendDlgItemMessage(hwndDlg, IDC_MENUITEMS, TVM_GETITEM, 0, (LPARAM)&tvi); if ( _tcsstr(((MenuItemOptData *)tvi.lParam)->name, STR_SEPARATOR )) break; ZeroMemory(buf,sizeof( buf )); GetDlgItemText( hwndDlg, IDC_GENMENU_CUSTOMNAME, buf, SIZEOF( buf )); if (((MenuItemOptData *)tvi.lParam)->name) mir_free(((MenuItemOptData *)tvi.lParam)->name); ((MenuItemOptData *)tvi.lParam)->name = mir_tstrdup(buf); SaveTree(hwndDlg); RebuildCurrent(hwndDlg); } break; } if ((HIWORD(wParam)==STN_CLICKED|| HIWORD(wParam)==STN_DBLCLK)) { int ctrlid=LOWORD(wParam); } break; } case WM_NOTIFY: switch(((LPNMHDR)lParam)->idFrom ) { case 0: if (((LPNMHDR)lParam)->code == PSN_APPLY ) { SaveTree(hwndDlg); RebuildCurrent(hwndDlg); } break; case IDC_MENUOBJECTS: if (((LPNMHDR)lParam)->code == TVN_SELCHANGEDA ) { TVITEM tvi; HTREEITEM hti; hti=TreeView_GetSelection(GetDlgItem(hwndDlg,IDC_MENUOBJECTS)); if (hti==NULL) break; tvi.mask=TVIF_HANDLE|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM; tvi.hItem=hti; TreeView_GetItem(GetDlgItem(hwndDlg,IDC_MENUOBJECTS),&tvi); BuildTree(hwndDlg,(int)tvi.lParam); } break; case IDC_MENUITEMS: switch (((LPNMHDR)lParam)->code) { case NM_CUSTOMDRAW: { int i= handleCustomDraw(GetDlgItem(hwndDlg,IDC_MENUITEMS),(LPNMTVCUSTOMDRAW) lParam); SetWindowLong(hwndDlg, DWL_MSGRESULT, i); return TRUE; } case TVN_BEGINDRAGA: SetCapture(hwndDlg); dat->dragging=1; dat->hDragItem=((LPNMTREEVIEW)lParam)->itemNew.hItem; TreeView_SelectItem(GetDlgItem(hwndDlg,IDC_MENUITEMS),dat->hDragItem); //ShowWindow(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREEWARNING),SW_SHOW); break; case NM_CLICK: { TVHITTESTINFO hti; hti.pt.x=(short)LOWORD(GetMessagePos()); hti.pt.y=(short)HIWORD(GetMessagePos()); ScreenToClient(((LPNMHDR)lParam)->hwndFrom,&hti.pt); if (TreeView_HitTest(((LPNMHDR)lParam)->hwndFrom,&hti)) { if (hti.flags&TVHT_ONITEMICON) { TVITEM tvi; tvi.mask=TVIF_HANDLE|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM; tvi.hItem=hti.hItem; TreeView_GetItem(((LPNMHDR)lParam)->hwndFrom,&tvi); tvi.iImage=tvi.iSelectedImage=!tvi.iImage; ((MenuItemOptData *)tvi.lParam)->show=tvi.iImage; TreeView_SetItem(((LPNMHDR)lParam)->hwndFrom,&tvi); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); //all changes take effect in runtime //ShowWindow(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREEWARNING),SW_SHOW); } /*--------MultiSelection----------*/ if (hti.flags&TVHT_ONITEMLABEL) { /// LabelClicked Set/unset selection TVITEM tvi; HWND tvw=((LPNMHDR)lParam)->hwndFrom; tvi.mask=TVIF_HANDLE|TVIF_PARAM; tvi.hItem=hti.hItem; TreeView_GetItem(tvw,&tvi); if (GetKeyState(VK_CONTROL)&0x8000) { if (((MenuItemOptData *)tvi.lParam)->isSelected) ((MenuItemOptData *)tvi.lParam)->isSelected=0; else ((MenuItemOptData *)tvi.lParam)->isSelected=1; //current selection order++. TreeView_SetItem(tvw,&tvi); } else if (GetKeyState(VK_SHIFT)&0x8000) { ; // shifted click } else { // reset all selection except current HTREEITEM hit; hit=TreeView_GetRoot(tvw); if (hit) do { TVITEM tvi={0}; tvi.mask=TVIF_HANDLE|TVIF_PARAM; tvi.hItem=hit; TreeView_GetItem(tvw,&tvi); if (hti.hItem!=hit) ((MenuItemOptData *)tvi.lParam)->isSelected=0; else ((MenuItemOptData *)tvi.lParam)->isSelected=1; TreeView_SetItem(tvw,&tvi); } while (hit=TreeView_GetNextSibling(tvw,hit)); } } } break; } case TVN_SELCHANGING: { LPNMTREEVIEW pn; pn = (LPNMTREEVIEW) lParam; //((MenuItemOptData *)(pn->itemNew.lParam))->isSelected=1; /*if (pn->action==NotKeyPressed) { remove all selection } */ } case TVN_SELCHANGEDA: { TVITEM tvi; HTREEITEM hti; SetDlgItemTextA(hwndDlg,IDC_GENMENU_CUSTOMNAME,""); SetDlgItemTextA(hwndDlg,IDC_GENMENU_SERVICE,""); EnableWindow(GetDlgItem(hwndDlg,IDC_GENMENU_CUSTOMNAME),FALSE); EnableWindow(GetDlgItem(hwndDlg,IDC_GENMENU_DEFAULT),FALSE); EnableWindow(GetDlgItem(hwndDlg,IDC_GENMENU_SET),FALSE); hti=TreeView_GetSelection(GetDlgItem(hwndDlg,IDC_MENUITEMS)); if (hti==NULL) { EnableWindow(GetDlgItem(hwndDlg,IDC_GENMENU_CUSTOMNAME),FALSE); EnableWindow(GetDlgItem(hwndDlg,IDC_GENMENU_DEFAULT),FALSE); EnableWindow(GetDlgItem(hwndDlg,IDC_GENMENU_SET),FALSE); break; } tvi.mask=TVIF_HANDLE|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM; tvi.hItem=hti; TreeView_GetItem(GetDlgItem(hwndDlg,IDC_MENUITEMS),&tvi); if ( tvi.lParam == 0 ) break; if ( _tcsstr(((MenuItemOptData *)tvi.lParam)->name, STR_SEPARATOR )) break; SetDlgItemText(hwndDlg,IDC_GENMENU_CUSTOMNAME,((MenuItemOptData *)tvi.lParam)->name); SetDlgItemTextA(hwndDlg,IDC_GENMENU_SERVICE,(((MenuItemOptData *)tvi.lParam)->uniqname)?(((MenuItemOptData *)tvi.lParam)->uniqname):""); EnableWindow(GetDlgItem(hwndDlg,IDC_GENMENU_DEFAULT),TRUE); EnableWindow(GetDlgItem(hwndDlg,IDC_GENMENU_SET),TRUE); EnableWindow(GetDlgItem(hwndDlg,IDC_GENMENU_CUSTOMNAME),TRUE); break; } break; } } break; case WM_MOUSEMOVE: if (!dat||!dat->dragging) break; { TVHITTESTINFO hti; hti.pt.x=(short)LOWORD(lParam); hti.pt.y=(short)HIWORD(lParam); ClientToScreen(hwndDlg,&hti.pt); ScreenToClient(GetDlgItem(hwndDlg,IDC_MENUITEMS),&hti.pt); TreeView_HitTest(GetDlgItem(hwndDlg,IDC_MENUITEMS),&hti); if (hti.flags&(TVHT_ONITEM|TVHT_ONITEMRIGHT)) { HTREEITEM it = hti.hItem; hti.pt.y -= TreeView_GetItemHeight(GetDlgItem(hwndDlg,IDC_MENUITEMS))/2; TreeView_HitTest(GetDlgItem(hwndDlg,IDC_MENUITEMS),&hti); if (!(hti.flags&TVHT_ABOVE)) TreeView_SetInsertMark(GetDlgItem(hwndDlg,IDC_MENUITEMS),hti.hItem,1); else TreeView_SetInsertMark(GetDlgItem(hwndDlg,IDC_MENUITEMS),it,0); } else { if (hti.flags&TVHT_ABOVE) SendDlgItemMessage(hwndDlg,IDC_MENUITEMS,WM_VSCROLL,MAKEWPARAM(SB_LINEUP,0),0); if (hti.flags&TVHT_BELOW) SendDlgItemMessage(hwndDlg,IDC_MENUITEMS,WM_VSCROLL,MAKEWPARAM(SB_LINEDOWN,0),0); TreeView_SetInsertMark(GetDlgItem(hwndDlg,IDC_MENUITEMS),NULL,0); } } break; case WM_DESTROY: { struct OrderData* dat = (struct OrderData*)GetWindowLong( GetDlgItem(hwndDlg,IDC_MENUITEMS), GWL_USERDATA ); if ( dat ) mir_free( dat ); FreeTreeData( hwndDlg ); break; } case WM_LBUTTONUP: if (!dat->dragging) break; TreeView_SetInsertMark(GetDlgItem(hwndDlg,IDC_MENUITEMS),NULL,0); dat->dragging=0; ReleaseCapture(); { TVHITTESTINFO hti; hti.pt.x=(short)LOWORD(lParam); hti.pt.y=(short)HIWORD(lParam); ClientToScreen(hwndDlg,&hti.pt); ScreenToClient(GetDlgItem(hwndDlg,IDC_MENUITEMS),&hti.pt); hti.pt.y-=TreeView_GetItemHeight(GetDlgItem(hwndDlg,IDC_MENUITEMS))/2; TreeView_HitTest(GetDlgItem(hwndDlg,IDC_MENUITEMS),&hti); if (hti.flags&TVHT_ABOVE) hti.hItem=TVI_FIRST; if (dat->hDragItem==hti.hItem) break; dat->hDragItem=NULL; if (hti.flags&(TVHT_ONITEM|TVHT_ONITEMRIGHT)||(hti.hItem==TVI_FIRST)) { HWND tvw; HTREEITEM * pSIT; HTREEITEM FirstItem=NULL; UINT uITCnt,uSic ; tvw=GetDlgItem(hwndDlg,IDC_MENUITEMS); uITCnt=TreeView_GetCount(tvw); uSic=0; if (uITCnt) { pSIT=(HTREEITEM *)malloc(sizeof(HTREEITEM)*uITCnt); if (pSIT) { HTREEITEM hit; hit=TreeView_GetRoot(tvw); if (hit) do { TVITEM tvi={0}; tvi.mask=TVIF_HANDLE|TVIF_PARAM; tvi.hItem=hit; TreeView_GetItem(tvw,&tvi); if (((MenuItemOptData *)tvi.lParam)->isSelected) { pSIT[uSic]=tvi.hItem; uSic++; } }while (hit=TreeView_GetNextSibling(tvw,hit)); // Proceed moving { UINT i; HTREEITEM insertAfter; insertAfter=hti.hItem; for (i=0; i<uSic; i++) { if (insertAfter) insertAfter=MoveItemAbove(tvw,pSIT[i],insertAfter); else break; if (!i) FirstItem=insertAfter; } } // free pointers... free(pSIT); } } if (FirstItem) TreeView_SelectItem(tvw,FirstItem); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); SaveTree(hwndDlg); } } break; } return FALSE; }
static LRESULT CALLBACK ToolBar_OptDlgProc(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM lParam) { static HIMAGELIST himlButtonIcons=NULL; static BOOL dragging=FALSE; static HANDLE hDragItem=NULL; switch (msg) { case WM_DESTROY: ImageList_Destroy(himlButtonIcons); break; case WM_INITDIALOG: { HWND hTree=GetDlgItem(hwndDlg,IDC_BTNORDER); TranslateDialogDefault(hwndDlg); SetWindowLong(hTree,GWL_STYLE,GetWindowLong(hTree,GWL_STYLE)|TVS_NOHSCROLL); { himlButtonIcons=ImageList_Create(GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON),ILC_COLOR32|ILC_MASK,2,2); TreeView_SetImageList(hTree,himlButtonIcons,TVSIL_NORMAL); } TreeView_DeleteAllItems(hTree); tblock; qsort(tbdat.listOfButtons->items,tbdat.listOfButtons->realCount,sizeof(MTB_BUTTONINFO *),sttSortButtons); { int i=0; for (i=0; i<tbdat.listOfButtons->realCount; i++) { TVINSERTSTRUCT tvis={0}; HTREEITEM hti; MTB_BUTTONINFO * mtbi = (MTB_BUTTONINFO*) tbdat.listOfButtons->items[i]; TCHAR * szTempName=mir_a2t(mtbi->szButtonName); HICON hIcon = (HICON)CallService(MS_SKIN2_GETICONBYHANDLE, 0, (LPARAM)mtbi->hPrimaryIconHandle); int index = ImageList_AddIcon(himlButtonIcons, hIcon); CallService(MS_SKIN2_RELEASEICON, (WPARAM)hIcon, 0); tvis.hParent=NULL; tvis.hInsertAfter=TVI_LAST; tvis.item.mask=TVIF_PARAM|TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_STATE; tvis.item.lParam=(LPARAM)(mtbi); tvis.item.pszText=TranslateTS(szTempName); tvis.item.iImage=tvis.item.iSelectedImage=index; hti=TreeView_InsertItem(hTree,&tvis); TreeView_SetCheckState(hTree, hti, mtbi->bVisible ); mir_free(szTempName); } } tbunlock; SendDlgItemMessage(hwndDlg,IDC_SPIN_W,UDM_SETRANGE,0,MAKELONG(50,10)); SendDlgItemMessage(hwndDlg,IDC_SPIN_W,UDM_SETPOS,0,MAKELONG(ModernGetSettingByte(NULL, "ModernToolBar", "option_Bar0_BtnWidth", SETTINGS_BARBTNWIDTH_DEFAULT),0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_H,UDM_SETRANGE,0,MAKELONG(50,10)); SendDlgItemMessage(hwndDlg,IDC_SPIN_H,UDM_SETPOS,0,MAKELONG(ModernGetSettingByte(NULL, "ModernToolBar", "option_Bar0_BtnHeight", SETTINGS_BARBTNHEIGHT_DEFAULT),0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_S,UDM_SETRANGE,0,MAKELONG(20,0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_S,UDM_SETPOS,0,MAKELONG(ModernGetSettingByte(NULL, "ModernToolBar", "option_Bar0_BtnSpace", SETTINGS_BARBTNSPACE_DEFAULT),0)); CheckDlgButton(hwndDlg, IDC_CHECK_AUTOSIZE, ModernGetSettingByte(NULL, "ModernToolBar", "option_Bar0_Autosize", SETTINGS_BARAUTOSIZE_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_CHECK_MULTILINE, ModernGetSettingByte(NULL,"ModernToolBar", "option_Bar0_Multiline", SETTINGS_BARMULTILINE_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_TBSHOW, ModernGetSettingByte(NULL,"CLUI","ShowButtonBar",SETTINGS_SHOWBUTTONBAR_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); { int i; BOOL en=IsDlgButtonChecked(hwndDlg,IDC_TBSHOW); for (i=0; i<SIZEOF(ControlIDS); i++) EnableWindow(GetDlgItem(hwndDlg,ControlIDS[i]), en); } return TRUE; } case WM_NOTIFY: { switch(((LPNMHDR)lParam)->idFrom) { case 0: { switch (((LPNMHDR)lParam)->code) { case PSN_APPLY: { int order=100; HWND hTree=GetDlgItem(hwndDlg,IDC_BTNORDER); int count=TreeView_GetCount(hTree); HTREEITEM hItem; sttDeleteOrderSettings(); hItem=TreeView_GetRoot(hTree); do { TVITEM tvi={0}; MTB_BUTTONINFO *mtbi; tvi.mask=TBIF_LPARAM|TVIF_HANDLE; tvi.hItem=hItem; TreeView_GetItem(hTree, &tvi); mtbi=(MTB_BUTTONINFO *)tvi.lParam; if (mtbi) { char szTempSetting[200]; mir_snprintf(szTempSetting, SIZEOF(szTempSetting), "order_%s", mtbi->szButtonID); ModernWriteSettingDword(NULL, "ModernToolBar", szTempSetting, order); order+=10; mir_snprintf(szTempSetting, SIZEOF(szTempSetting), "visible_%s", mtbi->szButtonID); ModernWriteSettingByte(NULL, "ModernToolBar", szTempSetting, TreeView_GetCheckState(hTree,hItem)); } hItem=TreeView_GetNextSibling(hTree,hItem); } while (hItem!=NULL); ModernWriteSettingByte(NULL,"CLUI","ShowButtonBar",(BYTE)IsDlgButtonChecked(hwndDlg,IDC_TBSHOW)); ModernWriteSettingByte(NULL,"ModernToolBar","option_Bar0_BtnWidth", (BYTE)SendDlgItemMessage(hwndDlg,IDC_SPIN_W,UDM_GETPOS,0,0)); ModernWriteSettingByte(NULL,"ModernToolBar","option_Bar0_BtnHeight",(BYTE)SendDlgItemMessage(hwndDlg,IDC_SPIN_H,UDM_GETPOS,0,0)); ModernWriteSettingByte(NULL,"ModernToolBar","option_Bar0_BtnSpace", (BYTE)SendDlgItemMessage(hwndDlg,IDC_SPIN_S,UDM_GETPOS,0,0)); ModernWriteSettingByte(NULL, "ModernToolBar", "option_Bar0_Autosize", (BYTE)IsDlgButtonChecked(hwndDlg,IDC_CHECK_AUTOSIZE)); ModernWriteSettingByte(NULL,"ModernToolBar", "option_Bar0_Multiline", (BYTE)IsDlgButtonChecked(hwndDlg,IDC_CHECK_MULTILINE)); sttReloadButtons(); return TRUE; } } break; } case IDC_BTNORDER: { switch (((LPNMHDR)lParam)->code) { case TVN_BEGINDRAGA: case TVN_BEGINDRAGW: SetCapture(hwndDlg); dragging=TRUE; hDragItem=((LPNMTREEVIEWA)lParam)->itemNew.hItem; TreeView_SelectItem(GetDlgItem(hwndDlg,IDC_BTNORDER),hDragItem); break; case NM_CLICK: { TVHITTESTINFO hti; hti.pt.x=(short)LOWORD(GetMessagePos()); hti.pt.y=(short)HIWORD(GetMessagePos()); ScreenToClient(((LPNMHDR)lParam)->hwndFrom,&hti.pt); if(TreeView_HitTest(((LPNMHDR)lParam)->hwndFrom,&hti)) if(hti.flags&TVHT_ONITEMSTATEICON) SendMessage(GetParent(hwndDlg), PSM_CHANGED, (WPARAM)hwndDlg, 0); }; } break; } } break; } case WM_MOUSEMOVE: { if(!dragging) break; { TVHITTESTINFO hti; hti.pt.x=(short)LOWORD(lParam); hti.pt.y=(short)HIWORD(lParam); ClientToScreen(hwndDlg,&hti.pt); ScreenToClient(GetDlgItem(hwndDlg,IDC_BTNORDER),&hti.pt); TreeView_HitTest(GetDlgItem(hwndDlg,IDC_BTNORDER),&hti); if(hti.flags&(TVHT_ONITEM|TVHT_ONITEMRIGHT)) { HTREEITEM it=hti.hItem; hti.pt.y-=TreeView_GetItemHeight(GetDlgItem(hwndDlg,IDC_BTNORDER))/2; TreeView_HitTest(GetDlgItem(hwndDlg,IDC_BTNORDER),&hti); if (!(hti.flags&TVHT_ABOVE)) TreeView_SetInsertMark(GetDlgItem(hwndDlg,IDC_BTNORDER),hti.hItem,1); else TreeView_SetInsertMark(GetDlgItem(hwndDlg,IDC_BTNORDER),it,0); } else { if(hti.flags&TVHT_ABOVE) SendDlgItemMessage(hwndDlg,IDC_BTNORDER,WM_VSCROLL,MAKEWPARAM(SB_LINEUP,0),0); if(hti.flags&TVHT_BELOW) SendDlgItemMessage(hwndDlg,IDC_BTNORDER,WM_VSCROLL,MAKEWPARAM(SB_LINEDOWN,0),0); TreeView_SetInsertMark(GetDlgItem(hwndDlg,IDC_BTNORDER),NULL,0); } } } break; case WM_LBUTTONUP: { if(!dragging) break; TreeView_SetInsertMark(GetDlgItem(hwndDlg,IDC_BTNORDER),NULL,0); dragging=0; ReleaseCapture(); { TVHITTESTINFO hti; TVITEM tvi; hti.pt.x=(short)LOWORD(lParam); hti.pt.y=(short)HIWORD(lParam); ClientToScreen(hwndDlg,&hti.pt); ScreenToClient(GetDlgItem(hwndDlg,IDC_BTNORDER),&hti.pt); hti.pt.y-=TreeView_GetItemHeight(GetDlgItem(hwndDlg,IDC_BTNORDER))/2; TreeView_HitTest(GetDlgItem(hwndDlg,IDC_BTNORDER),&hti); if(hDragItem==hti.hItem) break; if (hti.flags&TVHT_ABOVE) hti.hItem=TVI_FIRST; tvi.mask=TVIF_HANDLE|TVIF_PARAM; tvi.hItem=(HTREEITEM)hDragItem; TreeView_GetItem(GetDlgItem(hwndDlg,IDC_BTNORDER),&tvi); if(hti.flags&(TVHT_ONITEM|TVHT_ONITEMRIGHT)||(hti.hItem==TVI_FIRST)) { TVINSERTSTRUCT tvis; TCHAR name[128]; tvis.item.mask=TVIF_HANDLE|TVIF_PARAM|TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_STATE; tvis.item.stateMask=0xFFFFFFFF; tvis.item.pszText=name; tvis.item.cchTextMax=sizeof(name); tvis.item.hItem=(HTREEITEM)hDragItem; //tvis.item.iImage=tvis.item.iSelectedImage=((MTB_BUTTONINFO *)tvi.lParam)->bVisible; TreeView_GetItem(GetDlgItem(hwndDlg,IDC_BTNORDER),&tvis.item); TreeView_DeleteItem(GetDlgItem(hwndDlg,IDC_BTNORDER),hDragItem); tvis.hParent=NULL; tvis.hInsertAfter=hti.hItem; TreeView_SelectItem(GetDlgItem(hwndDlg,IDC_BTNORDER),TreeView_InsertItem(GetDlgItem(hwndDlg,IDC_BTNORDER),&tvis)); SendMessage((GetParent(hwndDlg)), PSM_CHANGED, (WPARAM)hwndDlg, 0); } } } break; case WM_COMMAND: if (LOWORD(wParam)==IDC_TBSHOW) { { int i; BOOL en=IsDlgButtonChecked(hwndDlg,IDC_TBSHOW); for (i=0; i<SIZEOF(ControlIDS); i++) EnableWindow(GetDlgItem(hwndDlg,ControlIDS[i]), en); } SendMessage(GetParent(hwndDlg), PSM_CHANGED, (WPARAM)hwndDlg, 0); } else if ( (LOWORD(wParam)==IDC_TEXT_W || LOWORD(wParam)==IDC_TEXT_H || LOWORD(wParam)==IDC_TEXT_S ) && HIWORD(wParam) != EN_CHANGE || (HWND)lParam != GetFocus()) return 0; // dont make apply enabled during buddy set crap SendMessage(GetParent(hwndDlg), PSM_CHANGED, (WPARAM)hwndDlg, 0); break; } return FALSE; }
UINT TreeView::GetCount() { return TreeView_GetCount(window_); }
void SetMenuEntryProperties(HWND hdlg) { TVITEM tvi; HTREEITEM hItem=NULL; ButtonData* bd=NULL; int pos=0; if(TreeView_GetCount(hButtonsList)&&(tvi.hItem=TreeView_GetSelection(hButtonsList))) { tvi.mask=TVIF_HANDLE|TVIF_PARAM; TreeView_GetItem(hButtonsList,&tvi); if (tvi.lParam) { ListData* ld = ( ListData* )tvi.lParam; TCHAR szValue[256]; GetDlgItemText(hdlg, IDC_RCLICKVALUE, szValue, _countof(szValue)); if(mir_tstrlen(szValue)) { if(ld->ptszOPQValue&&(ld->ptszOPQValue!=ld->ptszQValue)) mir_free(ld->ptszOPQValue); ld->ptszOPQValue=mir_tstrdup(szValue); } ld->bIsOpServName=IsDlgButtonChecked(hdlg,IDC_ISSERVNAME2); } } tvi.hItem=NULL; if(TreeView_GetCount(hMenuTree)&&(tvi.hItem=TreeView_GetSelection(hMenuTree))) { tvi.mask=TVIF_HANDLE|TVIF_PARAM; TreeView_GetItem(hMenuTree,&tvi); if (tvi.lParam) { ButtonData* bd = ( ButtonData* )tvi.lParam; TCHAR szValue[256]; GetDlgItemText(hdlg, IDC_MENUVALUE, szValue, _countof(szValue)); if(mir_tstrlen(szValue)) { if(mir_tstrlen(bd->pszOpValue)&&(bd->pszOpValue!=bd->pszValue)) mir_free(bd->pszOpValue); bd->pszOpValue=mir_tstrdup(szValue); } bd->bOpInQMenu=IsDlgButtonChecked(hdlg,IDC_INQMENU); bd->bIsOpServName=IsDlgButtonChecked(hdlg,IDC_ISSERVNAME); } tvi.mask = TVIF_HANDLE | TVIF_PARAM; tvi.hItem = TreeView_GetRoot(hMenuTree); } while (tvi.hItem) { TreeView_GetItem(hMenuTree, &tvi); bd= (ButtonData*)tvi.lParam; bd->dwOPPos=pos++; if(hItem=TreeView_GetChild(hMenuTree, tvi.hItem)) { bd->fEntryOpType&=~QMF_EX_CHILD; if(bd->pszOpValue){ mir_free(bd->pszOpValue); bd->pszOpValue=NULL; } tvi.hItem=hItem; continue; } else { if(bd->fEntryOpType&QMF_EX_SEPARATOR){ if(bd->pszOpValue){ mir_free(bd->pszOpValue); bd->pszOpValue=NULL; }} else { if (!bd->pszOpValue) bd->pszOpValue=mir_tstrdup(LPGENT("Enter Value")); } if(TreeView_GetParent(hMenuTree, tvi.hItem)) bd->fEntryOpType|=QMF_EX_CHILD; else bd->fEntryOpType&=~QMF_EX_CHILD; if (!(hItem=TreeView_GetNextSibling(hMenuTree, tvi.hItem))) tvi.hItem=TreeView_GetNextSibling(hMenuTree, TreeView_GetParent(hMenuTree,tvi.hItem)); else tvi.hItem=hItem; } } }
static void fillListBox() { WIN32_FIND_DATA wfd; HANDLE hSearch; FILE* fp = NULL; TCHAR szFilePath[MAX_PATH]; TCHAR szFilePathSearch[MAX_PATH]; TCHAR szFileName[MAX_PATH]; TCHAR PatchName[MAX_PATH]; int nHandlePos = 0; int nNumNodes = 0; nPatchIndex = 0; nNumPatches = 0; TVINSERTSTRUCT TvItem; memset(&TvItem, 0, sizeof(TvItem)); TvItem.item.mask = TVIF_TEXT | TVIF_PARAM; TvItem.hInsertAfter = TVI_LAST; _stprintf(szFilePath, _T("%s%s\\"), getMiscPath(PATH_IPS), BurnDrvGetText(DRV_NAME)); _stprintf(szFilePathSearch, _T("%s*.dat"), szFilePath); hSearch = FindFirstFile(szFilePathSearch, &wfd); if (hSearch != INVALID_HANDLE_VALUE) { int Done = 0; while (!Done) { memset(szFileName, '\0', MAX_PATH); _stprintf(szFileName, _T("%s%s"), szFilePath, wfd.cFileName); fp = _tfopen(szFileName, _T("r")); if (fp) { memset(PatchName, '\0', MAX_PATH); TCHAR* PatchDesc = getPatchDescByLangcode(fp, nPatchLang); // If not available - try English first if (PatchDesc == NULL) { PatchDesc = getPatchDescByLangcode(fp, 0); // Simplified Chinese is the reference language if (PatchDesc == NULL) { PatchDesc = getPatchDescByLangcode(fp, 1); } } if (PatchDesc == NULL) { fclose(fp); break; } for (unsigned int i = 0; i < _tcslen(PatchDesc); i++) { if (PatchDesc[i] == '\r' || PatchDesc[i] == '\n') { break; } PatchName[i] = PatchDesc[i]; } // Check for categories int nNumTokens = 0; TCHAR szCategory[MAX_PATH]; TCHAR tempText[MAX_PATH]; TCHAR itemName[MAX_PATH] = _T(""); TVITEM Tvi; size_t nPatchNameLength = _tcslen(PatchName); TCHAR* Tokens = _tcstok(PatchName, _T("/")); while (Tokens != NULL) { if (nNumTokens == 0) { bool bAddItem = true; // Check if item already exists nNumNodes = TreeView_GetCount(hIpsList); for (int i = 0; i < nNumNodes; i++) { memset(&Tvi, 0, sizeof(Tvi)); Tvi.hItem = hItemHandles[i]; Tvi.mask = TVIF_TEXT | TVIF_HANDLE; Tvi.pszText = tempText; Tvi.cchTextMax = MAX_PATH; TreeView_GetItem(hIpsList, &Tvi); if (!_tcsicmp(Tvi.pszText, Tokens)) { bAddItem = false; // item exists, don't add it break; } } // add category if (bAddItem) { TvItem.hParent = TVI_ROOT; TvItem.item.pszText = Tokens; hItemHandles[nHandlePos] = TreeView_InsertItem(hIpsList, &TvItem); nHandlePos++; if (nHandlePos >= MAX_NODES) { nHandlePos = MAX_NODES - 1; } } if (_tcslen(Tokens) == nPatchNameLength) { saveDatName(nPatchIndex, wfd.cFileName); hPatchHandlesIndex[nPatchIndex] = hItemHandles[nHandlePos - 1]; _tcscpy(szPatchFileNames[nPatchIndex], szFileName); nPatchIndex++; if (nPatchIndex >= MAX_NODES) { nPatchIndex = MAX_NODES - 1; } } _tcscpy(szCategory, Tokens); } else { HTREEITEM hNode = TVI_ROOT; // See which category we should be in nNumNodes = TreeView_GetCount(hIpsList); for (int i = 0; i < nNumNodes; i++) { memset(&Tvi, 0, sizeof(Tvi)); Tvi.hItem = hItemHandles[i]; Tvi.mask = TVIF_TEXT | TVIF_HANDLE; Tvi.pszText = tempText; Tvi.cchTextMax = MAX_PATH; TreeView_GetItem(hIpsList, &Tvi); if (!_tcsicmp(Tvi.pszText, szCategory)) { hNode = Tvi.hItem; break; } } // add ips items saveDatName(nPatchIndex, wfd.cFileName); _stprintf(itemName, _T("%s [%s]"), Tokens, wfd.cFileName); TvItem.hParent = hNode; TvItem.item.pszText = itemName; hItemHandles[nHandlePos] = TreeView_InsertItem(hIpsList, &TvItem); hPatchHandlesIndex[nPatchIndex] = hItemHandles[nHandlePos]; _tcscpy(szPatchFileNames[nPatchIndex], szFileName); nHandlePos++; if (nHandlePos >= MAX_NODES) { nHandlePos = MAX_NODES - 1; } nPatchIndex++; if (nPatchIndex >= MAX_NODES) { nPatchIndex = MAX_NODES - 1; } } Tokens = _tcstok(NULL, _T("/")); nNumTokens++; } fclose(fp); } Done = !FindNextFile(hSearch, &wfd); } FindClose(hSearch); } nNumPatches = nPatchIndex; // Expand all branches nNumNodes = TreeView_GetCount(hIpsList); for (int i = 0; i < nNumNodes; i++) { TreeView_Expand(hIpsList, hItemHandles[i], TVE_EXPAND); } }