INT_PTR CALLBACK DlgTmplEditorOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: { int hbuf = 0, seq = 0; HWND htree = GetDlgItem(hwndDlg, IDC_ROWTREE); TranslateDialogDefault(hwndDlg); rowOptTmplStr = db_get_sa(NULL, "ModernData", "RowTemplate"); if (!rowOptTmplStr) rowOptTmplStr = mir_strdup("<TR />"); SendDlgItemMessage(hwndDlg, IDC_SPINCONTWIDTH, UDM_SETRANGE, 0, MAKELONG(999, 0)); SendDlgItemMessage(hwndDlg, IDC_SPINCONTHEIGHT, UDM_SETRANGE, 0, MAKELONG(999, 0)); int i, item; for (i = 0; i < _countof(types); i++) { item = SendDlgItemMessage(hwndDlg, IDC_CONTTYPE, CB_ADDSTRING, 0, (LPARAM)TranslateTS(types[i])); SendDlgItemMessage(hwndDlg, IDC_CONTTYPE, CB_SETITEMDATA, item, 0); } SendDlgItemMessage(hwndDlg, IDC_CONTTYPE, CB_SETCURSEL, 0, 0); TCHAR *h_alignment[] = { _T("left"), _T("hCenter"), _T("right") }; for (i = 0; i < _countof(h_alignment); i++) { item = SendDlgItemMessage(hwndDlg, IDC_HALIGN, CB_ADDSTRING, 0, (LPARAM)TranslateTS(h_alignment[i])); SendDlgItemMessage(hwndDlg, IDC_HALIGN, CB_SETITEMDATA, item, 0); } SendDlgItemMessage(hwndDlg, IDC_HALIGN, CB_SETCURSEL, 0, 0); TCHAR *v_alignment[] = { _T("top"), _T("vCenter"), _T("bottom") }; for (i = 0; i < _countof(v_alignment); i++) { item = SendDlgItemMessage(hwndDlg, IDC_VALIGN, CB_ADDSTRING, 0, (LPARAM)TranslateTS(v_alignment[i])); SendDlgItemMessage(hwndDlg, IDC_VALIGN, CB_SETITEMDATA, item, 0); } SendDlgItemMessage(hwndDlg, IDC_VALIGN, CB_SETCURSEL, 0, 0); rowDeleteTree(rowOptTmplRoot); rowOptTmplRoot = NULL; rowParse(rowOptTmplRoot, rowOptTmplRoot, rowOptTmplStr, hbuf, seq, rowOptTA); seq = 0; memset(rowOptTA, 0, sizeof(rowOptTA)); rowOptBuildTA(rowOptTmplRoot, (pROWCELL*)&rowOptTA, &seq); rowOptFillRowTree(htree); RefreshTree(hwndDlg, NULL); TreeView_SelectItem(GetDlgItem(hwndDlg, IDC_ROWTREE), TreeView_GetRoot(GetDlgItem(hwndDlg, IDC_ROWTREE))); rowOptShowSettings(hwndDlg); } return TRUE; case WM_COMMAND: { HWND htree = GetDlgItem(hwndDlg, IDC_ROWTREE); pROWCELL cell; TVITEM tvi = { 0 }; HTREEITEM hti = TreeView_GetSelection(htree); tvi.hItem = hti; tvi.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE; TreeView_GetItem(htree, &tvi); cell = (pROWCELL)tvi.lParam; switch (LOWORD(wParam)) { case IDC_CONTTYPE: if (HIWORD(wParam) == CBN_SELENDOK) { int index = SendDlgItemMessage(hwndDlg, IDC_CONTTYPE, CB_GETCURSEL, 0, 0); cell->type = index; RefreshTree(hwndDlg, NULL); } case IDC_VALIGN: if (HIWORD(wParam) == CBN_SELENDOK) { switch (SendDlgItemMessage(hwndDlg, IDC_VALIGN, CB_GETCURSEL, 0, 0)) { case 0: cell->valign = TC_TOP; break; case 1: cell->valign = TC_VCENTER; break; case 2: cell->valign = TC_BOTTOM; break; } RefreshTree(hwndDlg, NULL); } case IDC_HALIGN: if (HIWORD(wParam) == CBN_SELENDOK) { switch (SendDlgItemMessage(hwndDlg, IDC_HALIGN, CB_GETCURSEL, 0, 0)) { case 0: cell->halign = TC_LEFT; break; case 1: cell->halign = TC_HCENTER; break; case 2: cell->halign = TC_RIGHT; break; } RefreshTree(hwndDlg, NULL); } } if (HIWORD(wParam) == BN_CLICKED) { if (lParam == (LPARAM)GetDlgItem(hwndDlg, IDC_ADDCONTAINER)) // Adding new container { rowOptAddContainer(htree, hti); } else if (lParam == (LPARAM)GetDlgItem(hwndDlg, IDC_DELCONTAINER)) // Deleting container { rowOptDelContainer(htree, hti); } else if (lParam == (LPARAM)GetDlgItem(hwndDlg, IDC_CONTUP)) // Moving container to up { RedrawWindow(htree, &da, NULL, RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW | RDW_ALLCHILDREN); } RefreshTree(hwndDlg, NULL); RedrawWindow(GetParent(hwndDlg), NULL, NULL, RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW | RDW_ALLCHILDREN); } return TRUE; } case WM_NOTIFY: switch (((LPNMHDR)lParam)->idFrom) { case IDC_ROWTREE: if (((LPNMHDR)lParam)->code == NM_SETCURSOR) rowOptShowSettings(hwndDlg); if (((LPNMHDR)lParam)->code == NM_CLICK) RedrawWindow(hwndDlg, &da, NULL, RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW); break; case 0: // Apply or Ok button is pressed return FALSE; // Temporary break; } return TRUE; case WM_PAINT: if (rowOptTmplRoot) { int i = 0; // Drawning row template at properties page PAINTSTRUCT ps; HDC hdc = BeginPaint(hwndDlg, &ps); TVITEM curItem; curItem.hItem = TreeView_GetSelection(GetDlgItem(hwndDlg, IDC_ROWTREE)); curItem.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE; TreeView_GetItem(GetDlgItem(hwndDlg, IDC_ROWTREE), &curItem); while (rowOptTA[i]) { switch (rowOptTA[i]->type) { case TC_AVATAR: rowOptTA[i]->w = 25; rowOptTA[i]->h = 30; break; case TC_STATUS: case TC_EXTRA1: case TC_EXTRA2: case TC_EXTRA3: case TC_EXTRA4: case TC_EXTRA5: case TC_EXTRA6: case TC_EXTRA7: case TC_EXTRA8: case TC_EXTRA9: rowOptTA[i]->w = 16; rowOptTA[i]->h = 16; break; case TC_EXTRA: rowOptTA[i]->w = 112; rowOptTA[i]->h = 16; break; case TC_TEXT1: case TC_TEXT2: case TC_TEXT3: rowOptTA[i]->w = 200; rowOptTA[i]->h = 16; break; case TC_TIME: rowOptTA[i]->w = 30; rowOptTA[i]->h = 10; default: rowOptTA[i]->w = 0; rowOptTA[i]->h = 0; } i++; } rowSizeWithReposition(rowOptTmplRoot, da.right - da.left); i = -1; while (rowOptTA[++i]) { switch (rowOptTA[i]->type) { case TC_SPACE: case TC_FIXED: case 0: //if (rowOptTA[i] != (pROWCELL)curItem.lParam) continue; } Rectangle(hdc, rowOptTA[i]->r.left + da.left, rowOptTA[i]->r.top + da.top, rowOptTA[i]->r.right + da.left, rowOptTA[i]->r.bottom + da.top); } EndPaint(hwndDlg, &ps); return FALSE; } } return FALSE; }
extern "C" void cppCalculateRowItemsPos(ROWCELL *RowRoot, int width) { rowSizeWithReposition(RowRoot, width); }