int FontDisplayerPeerObject::queryCatalog(struct nfrc *rc, struct nffmi *fmi) { int ret = catalog.supportsFmi(rc, fmi); if (ret < 0) { // Catalog may not have been initialized. if (!catalog.isInitialized(rc)) { // Now we need to load the dll to initialize the catalog. struct nffmi **fmis = ListFonts(rc, NULL); catalog.update(rc, fmis); if (fmis) { // XXX We need to free the fmis. We may get away // XXX doing that if we make catalog.update() not // XXX take a copy of the fmi. wf_releaseFmis(fmis); WF_FREE(fmis); } ret = catalog.supportsFmi(rc, fmi); } } return (ret); }
BOOL CALLBACK PreferencesDialog3Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_COMMAND: /* Process control messages */ { switch (LOWORD(wParam)) { case ID_SHOWGUTTERCHK: case ID_SHOWMARGINCHK: case ID_SHOWLINENUMBERSCHK: case ID_AUTOSIZEGUTTERCHK: { if (HIWORD(wParam) == BN_CLICKED) { SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0); } break; } case ID_GUTTERSIZEEDT: case ID_MARGINSIZEEDT: { if (HIWORD(wParam) == EN_CHANGE) { SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0); } break; } case ID_EDITORFONTCMB: { if (HIWORD(wParam) == CBN_SELCHANGE) { int Index = SendMessage((HWND)lParam, CB_GETCURSEL, 0, 0); if (SendMessage((HWND)lParam, CB_GETLBTEXTLEN, Index, 0) <= 32) { SendMessage((HWND)lParam, CB_GETLBTEXT, Index, (LPARAM)EditorFont.Name); ListFontSizes(GetDlgItem(hDlg, ID_EDITORFONTSIZECMB), EditorFont.Name); PreviewFont(GetDlgItem(hDlg, ID_EDITORFONTPREVIEWLBL), &EditorFont); SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0); } } break; } case ID_EDITORFONTSIZECMB: { if (HIWORD(wParam) == CBN_SELCHANGE) { int Index = SendMessage((HWND)lParam, CB_GETCURSEL, 0, 0); char* Size = new char[33]; SendMessage((HWND)lParam, CB_GETLBTEXT, Index, (LPARAM)Size); EditorFont.Size = atoi(Size); delete[] Size; PreviewFont(GetDlgItem(hDlg, ID_EDITORFONTPREVIEWLBL), &EditorFont); SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0); } else if (HIWORD(wParam) == CBN_EDITCHANGE) { char* Size = GetWindowText((HWND)lParam); EditorFont.Size = atoi(Size); delete[] Size; PreviewFont(GetDlgItem(hDlg, ID_EDITORFONTPREVIEWLBL), &EditorFont); SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0); } break; } case ID_GUTTERFONTCMB: { if (HIWORD(wParam) == CBN_SELCHANGE) { int Index = SendMessage((HWND)lParam, CB_GETCURSEL, 0, 0); if (SendMessage((HWND)lParam, CB_GETLBTEXTLEN, Index, 0) <= 32) { SendMessage((HWND)lParam, CB_GETLBTEXT, Index, (LPARAM)GutterFont.Name); ListFontSizes(GetDlgItem(hDlg, ID_GUTTERFONTSIZECMB), GutterFont.Name); PreviewFont(GetDlgItem(hDlg, ID_GUTTERFONTPREVIEWLBL), &GutterFont); SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0); } } break; } case ID_GUTTERFONTSIZECMB: { if (HIWORD(wParam) == CBN_SELCHANGE) { int Index = SendMessage((HWND)lParam, CB_GETCURSEL, 0, 0); char* Size = new char[33]; SendMessage((HWND)lParam, CB_GETLBTEXT, Index, (LPARAM)Size); GutterFont.Size = atoi(Size); delete[] Size; PreviewFont(GetDlgItem(hDlg, ID_GUTTERFONTPREVIEWLBL), &GutterFont); SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0); } else if (HIWORD(wParam) == CBN_EDITCHANGE) { char* Size = GetWindowText((HWND)lParam); GutterFont.Size = atoi(Size); delete[] Size; PreviewFont(GetDlgItem(hDlg, ID_GUTTERFONTPREVIEWLBL), &GutterFont); SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0); } break; } } return TRUE; } case WM_INITDIALOG: { EditorFont = Editor->GetFont(); GutterFont = Editor->GetGutterFont(); /* Set up controls */ MakeEditScrollable(GetDlgItem(hDlg, ID_GUTTERSIZEEDT)); MakeEditScrollable(GetDlgItem(hDlg, ID_MARGINSIZEEDT)); ListFonts(GetDlgItem(hDlg, ID_EDITORFONTCMB)); ListFontSizes(GetDlgItem(hDlg, ID_EDITORFONTSIZECMB), EditorFont.Name); PreviewFont(GetDlgItem(hDlg, ID_EDITORFONTPREVIEWLBL), &EditorFont); ListFonts(GetDlgItem(hDlg, ID_GUTTERFONTCMB)); ListFontSizes(GetDlgItem(hDlg, ID_GUTTERFONTSIZECMB), GutterFont.Name); PreviewFont(GetDlgItem(hDlg, ID_GUTTERFONTPREVIEWLBL), &GutterFont); /* Display Preferences */ CheckDlgButton(hDlg, ID_SHOWGUTTERCHK, Editor->GetGutterVisible() ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hDlg, ID_SHOWMARGINCHK, Editor->GetMarginVisible() ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hDlg, ID_SHOWLINENUMBERSCHK, Editor->GetLineNumbersVisible() ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hDlg, ID_AUTOSIZEGUTTERCHK, Editor->GetAutoSizeGutter() ? BST_CHECKED : BST_UNCHECKED); SetDlgItemInt(hDlg, ID_GUTTERSIZEEDT, Editor->GetGutterSize(), FALSE); SetDlgItemInt(hDlg, ID_MARGINSIZEEDT, Editor->GetMarginSize(), FALSE); SendDlgItemMessage(hDlg, ID_EDITORFONTCMB, CB_SELECTSTRING, (WPARAM)-1, (LPARAM)EditorFont.Name); char* Str = IntToStr(EditorFont.Size); if (SendDlgItemMessage(hDlg, ID_EDITORFONTSIZECMB, CB_SELECTSTRING, (WPARAM)0, (LPARAM)Str) == CB_ERR) SetDlgItemText(hDlg, ID_EDITORFONTSIZECMB, Str); delete[] Str; SendDlgItemMessage(hDlg, ID_GUTTERFONTCMB, CB_SELECTSTRING, (WPARAM)-1, (LPARAM)GutterFont.Name); Str = IntToStr(GutterFont.Size); if (SendDlgItemMessage(hDlg, ID_GUTTERFONTSIZECMB, CB_SELECTSTRING, (WPARAM)0, (LPARAM)Str) == CB_ERR) SetDlgItemText(hDlg, ID_GUTTERFONTSIZECMB, Str); delete[] Str; /* Apply control modifiations */ SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(ID_SHOWMARGINCHK, BN_CLICKED), (LPARAM)GetDlgItem(hDlg, ID_SHOWMARGINCHK)); SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(ID_SHOWGUTTERCHK, BN_CLICKED), (LPARAM)GetDlgItem(hDlg, ID_SHOWGUTTERCHK)); SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(ID_SHOWLINENUMBERSCHK, BN_CLICKED), (LPARAM)GetDlgItem(hDlg, ID_SHOWLINENUMBERSCHK)); SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(ID_AUTOSIZEGUTTERCHK, BN_CLICKED), (LPARAM)GetDlgItem(hDlg, ID_AUTOSIZEGUTTERCHK)); return TRUE; } case WM_NOTIFY: { switch (((NMHDR *)lParam)->code) { case PSN_APPLY: { /* Save Preferences */ Editor->SetGutterVisible(IsDlgButtonChecked(hDlg, ID_SHOWGUTTERCHK) == BST_CHECKED); Editor->SetMarginVisible(IsDlgButtonChecked(hDlg, ID_SHOWMARGINCHK) == BST_CHECKED); Editor->SetLineNumbersVisible(IsDlgButtonChecked(hDlg, ID_SHOWLINENUMBERSCHK) == BST_CHECKED); Editor->SetAutoSizeGutter(IsDlgButtonChecked(hDlg, ID_AUTOSIZEGUTTERCHK) == BST_CHECKED); Editor->SetGutterSize(GetDlgItemInt(hDlg, ID_GUTTERSIZEEDT, NULL, FALSE)); Editor->SetMarginSize(GetDlgItemInt(hDlg, ID_MARGINSIZEEDT, NULL, FALSE)); Editor->SetFont(EditorFont); Editor->SetGutterFont(GutterFont); return TRUE; } } return FALSE; } default: return FALSE; } }