static HWND cfgui_create_config_node_window(HWND hwnd, khui_config_node node) { khui_config_node_reg reg; khm_int32 rv; HWND hw_new; khui_config_node parent; if (KHM_SUCCEEDED(khui_cfg_get_parent(node, &parent))) { HWND hwp; hwp = khui_cfg_get_hwnd(parent); if (hwp == NULL) cfgui_create_config_node_window(hwnd, parent); khui_cfg_release(parent); } rv = khui_cfg_get_reg(node, ®); #ifdef DEBUG assert(KHM_SUCCEEDED(rv)); #endif hw_new = CreateDialogParam(reg.h_module, reg.dlg_template, hwnd, reg.dlg_proc, (LPARAM) node); #ifdef DEBUG assert(hw_new); #endif khui_cfg_set_hwnd(node, hw_new); return hw_new; }
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); }