static void cfgui_add_node(cfgui_wnd_data * d, HWND hwtv, khui_config_node node, khui_config_node parent, BOOL sorted) { khui_config_node_reg reg; khui_config_node c; wchar_t wbuf[256]; const wchar_t * short_desc; TVINSERTSTRUCT s; HTREEITEM hItem; if (node) { khui_cfg_get_reg(node, ®); short_desc = reg.short_desc; } else { short_desc = wbuf; LoadString(khm_hInstance, IDS_CFG_ROOT_NAME, wbuf, ARRAYLENGTH(wbuf)); reg.flags = 0; } ZeroMemory(&s, sizeof(s)); s.hParent = (node)? (HTREEITEM) khui_cfg_get_param(parent): TVI_ROOT; s.hInsertAfter = (sorted)? TVI_SORT: TVI_FIRST; s.itemex.mask = TVIF_CHILDREN | TVIF_PARAM | TVIF_TEXT | TVIF_STATE; { khui_config_node n; if (KHM_SUCCEEDED(khui_cfg_get_first_child(node, &n))) { s.itemex.cChildren = 1; s.itemex.state = TVIS_EXPANDED; s.itemex.stateMask = TVIS_EXPANDED; khui_cfg_release(n); } else { s.itemex.cChildren = 0; s.itemex.state = 0; s.itemex.stateMask = TVIS_EXPANDED; } s.itemex.state |= INDEXTOSTATEIMAGEMASK(d->idx_default); s.itemex.stateMask |= TVIS_STATEIMAGEMASK; } s.itemex.lParam = (LPARAM) node; khui_cfg_hold(node); s.itemex.pszText = (LPWSTR) short_desc; hItem = TreeView_InsertItem(hwtv, &s); khui_cfg_set_param(node, (LPARAM) hItem); if (KHM_SUCCEEDED(khui_cfg_get_first_child(node, &c))) { do { cfgui_add_node(d, hwtv, c, node, !!(reg.flags & KHUI_CNFLAG_SORT_CHILDREN)); } while (KHM_SUCCEEDED(khui_cfg_get_next_release(&c))); } }
static void add_subpanels(HWND hwnd, khui_config_node ctx_node, khui_config_node ref_node) { HWND hw_tab; HWND hw_target; khui_config_node sub; khui_config_node_reg reg; khui_config_init_data idata; int idx; hw_tab = GetDlgItem(hwnd, IDC_CFG_TAB); hw_target = GetDlgItem(hwnd, IDC_CFG_TARGET); #ifdef DEBUG assert(hw_tab); assert(hw_target); #endif if (KHM_FAILED(khui_cfg_get_first_subpanel(ref_node, &sub))) { #ifdef DEBUG assert(FALSE); #endif return; } idx = 0; while(sub) { HWND hwnd_panel; TCITEM tci; int iid; khui_cfg_get_reg(sub, ®); if ((ctx_node == ref_node && (reg.flags & KHUI_CNFLAG_PLURAL)) || (ctx_node != ref_node && !(reg.flags & KHUI_CNFLAG_PLURAL))) goto _next_node; idata.ctx_node = ctx_node; idata.this_node = sub; idata.ref_node = ref_node; hwnd_panel = CreateDialogParam(reg.h_module, reg.dlg_template, hwnd, reg.dlg_proc, (LPARAM) &idata); #ifdef DEBUG assert(hwnd_panel); #endif ShowWindow(hwnd_panel, SW_HIDE); ZeroMemory(&tci, sizeof(tci)); tci.mask = TCIF_PARAM | TCIF_TEXT; tci.lParam = (LPARAM) sub; tci.pszText = (LPWSTR) reg.short_desc; iid = TabCtrl_InsertItem(hw_tab, 0, &tci); idx++; if (reg.flags & KHUI_CNFLAG_PLURAL) { khui_cfg_set_param_inst(sub, ctx_node, iid); khui_cfg_set_hwnd_inst(sub, ctx_node, hwnd_panel); } else { khui_cfg_set_param(sub, iid); khui_cfg_set_hwnd(sub, hwnd_panel); } _next_node: khui_cfg_get_next_release(&sub); } TabCtrl_SetCurSel(hw_tab, 0); }