INT_PTR CALLBACK OptsDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: CenterDialogInParent(hDlg); InitOptionsFont(hDlg); ComboInitDialog(hDlg,GHCi_Combo_Editor); ComboInitDialog(hDlg,GHCi_Combo_Startup); ComboInitDialog(hDlg,GHCi_Combo_Prompt); break; case WM_COMMAND: { INT Code = HIWORD(wParam); INT Ctrl = LOWORD(wParam); if ((Ctrl == IDC_ChkFontBold && Code == BN_CLICKED) || (Ctrl == IDC_ChkFontItalic && Code == BN_CLICKED) || (Ctrl == IDC_TxtFontSize && Code == EN_CHANGE) || (Ctrl == IDC_LstFontFace && (Code == CBN_EDITCHANGE || Code == CBN_SELCHANGE)) ) UpdateFontPreview(hDlg); switch (LOWORD(wParam)) { case IDOK: { CHARFORMAT cf, prevCf; RegistryReadFont(&prevCf); CalculateFont(hDlg, &cf); if( (StringCmp(cf.szFaceName,prevCf.szFaceName)) || (cf.yHeight != prevCf.yHeight) || (cf.dwEffects != prevCf.dwEffects)) { RegistryWriteFont(&cf); RtfWindowUpdateFont(); } UpdateOptions(hDlg) ; EndDialog(hDlg, TRUE); return (INT_PTR)TRUE; } case IDCANCEL: EndDialog(hDlg, TRUE); return (INT_PTR)TRUE; } } break; } return (INT_PTR)FALSE; }
INT_PTR CALLBACK AboutDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) { switch (Msg) { case WM_INITDIALOG: { HWND hRTF = GetDlgItem(hDlg, rtfAbout); AboutData* ad = malloc(sizeof(AboutData)); HBITMAP hBmp; SetWindowLongPtr(hDlg, GWL_USERDATA, (LONG) ad); CenterDialogInParent(hDlg); ad->hImgList = ImageList_Create(BmpWidth, BmpHeight, ILC_COLOR24 | ILC_MASK, 1, 1); hBmp = LoadBitmap(hThisInstance, MAKEINTRESOURCE(BMP_ABOUT)); ImageList_AddMasked(ad->hImgList, hBmp, BmpTransparent); DeleteObject(hBmp); SendMessage(hRTF, EM_AUTOURLDETECT, TRUE, 0); SetWindowText(hRTF, AboutText); SendMessage(hRTF, EM_SETSEL, -1, -1); SendMessage(hRTF, EM_REPLACESEL, FALSE, (LPARAM) versionString); SendMessage(hRTF, EM_SETEVENTMASK, 0, ENM_LINK); } return (INT_PTR)TRUE; case WM_PAINT: { PAINTSTRUCT ps; AboutData* ad = (AboutData*) GetWindowLongPtr(hDlg, GWL_USERDATA); BeginPaint(hDlg, &ps); ImageList_Draw(ad->hImgList, 0, ps.hdc, 20, 25, ILD_TRANSPARENT); EndPaint(hDlg, &ps); } break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: case IDCANCEL: EndDialog(hDlg, TRUE); return (INT_PTR)TRUE; } break; case WM_NOTIFY: if (wParam == rtfAbout && ((LPNMHDR) lParam)->code == EN_LINK) { TEXTRANGE tr; char Buffer[1000]; ENLINK* enl = (ENLINK*) lParam; if (enl->msg == WM_LBUTTONUP) { tr.lpstrText = Buffer; tr.chrg.cpMin = enl->chrg.cpMin; tr.chrg.cpMax = enl->chrg.cpMax; SendMessage(enl->nmhdr.hwndFrom, EM_GETTEXTRANGE, 0, (LPARAM) &tr); ExecuteFile(Buffer); } } break; case WM_DESTROY: { AboutData* ad = (AboutData*) GetWindowLongPtr(hDlg, GWL_USERDATA); ImageList_Destroy(ad->hImgList); free(ad); } } return (INT_PTR)FALSE; }
/* Handles browse Tycons dialog box */ LRESULT CALLBACK BrowseTyconsDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { static List tyconList = NIL; List tycons=NIL; Tycon tc; UINT theTycon; WORD NotifyCode, wId; RECT aRect, DlgRect; HBITMAP hBitmap; HBITMAP hBmp; BITMAP bm; static HBITMAP hTCBm, hTCSelBm, hDBm, hDSelBm, hTSBm, hTSSelBm, hNTBm, hNTSelBm, hSBm, hSSelBm, hIBm, hISelBm; CHAR Buffer[300]; DRAWITEMSTRUCT FAR *lpdis; LPMEASUREITEMSTRUCT lpmis; BOOL Selected = FALSE; Inst theInst; NotifyCode = HIWORD (wParam); wId = LOWORD (wParam); switch (msg) { case WM_INITDIALOG: CenterDialogInParent(hDlg); SetDialogFont (hDlg, hDialogFont); tyconList = addTyconsMatching((String)0, NIL); /* Clear the redraw flag */ SendDlgItemMessage(hDlg, LB_TYCONS ,WM_SETREDRAW, FALSE, 0L); for (tycons=tyconList; nonNull(tycons); tycons=tl(tycons)) { if (nonNull(tycons)) { tc = hd(tycons); fprintf(stdstr, "%s -- in %s\n",textToStr(tycon(tc).text),textToStr(module(tycon(tc).mod).text)); SendDlgItemMessage(hDlg, LB_TYCONS ,LB_ADDSTRING, 0, (LONG)(LPSTR) stdstrbuff); SendDlgItemMessage(hDlg, LB_TYCONS, LB_SETCURSEL, 0, 0L); } /* Set the redraw flag and force repaint. */ SendDlgItemMessage(hDlg, LB_TYCONS ,WM_SETREDRAW, TRUE, 0L); InvalidateRect(GetDlgItem(hDlg, LB_TYCONS), NULL, TRUE); } theTycon = 0; SetTycon(hDlg, theTycon, tyconList); hTCBm = LoadBitmap (hThisInstance, "TYPECONSBMP"); MapBitmap (hTCBm, RGB(0,128,128), GetSysColor(COLOR_WINDOW)); hTCSelBm = LoadBitmap (hThisInstance, "TYPECONSBMP"); MapBitmap (hTCSelBm, RGB(0,128,128), GetSysColor(COLOR_HIGHLIGHT)); hDBm = LoadBitmap (hThisInstance, "DATACONSBMP"); MapBitmap (hDBm, RGB(0,128,128), GetSysColor(COLOR_WINDOW)); hDSelBm = LoadBitmap (hThisInstance, "DATACONSBMP"); MapBitmap (hDSelBm, RGB(0,128,128), GetSysColor(COLOR_HIGHLIGHT)); hTSBm = LoadBitmap (hThisInstance, "TYPESINBMP"); MapBitmap (hTSBm, RGB(0,128,128), GetSysColor(COLOR_WINDOW)); hTSSelBm = LoadBitmap (hThisInstance, "TYPESINBMP"); MapBitmap (hTSSelBm, RGB(0,128,128), GetSysColor(COLOR_HIGHLIGHT)); hNTBm = LoadBitmap (hThisInstance, "NEWTYPEBMP"); MapBitmap (hNTBm, RGB(0,128,128), GetSysColor(COLOR_WINDOW)); hNTSelBm = LoadBitmap (hThisInstance, "NEWTYPEBMP"); MapBitmap (hNTSelBm, RGB(0,128,128), GetSysColor(COLOR_HIGHLIGHT)); hSBm = LoadBitmap (hThisInstance, "SELECTORBMP"); MapBitmap (hSBm, RGB(0,128,128), GetSysColor(COLOR_WINDOW)); hSSelBm = LoadBitmap (hThisInstance, "SELECTORBMP"); MapBitmap (hSSelBm, RGB(0,128,128), GetSysColor(COLOR_HIGHLIGHT)); hIBm = LoadBitmap (hThisInstance, "INSTANCEBMP"); MapBitmap (hIBm, RGB(0,128,128), GetSysColor(COLOR_WINDOW)); hISelBm = LoadBitmap (hThisInstance, "INSTANCEBMP"); MapBitmap (hISelBm, RGB(0,128,128), GetSysColor(COLOR_HIGHLIGHT)); /* set focus to search box (must return FALSE) */ SetFocus (GetDlgItem(hDlg, IDC_SEARCHTYCON)); return FALSE; case WM_DESTROY: DeleteObject(hTCBm); DeleteObject(hTCSelBm); DeleteObject(hDBm); DeleteObject(hDSelBm); DeleteObject(hTSBm); DeleteObject(hTSSelBm); DeleteObject(hNTBm); DeleteObject(hNTSelBm); DeleteObject(hSBm); DeleteObject(hSSelBm); DeleteObject(hIBm); DeleteObject(hISelBm); break; case WM_CTLCOLORBTN: case WM_CTLCOLORDLG: case WM_CTLCOLOREDIT: case WM_CTLCOLORLISTBOX: case WM_CTLCOLORMSGBOX: case WM_CTLCOLORSCROLLBAR: case WM_CTLCOLORSTATIC: break; case WM_MEASUREITEM: lpdis = (DRAWITEMSTRUCT FAR *) lParam; if (lpdis->CtlID == LB_TYCONS || lpdis->CtlID == LB_CONS || lpdis->CtlID == LB_TYCONSINST) { lpmis = (LPMEASUREITEMSTRUCT) lParam; /* Set the height of the list box items to Bitmap height */ hBmp = LoadBitmap(hThisInstance, "CLASSBMP"); GetObject(hBmp, sizeof(BITMAP), &bm); DeleteObject(hBmp); lpmis->itemHeight = bm.bmHeight+1; return TRUE; } break; case WM_DRAWITEM: lpdis = (DRAWITEMSTRUCT FAR *) lParam; if (lpdis->CtlID == LB_TYCONS || lpdis->CtlID == LB_CONS || lpdis->CtlID == LB_TYCONSINST) { if (lpdis->itemID == (UINT)-1) { return TRUE; } switch (lpdis->itemAction) { case ODA_DRAWENTIRE: case ODA_SELECT: case ODA_FOCUS: if ((lpdis->itemState & ODS_SELECTED) /*&& (lpdis->itemState & ODS_FOCUS)*/) { SetBkColor(lpdis->hDC, GetSysColor(COLOR_HIGHLIGHT)); SetTextColor(lpdis->hDC, GetSysColor(COLOR_HIGHLIGHTTEXT)); Selected = TRUE; } else { SetBkColor(lpdis->hDC, GetSysColor(COLOR_WINDOW)); SetTextColor(lpdis->hDC, GetSysColor(COLOR_WINDOWTEXT)); } break; default: return FALSE; } SendDlgItemMessage(hDlg, lpdis->CtlID, LB_GETTEXT, lpdis->itemID, (LPARAM) Buffer); ExtTextOut(lpdis->hDC, lpdis->rcItem.left+21, lpdis->rcItem.top, ETO_OPAQUE, &(lpdis->rcItem), Buffer, strlen(Buffer), NULL); switch (lpdis->CtlID) { case LB_TYCONS: theTycon = (UINT) lpdis->itemID; tc = nth(theTycon,tyconList); switch(tycon(tc).what) { case RESTRICTSYN: case SYNONYM: hBmp = Selected ? hTSSelBm : hTSBm; break; case DATATYPE: hBmp = Selected ? hTCSelBm : hTCBm; break; case NEWTYPE: hBmp = Selected ? hNTSelBm : hNTBm; break; } break; case LB_CONS: if (lpdis->itemID>=(UINT)numCfuns) hBmp = Selected ? hSSelBm : hSBm; else hBmp = Selected ? hDSelBm : hDBm; break; case LB_TYCONSINST: theInst = (Inst) SendDlgItemMessage(hDlg, lpdis->CtlID, LB_GETITEMDATA, lpdis->itemID, 0); if (nonNull(inst(theInst).specifics)) { printContext(stdstr,inst(theInst).specifics); fprintf(stdstr," => "); } printPred(stdstr,inst(theInst).head); fprintf (stdstr, " -- in %s \n", textToStr(module(moduleOfScript(scriptThisInst(theInst))).text)); ExtTextOut(lpdis->hDC, lpdis->rcItem.left+21, lpdis->rcItem.top, ETO_OPAQUE, &(lpdis->rcItem), stdstrbuff, strlen(stdstrbuff), NULL); hBmp = Selected ? hISelBm : hIBm; break; } DrawBitmap (lpdis->hDC, hBmp, (lpdis->rcItem.left)+4, lpdis->rcItem.top); /* If selected draw rectangle */ if ((lpdis->itemState & ODS_SELECTED)&&(lpdis->itemState & ODS_FOCUS)) { DrawFocusRect(lpdis->hDC, &(lpdis->rcItem)); } return TRUE; } case WM_PAINT: { HDC hDC; PAINTSTRUCT Ps; BeginPaint(hDlg, &Ps); hDC = Ps.hdc; /* Paint classes Bitmap */ GetWindowRect(hDlg, &DlgRect); GetWindowRect(GetDlgItem(hDlg, ID_PLACEBITMAP), &aRect); hBitmap = LoadMappedBitmap(hThisInstance, "TYCONSDLGBMP"); DrawBitmap(hDC, hBitmap, aRect.left-DlgRect.left-GetSystemMetrics(SM_CXDLGFRAME), aRect.top-DlgRect.top-GetSystemMetrics(SM_CYDLGFRAME)-GetSystemMetrics(SM_CYCAPTION)); DeleteObject(hBitmap); EndPaint(hDlg, &Ps); } break; case WM_COMMAND: switch (LOWORD(wId)) { case LB_TYCONS: switch(NotifyCode) { case LBN_SELCHANGE: { /* A new tycon was selected */ theTycon = (UINT) SendDlgItemMessage(hDlg, LB_TYCONS ,LB_GETCURSEL, 0, 0L); SetTycon(hDlg, theTycon, tyconList); } break; case LBN_DBLCLK: { /* Open in text editor script file with instance definition */ INT TheTycon; Tycon tc; /* Get selected tycon */ TheTycon = (UINT) SendDlgItemMessage(hDlg, LB_TYCONS ,LB_GETCURSEL, 0, 0L); tc = nth(TheTycon,tyconList); if (isTycon(tc) && tycon(tc).line) { setLastEdit(getScriptName(scriptThisTycon(tc)), tycon(tc).line); runEditor(); } else { MessageBox(hDlg, "Primitive type:\nNo definition available.", appName, MB_ICONINFORMATION | MB_OK); } } break; } break; case LB_TYCONSINST: switch(NotifyCode) { case LBN_DBLCLK: { Inst currInst; currInst = (Inst) SendDlgItemMessage(hDlg, LB_TYCONSINST, LB_GETITEMDATA, SendDlgItemMessage(hDlg, LB_TYCONSINST ,LB_GETCURSEL, 0, 0L), 0L); /* Find instance module */ setLastEdit(getScriptName(scriptThisInst(currInst)), inst(currInst).line); runEditor(); } break; } break; case IDC_SEARCHTYCON: /* Search a name */ switch(HIBYTE(wId)) { case HIBYTE(EN_CHANGE): { CHAR Buffer[300]; /* Get edit control contents */ SendDlgItemMessage(hDlg, IDC_SEARCHTYCON, WM_GETTEXT, 300, (LPARAM) ((LPSTR) Buffer)); /* Search in names list box */ SendDlgItemMessage(hDlg, LB_TYCONS, LB_SELECTSTRING, 0, (LPARAM) ((LPSTR) Buffer)); /* Update window contents */ DlgSendMessage(hDlg, WM_COMMAND, LB_TYCONS, MAKELONG(0, LBN_SELCHANGE)); } break; } break; case LB_CONS: switch(NotifyCode) { case LBN_DBLCLK: { /* Open in text editor script file with constructor definition */ DlgSendMessage(hDlg, WM_COMMAND, ID_EDITTYCON, 0L); break; } } break; case ID_EDITTYCON: /* Pushed on Edit tycon button */ if (SendDlgItemMessage(hDlg, LB_TYCONS, LB_GETCURSEL, 0, 0L) != LB_ERR) DlgSendMessage(hDlg, WM_COMMAND, LB_TYCONS, MAKELONG(0, LBN_DBLCLK)); break; case ID_EDITTYCONSINST: if (SendDlgItemMessage(hDlg, LB_TYCONSINST, LB_GETCURSEL, 0, 0L) != LB_ERR) DlgSendMessage(hDlg, WM_COMMAND, LB_TYCONSINST, MAKELONG(0, LBN_DBLCLK)); break; case IDCANCEL: /* Close dialog */ case IDOK: EndDialog(hDlg, TRUE); return TRUE; default: return TRUE; } } return FALSE; }
/* Handles browse classes dialog box */ LRESULT CALLBACK BrowseClassesDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { INT i; static Class currClass; Class theClass; Inst theInst; Name theMember; WORD NotifyCode, wId; HBITMAP hBitmap; RECT aRect, DlgRect; HBITMAP hBmp; BITMAP bm; DRAWITEMSTRUCT FAR *lpdis; LPMEASUREITEMSTRUCT lpmis; LPCOMPAREITEMSTRUCT lpcis; BOOL Selected = FALSE; static HBITMAP hCBm, hCSelBm, hIBm, hISelBm, hMBm, hMSelBm; String string; CHAR string1[256]; NotifyCode = HIWORD (wParam); wId = LOWORD (wParam); switch (msg) { case WM_INITDIALOG: CenterDialogInParent(hDlg); SetDialogFont (hDlg, hDialogFont); SendDlgItemMessage(hDlg, LB_CLASS, LB_SETHORIZONTALEXTENT, (WPARAM)300, 0L); SendDlgItemMessage(hDlg, LB_MEMBERS, LB_SETHORIZONTALEXTENT, (WPARAM)400, 0L); /* Create list of classes and set current class */ for(i=CLASSMIN; i<classMax(); i++) { SendDlgItemMessage(hDlg, LB_CLASS ,LB_ADDSTRING, 0, (LPARAM)(LPSTR) i); } SendDlgItemMessage(hDlg, LB_CLASS, LB_SETCURSEL, 0, 0L); currClass = (Class) SendDlgItemMessage(hDlg, LB_CLASS ,LB_GETITEMDATA, (WPARAM) SendDlgItemMessage(hDlg, LB_CLASS ,LB_GETCURSEL, 0, 0L), 0L); SetClass(hDlg, currClass); /* Create Bitmaps */ hCBm = LoadBitmap (hThisInstance, "CLASSBMP"); MapBitmap (hCBm, RGB(0,128,128), GetSysColor(COLOR_WINDOW)); hCSelBm = LoadBitmap (hThisInstance, "CLASSBMP"); MapBitmap (hCSelBm, RGB(0,128,128), GetSysColor(COLOR_HIGHLIGHT)); hIBm = LoadBitmap (hThisInstance, "INSTANCEBMP"); MapBitmap (hIBm, RGB(0,128,128), GetSysColor(COLOR_WINDOW)); hISelBm = LoadBitmap (hThisInstance, "INSTANCEBMP"); MapBitmap (hISelBm, RGB(0,128,128), GetSysColor(COLOR_HIGHLIGHT)); hMBm = LoadBitmap (hThisInstance, "MEMBERBMP"); MapBitmap (hMBm, RGB(0,128,128), GetSysColor(COLOR_WINDOW)); hMSelBm = LoadBitmap (hThisInstance, "MEMBERBMP"); MapBitmap (hMSelBm, RGB(0,128,128), GetSysColor(COLOR_HIGHLIGHT)); return TRUE; case WM_DESTROY: /* Destroy Bitmaps */ DeleteObject (hCBm); DeleteObject (hCSelBm); DeleteObject (hIBm); DeleteObject (hISelBm); DeleteObject (hMBm); DeleteObject (hMSelBm); break; case WM_CTLCOLORBTN: case WM_CTLCOLORDLG: case WM_CTLCOLOREDIT: case WM_CTLCOLORLISTBOX: case WM_CTLCOLORMSGBOX: case WM_CTLCOLORSCROLLBAR: case WM_CTLCOLORSTATIC: break; case WM_PAINT: { HDC hDC; PAINTSTRUCT Ps; BeginPaint(hDlg, &Ps); hDC = Ps.hdc; /* Paint classes Bitmap */ GetWindowRect(hDlg, &DlgRect); GetWindowRect(GetDlgItem(hDlg, ID_PLACEBITMAP), &aRect); hBitmap = LoadMappedBitmap(hThisInstance, "CLASSESDLGBMP"); DrawBitmap(hDC, hBitmap, aRect.left-DlgRect.left-GetSystemMetrics(SM_CXDLGFRAME), aRect.top-DlgRect.top-GetSystemMetrics(SM_CYDLGFRAME)-GetSystemMetrics(SM_CYCAPTION)); DeleteObject(hBitmap); EndPaint(hDlg, &Ps); } break; case WM_COMPAREITEM: { lpcis = (COMPAREITEMSTRUCT FAR *) lParam; switch (wParam) { case LB_CLASS: return strcmp (textToStr(cclass(lpcis->itemData1).text), textToStr(cclass(lpcis->itemData2).text)); case LB_INSTANCES: if (nonNull(inst(lpcis->itemData1).specifics)) { printContext(stdstr,inst(lpcis->itemData1).specifics); fprintf(stdstr," => "); } printPred(stdstr,inst(lpcis->itemData1).head); fprintf(stdstr,"\n"); strcpy (string1, stdstrbuff); if (nonNull(inst(lpcis->itemData2).specifics)) { printContext(stdstr,inst(lpcis->itemData2).specifics); fprintf(stdstr," => "); } printPred(stdstr,inst(lpcis->itemData2).head); fprintf(stdstr,"\n"); return strcmp (string1, stdstrbuff); case LB_MEMBERS: printExp (stdstr, lpcis->itemData1); fprintf(stdstr,"\n"); strcpy (string1, stdstrbuff); printExp (stdstr, lpcis->itemData2); fprintf(stdstr,"\n"); return strcmp (string1, stdstrbuff); } } break; case WM_MEASUREITEM: lpdis = (DRAWITEMSTRUCT FAR *) lParam; if (lpdis->CtlID == LB_CLASS || lpdis->CtlID == LB_INSTANCES || lpdis->CtlID == LB_MEMBERS ) { lpmis = (LPMEASUREITEMSTRUCT) lParam; /* Set the height of the list box items to Bitmap height */ hBmp = LoadBitmap(hThisInstance, "CLASSBMP"); GetObject(hBmp, sizeof(BITMAP), &bm); DeleteObject(hBmp); lpmis->itemHeight = bm.bmHeight+1; lpmis->itemWidth = 50000; return TRUE; } break; case WM_DRAWITEM: lpdis = (DRAWITEMSTRUCT FAR *) lParam; if (lpdis->CtlID == LB_CLASS || lpdis->CtlID == LB_INSTANCES || lpdis->CtlID == LB_MEMBERS ) { if (lpdis->itemID == (UINT)-1) { return TRUE; } switch (lpdis->itemAction) { case ODA_DRAWENTIRE: case ODA_SELECT: case ODA_FOCUS: if ((lpdis->itemState & ODS_SELECTED) /*&& (lpdis->itemState & ODS_FOCUS)*/) { SetBkColor(lpdis->hDC, GetSysColor(COLOR_HIGHLIGHT)); SetTextColor(lpdis->hDC, GetSysColor(COLOR_HIGHLIGHTTEXT)); Selected = TRUE; } else { SetBkColor(lpdis->hDC, GetSysColor(COLOR_WINDOW)); SetTextColor(lpdis->hDC, GetSysColor(COLOR_WINDOWTEXT)); } break; default: return FALSE; } switch (lpdis->CtlID) { case LB_CLASS: theClass = (Class) SendDlgItemMessage(hDlg, lpdis->CtlID, LB_GETITEMDATA, lpdis->itemID, 0); printPred(stdstr,cclass(theClass).head); fprintf (stdstr, " -- in %s\n", textToStr(module(cclass(theClass).mod).text)); ExtTextOut(lpdis->hDC, lpdis->rcItem.left+21, lpdis->rcItem.top, ETO_OPAQUE, &(lpdis->rcItem), stdstrbuff, strlen(stdstrbuff), NULL); hBmp = Selected ? hCSelBm : hCBm; break; case LB_INSTANCES: theInst = (Inst) SendDlgItemMessage(hDlg, lpdis->CtlID, LB_GETITEMDATA, lpdis->itemID, 0); if (nonNull(inst(theInst).specifics)) { printContext(stdstr,inst(theInst).specifics); fprintf(stdstr," => "); } printPred(stdstr,inst(theInst).head); fprintf (stdstr, " -- in %s \n", textToStr(module(moduleOfScript(scriptThisInst(theInst))).text)); ExtTextOut(lpdis->hDC, lpdis->rcItem.left+21, lpdis->rcItem.top, ETO_OPAQUE, &(lpdis->rcItem), stdstrbuff, strlen(stdstrbuff), NULL); hBmp = Selected ? hISelBm : hIBm; break; case LB_MEMBERS: theMember = (Name) SendDlgItemMessage(hDlg, lpdis->CtlID, LB_GETITEMDATA, lpdis->itemID, 0); printExp(stdstr,theMember); fprintf(stdstr, " :: "); printType(stdstr,name(theMember).type); fprintf(stdstr,"\n"); ExtTextOut(lpdis->hDC, lpdis->rcItem.left+21, lpdis->rcItem.top, ETO_OPAQUE, &(lpdis->rcItem), stdstrbuff, strlen(stdstrbuff), NULL); hBmp = Selected ? hMSelBm : hMBm; break; } DrawBitmap (lpdis->hDC, hBmp, (lpdis->rcItem.left)+4, lpdis->rcItem.top); /* If selected draw rectangle */ if ((lpdis->itemState & ODS_SELECTED)&&(lpdis->itemState & ODS_FOCUS)) { DrawFocusRect(lpdis->hDC, &(lpdis->rcItem)); } return TRUE; } case WM_COMMAND: switch (wId) { case LB_CLASS: switch(NotifyCode) { case LBN_SELCHANGE: /* select a new class */ currClass = (Class) SendDlgItemMessage(hDlg, LB_CLASS ,LB_GETITEMDATA, SendDlgItemMessage(hDlg, LB_CLASS ,LB_GETCURSEL, 0, 0L), 0L); SetClass(hDlg, currClass); break; case LBN_DBLCLK: { /* Open in text editor script file with class definition */ currClass = (Class) SendDlgItemMessage(hDlg, LB_CLASS ,LB_GETITEMDATA, SendDlgItemMessage(hDlg, LB_CLASS ,LB_GETCURSEL, 0, 0L), 0L); currClass = (Class) SendDlgItemMessage(hDlg, LB_CLASS ,LB_GETITEMDATA, SendDlgItemMessage(hDlg, LB_CLASS ,LB_GETCURSEL, 0, 0L), 0L); setLastEdit(getScriptName(scriptThisClass(currClass)), cclass(currClass).line); runEditor(); } break; } break; case LB_MEMBERS: case LB_INSTANCES: switch(NotifyCode) {/* Open in text editor script file with instance definition */ case LBN_DBLCLK: { Inst currInst; currInst = (Inst) SendDlgItemMessage(hDlg, LB_INSTANCES, LB_GETITEMDATA, SendDlgItemMessage(hDlg, LB_INSTANCES ,LB_GETCURSEL, 0, 0L), 0L); /* Find instance module */ setLastEdit(getScriptName(scriptThisInst(currInst)), inst(currInst).line); runEditor(); } break; } break; case ID_HIERARCHY: /* Draw classes hierarchy */ DrawClassesHierarchy(); break; case ID_EDITCLASS: /* Pushed on Edit class button */ if (SendDlgItemMessage(hDlg, LB_CLASS, LB_GETCURSEL, 0, 0L) != LB_ERR) DlgSendMessage(hDlg, WM_COMMAND, LB_CLASS, MAKELONG(0, LBN_DBLCLK)); break; case ID_EDITINSTANCE: /* Pushed on Edit instance button */ if (SendDlgItemMessage(hDlg, LB_INSTANCES, LB_GETCURSEL, 0, 0L) != LB_ERR) DlgSendMessage(hDlg, WM_COMMAND, LB_INSTANCES, MAKELONG(0, LBN_DBLCLK)); break; case IDCANCEL: /* Close dialog */ case IDOK: EndDialog(hDlg, TRUE); return TRUE; default: return TRUE; } } return FALSE; }
/* Handles browse names dialog box */ LRESULT CALLBACK BrowseNamesDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { static List namesList = NIL; List names=NIL; struct strName nm; Name n; UINT theName; WORD NotifyCode, wId; RECT aRect, DlgRect; HBITMAP hBitmap; HBITMAP hBmp; BITMAP bm; static HBITMAP hPBm, hPSelBm, hDBm, hDSelBm, hMBm, hMSelBm, hNBm, hNSelBm, hSBm, hSSelBm; CHAR Buffer[300]; DRAWITEMSTRUCT FAR *lpdis; LPMEASUREITEMSTRUCT lpmis; BOOL Selected = FALSE; NotifyCode = HIWORD (wParam); wId = LOWORD (wParam); switch (msg) { case WM_INITDIALOG: CenterDialogInParent(hDlg); SetDialogFont (hDlg, hDialogFont); namesList = addNamesMatching((String)0, NIL); /* Clear the redraw flag */ SendDlgItemMessage(hDlg, LB_NAMES ,WM_SETREDRAW, FALSE, 0L); for (names=namesList; nonNull(names); names=tl(names)) { if (nonNull(names)) { nm = name(hd(names)); fprintf(stdstr, "%s -- in %s\n",textToStr(nm.text),textToStr(module(nm.mod).text)); SendDlgItemMessage(hDlg, LB_NAMES ,LB_ADDSTRING, 0, (LONG)(LPSTR) stdstrbuff); SendDlgItemMessage(hDlg, LB_NAMES, LB_SETCURSEL, 0, 0L); } } /* Set the redraw flag and force repaint. */ SendDlgItemMessage(hDlg, LB_NAMES ,WM_SETREDRAW, TRUE, 0L); InvalidateRect(GetDlgItem(hDlg, LB_NAMES), NULL, TRUE); theName = 0; SetName(hDlg, theName, namesList); hPBm = LoadBitmap (hThisInstance, "PRIMBMP"); MapBitmap (hPBm, RGB(0,128,128), GetSysColor(COLOR_WINDOW)); hPSelBm = LoadBitmap (hThisInstance, "PRIMBMP"); MapBitmap (hPSelBm, RGB(0,128,128), GetSysColor(COLOR_HIGHLIGHT)); hDBm = LoadBitmap (hThisInstance, "DATACONSBMP"); MapBitmap (hDBm, RGB(0,128,128), GetSysColor(COLOR_WINDOW)); hDSelBm = LoadBitmap (hThisInstance, "DATACONSBMP"); MapBitmap (hDSelBm, RGB(0,128,128), GetSysColor(COLOR_HIGHLIGHT)); hMBm = LoadBitmap (hThisInstance, "MEMBERBMP"); MapBitmap (hMBm, RGB(0,128,128), GetSysColor(COLOR_WINDOW)); hMSelBm = LoadBitmap (hThisInstance, "MEMBERBMP"); MapBitmap (hMSelBm, RGB(0,128,128), GetSysColor(COLOR_HIGHLIGHT)); hNBm = LoadBitmap (hThisInstance, "NAMEBMP"); MapBitmap (hNBm, RGB(0,128,128), GetSysColor(COLOR_WINDOW)); hNSelBm = LoadBitmap (hThisInstance, "NAMEBMP"); MapBitmap (hNSelBm, RGB(0,128,128), GetSysColor(COLOR_HIGHLIGHT)); hSBm = LoadBitmap (hThisInstance, "SELECTORBMP"); MapBitmap (hSBm, RGB(0,128,128), GetSysColor(COLOR_WINDOW)); hSSelBm = LoadBitmap (hThisInstance, "SELECTORBMP"); MapBitmap (hSSelBm, RGB(0,128,128), GetSysColor(COLOR_HIGHLIGHT)); /* set focus to search box (must return FALSE) */ SetFocus (GetDlgItem(hDlg, IDC_SEARCHNAME)); return FALSE; case WM_DESTROY: DeleteObject(hPBm); DeleteObject(hPSelBm); DeleteObject(hDBm); DeleteObject(hDSelBm); DeleteObject(hMBm); DeleteObject(hMSelBm); DeleteObject(hNBm); DeleteObject(hNSelBm); DeleteObject(hSBm); DeleteObject(hSSelBm); break; case WM_CTLCOLORBTN: case WM_CTLCOLORDLG: case WM_CTLCOLOREDIT: case WM_CTLCOLORLISTBOX: case WM_CTLCOLORMSGBOX: case WM_CTLCOLORSCROLLBAR: case WM_CTLCOLORSTATIC: break; case WM_MEASUREITEM: lpdis = (DRAWITEMSTRUCT FAR *) lParam; if (lpdis->CtlID == LB_NAMES) { lpmis = (LPMEASUREITEMSTRUCT) lParam; /* Set the height of the list box items to Bitmap height */ hBmp = LoadBitmap(hThisInstance, "PRIMBMP"); GetObject(hBmp, sizeof(BITMAP), &bm); DeleteObject(hBmp); lpmis->itemHeight = bm.bmHeight+1; return TRUE; } break; case WM_DRAWITEM: lpdis = (DRAWITEMSTRUCT FAR *) lParam; if (lpdis->CtlID == LB_NAMES) { if (lpdis->itemID == (UINT)-1) { return TRUE; } switch (lpdis->itemAction) { case ODA_DRAWENTIRE: case ODA_SELECT: case ODA_FOCUS: if ((lpdis->itemState & ODS_SELECTED) /*&& (lpdis->itemState & ODS_FOCUS)*/) { SetBkColor(lpdis->hDC, GetSysColor(COLOR_HIGHLIGHT)); SetTextColor(lpdis->hDC, GetSysColor(COLOR_HIGHLIGHTTEXT)); Selected = TRUE; } else { SetBkColor(lpdis->hDC, GetSysColor(COLOR_WINDOW)); SetTextColor(lpdis->hDC, GetSysColor(COLOR_WINDOWTEXT)); } break; default: return FALSE; } SendDlgItemMessage(hDlg, lpdis->CtlID, LB_GETTEXT, lpdis->itemID, (LPARAM) Buffer); ExtTextOut(lpdis->hDC, lpdis->rcItem.left+21, lpdis->rcItem.top, ETO_OPAQUE, &(lpdis->rcItem), Buffer, strlen(Buffer), NULL); n = nth(lpdis->itemID, namesList); if (isCfun(n)) hBmp = Selected ? hDSelBm : hDBm; else if (isMfun(n)) hBmp = Selected ? hMSelBm : hMBm; else if (isSfun(n)) hBmp = Selected ? hSSelBm : hSBm; else if (name(n).primDef) hBmp = Selected ? hPSelBm : hPBm; else hBmp = Selected ? hNSelBm : hNBm; DrawBitmap (lpdis->hDC, hBmp, (lpdis->rcItem.left)+4, lpdis->rcItem.top); /* If selected draw rectangle */ if ((lpdis->itemState & ODS_SELECTED)&&(lpdis->itemState & ODS_FOCUS)) { DrawFocusRect(lpdis->hDC, &(lpdis->rcItem)); } return TRUE; } case WM_PAINT: { HDC hDC; PAINTSTRUCT Ps; BeginPaint(hDlg, &Ps); hDC = Ps.hdc; /* Paint classes Bitmap */ GetWindowRect(hDlg, &DlgRect); GetWindowRect(GetDlgItem(hDlg, ID_PLACEBITMAP), &aRect); hBitmap = LoadMappedBitmap(hThisInstance, "NAMESDLGBMP"); DrawBitmap(hDC, hBitmap, aRect.left-DlgRect.left-GetSystemMetrics(SM_CXDLGFRAME), aRect.top-DlgRect.top-GetSystemMetrics(SM_CYDLGFRAME)-GetSystemMetrics(SM_CYCAPTION)); DeleteObject(hBitmap); EndPaint(hDlg, &Ps); } break; case WM_COMMAND: switch (wId) { case LB_NAMES: switch(NotifyCode) { case LBN_SELCHANGE: /* Select a new name */ theName = (UINT) SendDlgItemMessage(hDlg, LB_NAMES ,LB_GETCURSEL, 0, 0L); SetName(hDlg, theName, namesList); break; case LBN_DBLCLK: { /* Open in text editor script file with name definition */ Name n; /* Get the selected name */ theName = (UINT) SendDlgItemMessage(hDlg, LB_NAMES ,LB_GETCURSEL, 0, 0L); n = nth(theName, namesList); if (!name(n).primDef) { setLastEdit(getScriptName(scriptThisName(n)), name(n).line); runEditor(); } else { MessageBox(hDlg, "Primitive function:\nNo definition available.", appName, MB_ICONINFORMATION | MB_OK); } } break; } break; case IDC_SEARCHNAME: /* Search a name */ switch(HIBYTE(NotifyCode)) { case HIBYTE(EN_CHANGE): { CHAR Buffer[300]; /* Get edit control contents */ SendDlgItemMessage(hDlg, IDC_SEARCHNAME, WM_GETTEXT, 300, (LPARAM) ((LPSTR) Buffer)); /* Search in names list box */ SendDlgItemMessage(hDlg, LB_NAMES, LB_SELECTSTRING, 0, (LPARAM) ((LPSTR) Buffer)); /* Update window contents */ DlgSendMessage(hDlg, WM_COMMAND, LB_NAMES, MAKELONG(0, LBN_SELCHANGE)); } break; } break; case ID_EDITNAME: /* Pushed on Edit name button */ if (SendDlgItemMessage(hDlg, LB_NAMES, LB_GETCURSEL, 0, 0L) != LB_ERR) DlgSendMessage(hDlg, WM_COMMAND, LB_NAMES, MAKELONG(0, LBN_DBLCLK)); break; case IDCANCEL: /* Close dialog */ case IDOK: EndDialog(hDlg, TRUE); return TRUE; default: return TRUE; } } return FALSE; }