static void MenuHide(Menu * m) { EWin *ewin; if (!m || !m->shown) return; if (m->sel_item) MenuDrawItem(m, m->sel_item, 1, STATE_NORMAL); m->sel_item = NULL; ewin = m->ewin; if (ewin) { EUnmapWindow(m->win); EReparentWindow(m->win, VROOT, ewin->client.x, ewin->client.y); EwinHide(ewin); } m->ewin = NULL; m->shown = 0; m->parent = NULL; m->last_access = time(0); if (m->child) { MenuHide(m->child); m->child = NULL; } if (m->dynamic) MenuEmpty(m, 0); m->ref_count--; }
static void MenuRedraw(Menu * m) { int i, j; if (m->redraw) { for (i = 0; i < m->num; i++) { for (j = 0; j < 3; j++) PmapMaskFree(&(m->items[i]->pmm[j])); } m->redraw = 0; } if (!m->style->use_item_bg) { PmapMaskFree(&m->pmm); ImageclassApplyCopy(m->style->bg_iclass, m->win, m->w, m->h, 0, 0, STATE_NORMAL, &m->pmm, IC_FLAG_MAKE_MASK, ST_MENU); EGetWindowBackgroundPixmap(m->win); EXCopyAreaTiled(m->pmm.pmap, None, WinGetPmap(m->win), 0, 0, m->w, m->h, 0, 0); EShapeSetMask(m->win, 0, 0, m->pmm.mask); EClearWindow(m->win); for (i = 0; i < m->num; i++) MenuDrawItem(m, m->items[i], 0, -1); } else { for (i = 0; i < m->num; i++) MenuDrawItem(m, m->items[i], 0, -1); EShapePropagate(m->win); } m->filled = 1; }
static INT_PTR CALLBACK OptionsDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { static bool bInitialized = false; static MCONTACT hSelectedContact = 0; switch (msg) { case WM_INITDIALOG: bInitialized = false; TranslateDialogDefault(hwnd); CheckDlgButton(hwnd, IDC_CHK_GROUPS, g_Options.bUseGroups ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwnd, IDC_CHK_GROUPCOLUMS, g_Options.bUseColumns ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwnd, IDC_CHK_SECONDLINE, g_Options.bSecondLine ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwnd, IDC_CHK_AVATARS, g_Options.bAvatars ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwnd, IDC_CHK_AVATARBORDER, g_Options.bAvatarBorder ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwnd, IDC_CHK_NOTRANSPARENTBORDER, g_Options.bNoTransparentBorder ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwnd, IDC_CHK_SYSCOLORS, g_Options.bSysColors ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwnd, IDC_CHK_CENTERHOTKEY, g_Options.bCenterHotkey ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwnd, IDC_CHK_RIGHTAVATARS, g_Options.bRightAvatars ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwnd, IDC_CHK_DIMIDLE, g_Options.bDimIdle ? BST_CHECKED : BST_UNCHECKED); SetDlgItemInt(hwnd, IDC_TXT_RADIUS, g_Options.wAvatarRadius, FALSE); SetDlgItemInt(hwnd, IDC_TXT_MAXRECENT, g_Options.wMaxRecent, FALSE); SetWindowLongPtr(GetDlgItem(hwnd, IDC_CLIST), GWL_STYLE, GetWindowLongPtr(GetDlgItem(hwnd, IDC_CLIST), GWL_STYLE) | CLS_CHECKBOXES | CLS_HIDEEMPTYGROUPS | CLS_USEGROUPS | CLS_GREYALTERNATE | CLS_GROUPCHECKBOXES); SendDlgItemMessage(hwnd, IDC_CLIST, CLM_SETEXSTYLE, CLS_EX_DISABLEDRAGDROP | CLS_EX_TRACKSELECT, 0); sttResetListOptions(GetDlgItem(hwnd, IDC_CLIST)); hSelectedContact = db_find_first(); { for (MCONTACT hContact = db_find_first(); hContact; hContact = db_find_next(hContact)) SendDlgItemMessage(hwnd, IDC_CLIST, CLM_SETCHECKMARK, SendDlgItemMessage(hwnd, IDC_CLIST, CLM_FINDCONTACT, hContact, 0), db_get_b(hContact, "FavContacts", "IsFavourite", 0)); } bInitialized = true; PostMessage(hwnd, WM_APP, 0, 0); return TRUE; case WM_APP: { BOOL bGroups = IsDlgButtonChecked(hwnd, IDC_CHK_GROUPS); EnableWindow(GetDlgItem(hwnd, IDC_CHK_GROUPCOLUMS), bGroups); BOOL bAvatars = IsDlgButtonChecked(hwnd, IDC_CHK_AVATARS); BOOL bBorders = IsDlgButtonChecked(hwnd, IDC_CHK_AVATARBORDER); EnableWindow(GetDlgItem(hwnd, IDC_CHK_AVATARBORDER), bAvatars); EnableWindow(GetDlgItem(hwnd, IDC_CHK_RIGHTAVATARS), bAvatars); EnableWindow(GetDlgItem(hwnd, IDC_CHK_NOTRANSPARENTBORDER), bAvatars && bBorders); EnableWindow(GetDlgItem(hwnd, IDC_TXT_RADIUS), bAvatars && bBorders); } return TRUE; case WM_DRAWITEM: { LPDRAWITEMSTRUCT lpdis = (LPDRAWITEMSTRUCT)lParam; if (lpdis->CtlID == IDC_CANVAS) { MEASUREITEMSTRUCT mis = { 0 }; DRAWITEMSTRUCT dis = *lpdis; FillRect(lpdis->hDC, &lpdis->rcItem, GetSysColorBrush(COLOR_BTNFACE)); if (hSelectedContact) { Options options; options.bSecondLine = IsDlgButtonChecked(hwnd, IDC_CHK_SECONDLINE); options.bAvatars = IsDlgButtonChecked(hwnd, IDC_CHK_AVATARS); options.bAvatarBorder = IsDlgButtonChecked(hwnd, IDC_CHK_AVATARBORDER); options.bNoTransparentBorder = IsDlgButtonChecked(hwnd, IDC_CHK_NOTRANSPARENTBORDER); options.bSysColors = IsDlgButtonChecked(hwnd, IDC_CHK_SYSCOLORS); options.bCenterHotkey = IsDlgButtonChecked(hwnd, IDC_CHK_CENTERHOTKEY); options.bRightAvatars = IsDlgButtonChecked(hwnd, IDC_CHK_RIGHTAVATARS); options.bDimIdle = IsDlgButtonChecked(hwnd, IDC_CHK_DIMIDLE); options.wAvatarRadius = GetDlgItemInt(hwnd, IDC_TXT_RADIUS, NULL, FALSE); options.wMaxRecent = GetDlgItemInt(hwnd, IDC_TXT_MAXRECENT, NULL, FALSE); mis.CtlID = 0; mis.CtlType = ODT_MENU; mis.itemData = (DWORD)hSelectedContact; MenuMeasureItem(&mis, &options); dis.rcItem.bottom = dis.rcItem.top + mis.itemHeight; dis.CtlID = 0; dis.CtlType = ODT_MENU; dis.itemData = (DWORD)hSelectedContact; MenuDrawItem(&dis, &options); RECT rc = lpdis->rcItem; rc.bottom = rc.top + mis.itemHeight; FrameRect(lpdis->hDC, &rc, GetSysColorBrush(COLOR_HIGHLIGHT)); } return TRUE; } } return FALSE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_CHK_SECONDLINE: case IDC_CHK_AVATARS: case IDC_CHK_AVATARBORDER: case IDC_CHK_NOTRANSPARENTBORDER: case IDC_CHK_SYSCOLORS: case IDC_CHK_CENTERHOTKEY: case IDC_CHK_GROUPS: case IDC_CHK_GROUPCOLUMS: case IDC_CHK_RIGHTAVATARS: SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); RedrawWindow(GetDlgItem(hwnd, IDC_CANVAS), NULL, NULL, RDW_INVALIDATE); PostMessage(hwnd, WM_APP, 0, 0); break; case IDC_BTN_FONTS: { OPENOPTIONSDIALOG ood = { sizeof(ood) }; ood.pszGroup = "Customize"; ood.pszPage = "Fonts and colors"; ood.pszTab = NULL; Options_Open(&ood); } break; case IDC_TXT_RADIUS: if ((HIWORD(wParam) == EN_CHANGE) && bInitialized) { RedrawWindow(GetDlgItem(hwnd, IDC_CANVAS), NULL, NULL, RDW_INVALIDATE); SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); } break; case IDC_TXT_MAXRECENT: if ((HIWORD(wParam) == EN_CHANGE) && bInitialized) SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); break; } break; case WM_NOTIFY: if ((((LPNMHDR)lParam)->idFrom == 0) && (((LPNMHDR)lParam)->code == PSN_APPLY)) { g_Options.bSecondLine = IsDlgButtonChecked(hwnd, IDC_CHK_SECONDLINE); g_Options.bAvatars = IsDlgButtonChecked(hwnd, IDC_CHK_AVATARS); g_Options.bAvatarBorder = IsDlgButtonChecked(hwnd, IDC_CHK_AVATARBORDER); g_Options.bNoTransparentBorder = IsDlgButtonChecked(hwnd, IDC_CHK_NOTRANSPARENTBORDER); g_Options.bSysColors = IsDlgButtonChecked(hwnd, IDC_CHK_SYSCOLORS); g_Options.bCenterHotkey = IsDlgButtonChecked(hwnd, IDC_CHK_CENTERHOTKEY); g_Options.bUseGroups = IsDlgButtonChecked(hwnd, IDC_CHK_GROUPS); g_Options.bUseColumns = IsDlgButtonChecked(hwnd, IDC_CHK_GROUPCOLUMS); g_Options.bRightAvatars = IsDlgButtonChecked(hwnd, IDC_CHK_RIGHTAVATARS); g_Options.bDimIdle = IsDlgButtonChecked(hwnd, IDC_CHK_DIMIDLE); g_Options.wAvatarRadius = GetDlgItemInt(hwnd, IDC_TXT_RADIUS, NULL, FALSE); g_Options.wMaxRecent = GetDlgItemInt(hwnd, IDC_TXT_MAXRECENT, NULL, FALSE); sttSaveOptions(); for (MCONTACT hContact = db_find_first(); hContact; hContact = db_find_next(hContact)) { BYTE fav = SendDlgItemMessage(hwnd, IDC_CLIST, CLM_GETCHECKMARK, SendDlgItemMessage(hwnd, IDC_CLIST, CLM_FINDCONTACT, hContact, 0), 0); if (fav != db_get_b(hContact, "FavContacts", "IsFavourite", 0)) db_set_b(hContact, "FavContacts", "IsFavourite", fav); if (fav) CallService(MS_AV_GETAVATARBITMAP, hContact, 0); } } else if (((LPNMHDR)lParam)->idFrom == IDC_CLIST) { int iSelection; switch (((LPNMHDR)lParam)->code) { case CLN_OPTIONSCHANGED: sttResetListOptions(GetDlgItem(hwnd, IDC_CLIST)); break; case CLN_NEWCONTACT: iSelection = (int)((NMCLISTCONTROL *)lParam)->hItem; for (MCONTACT hContact = db_find_first(); hContact; hContact = db_find_next(hContact)) { if (SendDlgItemMessage(hwnd, IDC_CLIST, CLM_FINDCONTACT, hContact, 0) == iSelection) { SendDlgItemMessage(hwnd, IDC_CLIST, CLM_SETCHECKMARK, iSelection, db_get_b(hContact, "FavContacts", "IsFavourite", 0)); break; } } break; case CLN_CHECKCHANGED: iSelection = (int)((NMCLISTCONTROL *)lParam)->hItem; for (MCONTACT hContact = db_find_first(); hContact; hContact = db_find_next(hContact)) { if (SendDlgItemMessage(hwnd, IDC_CLIST, CLM_FINDCONTACT, hContact, 0) == iSelection) { hSelectedContact = hContact; RedrawWindow(GetDlgItem(hwnd, IDC_CANVAS), NULL, NULL, RDW_INVALIDATE); } } SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); } } break; } return FALSE; }