Subversion Repositories filter_foundry

Rev

Rev 18 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. /* Win32 user interface routines
  2.    Copyright (C) 2003-4 Toby Thain <toby@telegraphics.com.au> */
  3.  
  4. #include "world.h"
  5.  
  6. #include "piabout.h"
  7.  
  8. #include <windows.h>
  9. #include <commctrl.h>
  10.  
  11. #include "ff.h"
  12. #include "version.h"
  13.  
  14. extern UIRECT preview_rect;
  15. extern double zoomfactor;
  16. extern Point preview_scroll;
  17.  
  18. HWND preview_hwnd;
  19.  
  20. extern HANDLE hDllInstance;
  21.  
  22. void DoAbout(AboutRecordPtr pb){
  23.         char s[0x200];
  24.         int n;
  25.         PlatformData *p = (PlatformData*)pb->platformData;
  26.  
  27.         n = sprintf(s,"Filter Foundry %s\n(C) 2003-5 Toby Thain <toby@telegraphics.com.au>\n\n",VERSION_STR);
  28.         if(gdata->standalone){
  29.                 sprintf(s+n,"Standalone filter:\n%s by %s.\n%s",
  30.                         INPLACEP2CSTR(gdata->parm.title),
  31.                         INPLACEP2CSTR(gdata->parm.author),
  32.                         INPLACEP2CSTR(gdata->parm.copyright));
  33.         }else
  34.                 strcat(s,"Latest version available from http://www.telegraphics.com.au/sw/\n\
  35. Please contact the author with any bug reports, suggestions or comments.\n\
  36. If you use this program and like it, please consider making a donation\n\
  37. through www.paypal.com (US$5 suggested) to the address above.");
  38.         MessageBox((HWND)p->hwnd,s,"About Filter Foundry",MB_APPLMODAL|MB_ICONINFORMATION|MB_OK);
  39. }
  40.  
  41. Boolean simplealert(char *s){
  42.         return MessageBox(NULL,s,"Filter Foundry",MB_APPLMODAL|MB_ICONERROR|MB_OK) == IDOK;
  43. }
  44.  
  45. BOOL CALLBACK maindlgproc(HWND hDlg, UINT wMsg, WPARAM wParam, LPARAM lParam);
  46.  
  47. BOOL CALLBACK maindlgproc(HWND hDlg, UINT wMsg, WPARAM wParam, LPARAM lParam){
  48.         static POINT origpos;
  49.         static long *pdata; // keep "data" pointer around
  50.         static HICON cicon;
  51.         static Point origscroll;
  52.         static Boolean panning = false;
  53.  
  54.         int item,cmd,i;
  55.         POINT newpos;
  56.         DRAWITEMSTRUCT *pdi;
  57.         UIRECT r;
  58.         Point newscroll;
  59.         HFONT hfnt;
  60.        
  61.         extern Boolean doupdates;
  62.         extern Handle preview_handle;
  63.  
  64.         switch(wMsg){
  65.         case WM_INITDIALOG:
  66. DBG("dlgproc: WM_INITDIALOG");
  67.                 centre_window(hDlg);
  68. //              cicon = LoadImage(hDllInstance,"CAUTION_ICO",IMAGE_ICON,16,16,LR_DEFAULTCOLOR);  
  69.  
  70.                 // see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/fontext_3pbo.asp
  71.                 hfnt = GetStockObject(ANSI_FIXED_FONT);
  72.        
  73.                 preview_hwnd = GetDlgItem(hDlg, PREVIEWITEM);
  74.                 GetClientRect(preview_hwnd, &preview_rect);
  75. //              MapWindowPoints(hcl,hDlg,(POINT*)&preview_rect,2);
  76. //{char s[0x100]; sprintf(s,"preview_rect=(%d,%d,%d,%d)",
  77. //      preview_rect.left,preview_rect.top,preview_rect.right,preview_rect.bottom); dbg(s);}
  78.  
  79.                 for(i=0;i<8;++i){
  80.                         SendDlgItemMessage(hDlg,FIRSTCTLITEM+i,         TBM_SETRANGE,TRUE,MAKELONG(0,255));
  81.                         SendDlgItemMessage(hDlg,FIRSTCTLITEM+i,         TBM_SETTICFREQ,SLIDERPAGE,0);
  82.                         SendDlgItemMessage(hDlg,FIRSTCTLITEM+i,         TBM_SETPAGESIZE,0,SLIDERPAGE);
  83.                         SendDlgItemMessage(hDlg,FIRSTCTLTEXTITEM+i,     EM_SETLIMITTEXT,3,0);
  84.                 }
  85.                 for(i=0;i<4;++i){
  86.                         SendDlgItemMessage(hDlg,FIRSTEXPRITEM+i,        EM_SETLIMITTEXT,MAXEXPR,0);
  87.                         SendDlgItemMessage(hDlg,FIRSTEXPRITEM+i,        WM_SETFONT,(WPARAM)hfnt,false);
  88.                 }
  89.  
  90.                 maindlginit(hDlg);
  91.                 break;
  92.         case WM_DRAWITEM:
  93.                 pdi = (DRAWITEMSTRUCT*)lParam;
  94.                 if(pdi->itemAction == ODA_DRAWENTIRE){
  95.                         switch(pdi->CtlID){
  96. /*
  97.                         case FIRSTICONITEM:
  98.                         case FIRSTICONITEM+1:
  99.                         case FIRSTICONITEM+2:
  100.                         case FIRSTICONITEM+3:
  101.                                 DrawIconEx( pdi->hDC, 0,0, cicon, 16,16, 0, NULL, DI_NORMAL );                         
  102.                                 break;
  103. */
  104.                         case PREVIEWITEM:
  105.                                 drawpreview(hDlg,pdi->hDC,PILOCKHANDLE(preview_handle,false));//paint_preview(hDlg,pdi->hwndItem,pdi->hDC,&pdi->rcItem);
  106.                                 PIUNLOCKHANDLE(preview_handle);
  107.                                 break;
  108.                         default: return false;
  109.                         }
  110.                 }else
  111.                         return false; // we couldn't handle the message
  112.                 break;
  113.         case WM_COMMAND:
  114.                 item = LOWORD(wParam);
  115.                 switch(HIWORD(wParam)){
  116.                 case BN_CLICKED: //case STN_CLICKED:
  117.                         if(item==PREVIEWITEM && GetCursorPos(&origpos)){
  118. //                              dbg("click preview");
  119.                                 panning = true;
  120.                                 origscroll = preview_scroll;
  121.                                 SetCapture(hDlg);
  122.                                 break;
  123.                         }
  124.                 case EN_CHANGE:
  125.                         if(doupdates && !maindlgitem(hDlg,item))
  126.                                 EndDialog(hDlg,item);
  127.                 }
  128.                 break;
  129. //      case WM_LBUTTONDOWN: break;
  130.         case WM_MOUSEMOVE:
  131.                 if(panning && GetCursorPos(&newpos)){
  132.                         newscroll.h = origscroll.h - zoomfactor*(newpos.x - origpos.x);
  133.                         newscroll.v = origscroll.v - zoomfactor*(newpos.y - origpos.y);
  134.                         if( newscroll.h != preview_scroll.h || newscroll.v != preview_scroll.v ){
  135.                                 preview_scroll = newscroll;
  136.                                 recalc_preview(gpb,hDlg);
  137.                         }
  138.                 }
  139.                 break;
  140.         case WM_LBUTTONUP:
  141. //                              dbg("button up");
  142.                 ReleaseCapture();
  143.                 panning = false;
  144.                 break;
  145.         case WM_HSCROLL:
  146.                 item = GetDlgCtrlID((HWND)lParam);
  147.                 if(doupdates && item>=FIRSTCTLITEM && item<=FIRSTCTLITEM+7)
  148.                         slidermoved(hDlg,item);
  149.                 //recalc_preview(gpb,hDlg);
  150.                 break;
  151.         default:
  152.                 return false;
  153.         }
  154.  
  155.         return true;
  156. }
  157.  
  158. Boolean maindialog(FilterRecordPtr pb){
  159.         PlatformData *p = pb->platformData;
  160.         return DialogBoxParam(hDllInstance,MAKEINTRESOURCE(gdata->standalone ? ID_PARAMDLG : ID_MAINDLG),
  161.                                                   (HWND)p->hwnd,maindlgproc,0) == IDOK;
  162. }
  163.  
  164.