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 show_tab_panel(HWND hwnd, khui_config_node node, HWND hw_tab, int idx, BOOL show) { TCITEM tci; HWND hw; HWND hw_target; HWND hw_firstctl; RECT r; RECT rref; khui_config_node_reg reg; ZeroMemory(&tci, sizeof(tci)); tci.mask = TCIF_PARAM; TabCtrl_GetItem(hw_tab, idx, &tci); #ifdef DEBUG assert(tci.lParam); #endif khui_cfg_get_reg((khui_config_node) tci.lParam, ®); if (reg.flags & KHUI_CNFLAG_PLURAL) hw = khui_cfg_get_hwnd_inst((khui_config_node) tci.lParam, node); else hw = khui_cfg_get_hwnd((khui_config_node) tci.lParam); #ifdef DEBUG assert(hw); #endif if (!show) { ShowWindow(hw, SW_HIDE); return; } hw_target = GetDlgItem(hwnd, IDC_CFG_TARGET); #ifdef DEBUG assert(hw_target); #endif GetWindowRect(hwnd, &rref); GetWindowRect(hw_target, &r); OffsetRect(&r, -rref.left, -rref.top); SetWindowPos(hw, hw_tab, r.left, r.top, r.right - r.left, r.bottom - r.top, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_SHOWWINDOW); hw_firstctl = GetNextDlgTabItem(hw, NULL, FALSE); if (hw_firstctl) { SetFocus(hw_firstctl); } }
static void apply_all(HWND hwnd, HWND hw_tab, khui_config_node noderef) { TCITEM tci; HWND hw; khui_config_node_reg reg; int idx; int count; BOOL cont = TRUE; count = TabCtrl_GetItemCount(hw_tab); for (idx = 0; idx < count && cont; idx++) { ZeroMemory(&tci, sizeof(tci)); tci.mask = TCIF_PARAM; TabCtrl_GetItem(hw_tab, idx, &tci); #ifdef DEBUG assert(tci.lParam); #endif khui_cfg_get_reg((khui_config_node) tci.lParam, ®); if (reg.flags & KHUI_CNFLAG_PLURAL) hw = khui_cfg_get_hwnd_inst((khui_config_node) tci.lParam, noderef); else hw = khui_cfg_get_hwnd((khui_config_node) tci.lParam); #ifdef DEBUG assert(hw); #endif SendMessage(hw, KHUI_WM_CFG_NOTIFY, MAKEWPARAM(0, WMCFG_APPLY), (LPARAM) &cont); } }
static void cfgui_apply_settings(khui_config_node node) { HWND hwnd; khui_config_node c; khm_int32 flags; hwnd = khui_cfg_get_hwnd(node); flags = khui_cfg_get_flags(node); if (hwnd && (flags & KHUI_CNFLAG_MODIFIED)) { SendMessage(hwnd, KHUI_WM_CFG_NOTIFY, MAKEWPARAM(0, WMCFG_APPLY), (LPARAM) node); } if (KHM_FAILED(khui_cfg_get_first_child(node, &c))) return; while (c) { cfgui_apply_settings(c); khui_cfg_get_next_release(&c); } }
static void cfgui_remove_item(HWND hwtv, HTREEITEM hItem) { khui_config_node node; HTREEITEM hChild; TVITEMEX itemex; for (hChild = TreeView_GetChild(hwtv, hItem); hChild; hChild = TreeView_GetChild(hwtv, hItem)) { cfgui_remove_item(hwtv, hChild); } ZeroMemory(&itemex, sizeof(itemex)); itemex.mask = TVIF_PARAM; itemex.hItem = hItem; TreeView_GetChild(hwtv, &itemex); node = (khui_config_node) itemex.lParam; if (node) { HWND hw; hw = khui_cfg_get_hwnd(node); if (hw) DestroyWindow(hw); khui_cfg_release(node); } TreeView_DeleteItem(hwtv, hItem); }
static void cfgui_activate_node(HWND hwnd, khui_config_node node) { cfgui_wnd_data * d; HTREEITEM hItem; HWND hw_new; HWND hwtv; d = cfgui_get_wnd_data(hwnd); if (d == NULL) return; hwtv = GetDlgItem(hwnd, IDC_CFG_NODELIST); hItem = (HTREEITEM) khui_cfg_get_param(node); #ifdef DEBUG assert(hItem); assert(hwtv); #endif if (node == NULL) { hw_new = d->hw_generic_pane; } else { hw_new = khui_cfg_get_hwnd(node); if (hw_new == NULL) { hw_new = cfgui_create_config_node_window(hwnd, node); } } if (hw_new == d->hw_current) return; /* nothing to do */ { RECT r_pane; if (d->hw_current) ShowWindow(d->hw_current, SW_HIDE); GetWindowRect(GetDlgItem(hwnd, IDC_CFG_PANE), &r_pane); MapWindowPoints(HWND_DESKTOP, hwnd, (POINT *) &r_pane, sizeof(r_pane) / sizeof(POINT)); SetWindowPos(hw_new, hwtv, r_pane.left, r_pane.top, r_pane.right - r_pane.left, r_pane.bottom - r_pane.top, SWP_NOOWNERZORDER | SWP_SHOWWINDOW | SWP_NOACTIVATE); } if (node == NULL) { wchar_t wbuf[256]; LoadString(khm_hInstance, IDS_CFG_ROOT_TITLE, wbuf, ARRAYLENGTH(wbuf)); SetDlgItemText(hwnd, IDC_CFG_TITLE, wbuf); } else { khm_int32 rv; khui_config_node_reg reg; rv = khui_cfg_get_reg(node, ®); assert(KHM_SUCCEEDED(rv)); SetDlgItemText(hwnd, IDC_CFG_TITLE, reg.long_desc); } d->hw_current = hw_new; d->current = node; TreeView_SelectItem(hwtv, hItem); }