static void AddBaseEntries(void) { TVINSERTSTRUCTW tvis; WCHAR name[MAX_LOAD_STRING]; U(tvis).item.mask = TVIF_TEXT|TVIF_CHILDREN|TVIF_PARAM; /* FIXME add TVIF_IMAGE */ U(tvis).item.pszText = name; U(tvis).item.cchTextMax = MAX_LOAD_STRING; U(tvis).item.cChildren = 1; tvis.hInsertAfter = TVI_FIRST; tvis.hParent = TVI_ROOT; LoadStringW(globals.hMainInst, IDS_TREE_I, U(tvis).item.pszText, MAX_LOAD_STRING); U(tvis).item.lParam = CreateITEM_INFO(REGTOP, wszInterface, NULL, NULL); tree.hI = TreeView_InsertItemW(globals.hTree, &tvis); LoadStringW(globals.hMainInst, IDS_TREE_TL, U(tvis).item.pszText, MAX_LOAD_STRING); U(tvis).item.lParam = CreateITEM_INFO(REGTOP, wszTypeLib, NULL, NULL); tree.hTL = TreeView_InsertItemW(globals.hTree, &tvis); LoadStringW(globals.hMainInst, IDS_TREE_AID, U(tvis).item.pszText, MAX_LOAD_STRING); U(tvis).item.lParam = CreateITEM_INFO(REGTOP|REGPATH, wszAppID, NULL, NULL); tree.hAID = TreeView_InsertItemW(globals.hTree, &tvis); LoadStringW(globals.hMainInst, IDS_TREE_OC, U(tvis).item.pszText, MAX_LOAD_STRING); U(tvis).item.lParam = 0; tree.hOC = TreeView_InsertItemW(globals.hTree, &tvis); tvis.hParent = tree.hOC; LoadStringW(globals.hMainInst, IDS_TREE_AO, U(tvis).item.pszText, MAX_LOAD_STRING); U(tvis).item.lParam = CreateITEM_INFO(REGTOP, wszCLSID, NULL, NULL); tree.hAO = TreeView_InsertItemW(globals.hTree, &tvis); LoadStringW(globals.hMainInst, IDS_TREE_CLO, U(tvis).item.pszText, MAX_LOAD_STRING); tree.hCLO = TreeView_InsertItemW(globals.hTree, &tvis); LoadStringW(globals.hMainInst, IDS_TREE_O1O, U(tvis).item.pszText, MAX_LOAD_STRING); U(tvis).item.lParam = 0; tree.hO1O = TreeView_InsertItemW(globals.hTree, &tvis); LoadStringW(globals.hMainInst, IDS_TREE_GBCC, U(tvis).item.pszText, MAX_LOAD_STRING); U(tvis).item.lParam = CreateITEM_INFO(REGTOP|REGPATH, wszComponentCategories, NULL, NULL); tree.hGBCC = TreeView_InsertItemW(globals.hTree, &tvis); SendMessageW(globals.hTree, TVM_EXPAND, TVE_EXPAND, (LPARAM)tree.hOC); }
/* Add an entry to the tree. Only give hKey for root nodes (HKEY_ constants) */ static HTREEITEM AddEntryToTree(HWND hwndTV, HTREEITEM hParent, LPWSTR label, HKEY hKey, DWORD dwChildren) { TVINSERTSTRUCTW tvins; if (hKey) { if (RegQueryInfoKeyW(hKey, 0, 0, 0, &dwChildren, 0, 0, 0, 0, 0, 0, 0) != ERROR_SUCCESS) { dwChildren = 0; } } tvins.u.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_CHILDREN | TVIF_PARAM; tvins.u.item.pszText = label; tvins.u.item.cchTextMax = lstrlenW(label); tvins.u.item.iImage = Image_Closed; tvins.u.item.iSelectedImage = Image_Open; tvins.u.item.cChildren = dwChildren; tvins.u.item.lParam = (LPARAM)hKey; tvins.hInsertAfter = hKey ? TVI_LAST : TVI_SORT; tvins.hParent = hParent; return TreeView_InsertItemW(hwndTV, &tvins); }
/****************************************************************************** * InsertTreeViewItem [Internal] * * PARAMS * info [I] data for the dialog * lpsf [I] IShellFolder interface of the item's parent shell folder * pidl [I] ITEMIDLIST of the child to insert, relative to parent * pidlParent [I] ITEMIDLIST of the parent shell folder * pEnumIL [I] Iterator for the children of the item to be inserted * hParent [I] The treeview-item that represents the parent shell folder * * RETURNS * Success: Handle to the created and inserted treeview-item * Failure: NULL */ static HTREEITEM InsertTreeViewItem( browse_info *info, IShellFolder * lpsf, LPCITEMIDLIST pidl, LPCITEMIDLIST pidlParent, IEnumIDList* pEnumIL, HTREEITEM hParent) { TVITEMW tvi; TVINSERTSTRUCTW tvins; WCHAR szBuff[MAX_PATH]; LPTV_ITEMDATA lptvid=0; tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; tvi.cChildren= pEnumIL ? 1 : 0; tvi.mask |= TVIF_CHILDREN; if (!GetName(lpsf, pidl, SHGDN_NORMAL, szBuff)) return NULL; lptvid = SHAlloc( sizeof(TV_ITEMDATA) ); if (!lptvid) return NULL; tvi.pszText = szBuff; tvi.cchTextMax = MAX_PATH; tvi.lParam = (LPARAM)lptvid; IShellFolder_AddRef(lpsf); lptvid->lpsfParent = lpsf; lptvid->lpi = ILClone(pidl); lptvid->lpifq = pidlParent ? ILCombine(pidlParent, pidl) : ILClone(pidl); lptvid->pEnumIL = pEnumIL; GetNormalAndSelectedIcons(lptvid->lpifq, &tvi); tvins.u.item = tvi; tvins.hInsertAfter = NULL; tvins.hParent = hParent; return TreeView_InsertItemW( info->hwndTreeView, &tvins ); }
static BOOL InitTreeViewItems(HWND hwndTV, LPWSTR pHostName) { TVINSERTSTRUCTW tvins; HTREEITEM hRoot; static WCHAR hkcr[] = {'H','K','E','Y','_','C','L','A','S','S','E','S','_','R','O','O','T',0}, hkcu[] = {'H','K','E','Y','_','C','U','R','R','E','N','T','_','U','S','E','R',0}, hklm[] = {'H','K','E','Y','_','L','O','C','A','L','_','M','A','C','H','I','N','E',0}, hku[] = {'H','K','E','Y','_','U','S','E','R','S',0}, hkcc[] = {'H','K','E','Y','_','C','U','R','R','E','N','T','_','C','O','N','F','I','G',0}, hkdd[] = {'H','K','E','Y','_','D','Y','N','_','D','A','T','A',0}; tvins.u.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_CHILDREN | TVIF_PARAM; /* Set the text of the item. */ tvins.u.item.pszText = pHostName; tvins.u.item.cchTextMax = lstrlenW(pHostName); /* Assume the item is not a parent item, so give it an image. */ tvins.u.item.iImage = Image_Root; tvins.u.item.iSelectedImage = Image_Root; tvins.u.item.cChildren = 5; /* Save the heading level in the item's application-defined data area. */ tvins.u.item.lParam = 0; tvins.hInsertAfter = TVI_FIRST; tvins.hParent = TVI_ROOT; /* Add the item to the tree view control. */ if (!(hRoot = TreeView_InsertItemW(hwndTV, &tvins))) return FALSE; if (!AddEntryToTree(hwndTV, hRoot, hkcr, HKEY_CLASSES_ROOT, 1)) return FALSE; if (!AddEntryToTree(hwndTV, hRoot, hkcu, HKEY_CURRENT_USER, 1)) return FALSE; if (!AddEntryToTree(hwndTV, hRoot, hklm, HKEY_LOCAL_MACHINE, 1)) return FALSE; if (!AddEntryToTree(hwndTV, hRoot, hku, HKEY_USERS, 1)) return FALSE; if (!AddEntryToTree(hwndTV, hRoot, hkcc, HKEY_CURRENT_CONFIG, 1)) return FALSE; if (!AddEntryToTree(hwndTV, hRoot, hkdd, HKEY_DYN_DATA, 1)) return FALSE; /* expand and select host name */ SendMessageW(hwndTV, TVM_EXPAND, TVE_EXPAND, (LPARAM)hRoot ); SendMessageW(hwndTV, TVM_SELECTITEM, TVGN_CARET, (LPARAM)hRoot); return TRUE; }
int doContacts(HWND hwnd2Tree, HTREEITEM contactsRoot, ModuleSettingLL *modlist, MCONTACT hSelectedContact, char *SelectedModule, char *SelectedSetting) { TVINSERTSTRUCT tvi; HTREEITEM contact; ModuleTreeInfoStruct *lParam; ModSetLinkLinkItem *module; int count = CallService(MS_DB_CONTACT_GETCOUNT, 0, 0); int itemscount = 0; int loaded, i = 0, icon = 0; HWND hwnd = GetParent(hwnd2Tree); int hItem = -1; SetWindowText(hwnd2mainWindow, Translate("Loading contacts...")); tvi.hInsertAfter = TVI_SORT; tvi.item.cChildren = 1; for (MCONTACT hContact = db_find_first(); hContact && hwnd2mainWindow; hContact = db_find_next(hContact)) { char szProto[100]; if (DBGetContactSettingStringStatic(hContact, "Protocol", "p", szProto, SIZEOF(szProto))) { icon = GetProtoIcon(szProto); loaded = (icon != DEF_ICON); } else { icon = DEF_ICON; loaded = 0; } i++; // filter if ((loaded && Mode == MODE_UNLOADED) || (!loaded && Mode == MODE_LOADED)) continue; // add the contact lParam = (ModuleTreeInfoStruct *)mir_calloc(sizeof(ModuleTreeInfoStruct)); lParam->hContact = hContact; lParam->type = CONTACT; tvi.item.mask = TVIF_TEXT | TVIF_CHILDREN | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE; tvi.item.lParam = (LPARAM)lParam; tvi.hParent = contactsRoot; if (hSelectedContact != hContact) lParam->type |= EMPTY; // contacts name DBVARIANT dbv = {0}; WCHAR nick[256]; WCHAR protoW[256]; // unicode proto if (szProto) a2u(szProto, protoW, SIZEOF(protoW)); else protoW[0] = 0; if (!szProto || !loaded) { tvi.item.iSelectedImage = (tvi.item.iImage = 4); if (protoW) { if (Order) mir_snwprintf(nick, SIZEOF(nick), L"(%s) %s %s", protoW, GetContactName(hContact, szProto, 1), L"(UNLOADED)"); else mir_snwprintf(nick, SIZEOF(nick), L"%s (%s) %s", GetContactName(hContact, szProto, 1), protoW, L"(UNLOADED)"); } else wcscpy(nick, nick_unknownW); } else { tvi.item.iSelectedImage = (tvi.item.iImage = icon); //GetProtoIcon(szProto, 7)); if (Order) mir_snwprintf(nick, SIZEOF(nick), L"(%s) %s", protoW, GetContactName(hContact, szProto, 1)); else mir_snwprintf(nick, SIZEOF(nick), L"%s (%s)", GetContactName(hContact, szProto, 1), protoW); } tvi.item.pszText = (char *)nick; contact = TreeView_InsertItemW(hwnd2Tree, &tvi); itemscount++; if (hSelectedContact == hContact) { module = modlist->first; while (module && hwnd2mainWindow) { if (module->name[0] && !IsModuleEmpty(hContact, module->name)) { tvi.hParent = contact; tvi.hInsertAfter = TVI_SORT; tvi.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; tvi.item.pszText = module->name; lParam = (ModuleTreeInfoStruct *)mir_calloc(sizeof(ModuleTreeInfoStruct)); lParam->hContact = hContact; tvi.item.iImage = 1; tvi.item.iSelectedImage = 2; lParam->type = KNOWN_MODULE; tvi.item.lParam = (LPARAM)lParam; TreeView_InsertItem(hwnd2Tree, &tvi); } module = (ModSetLinkLinkItem *)module->next; } hItem = findItemInTree(hwnd2Tree, hSelectedContact, SelectedModule); } } if (hItem != -1) { TreeView_SelectItem(hwnd2Tree, (HTREEITEM)hItem); TreeView_Expand(hwnd2Tree, hItem, TVE_EXPAND); if (SelectedSetting[0]) SelectSetting(SelectedSetting); } return itemscount; }