home *** CD-ROM | disk | FTP | other *** search
/ PC PowerPlay 22 / PCPP #22.iso / Quake2 / q2source_12_11 / utils3 / qe4 / win_dlg.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-08-26  |  13.2 KB  |  633 lines

  1.  
  2. #include "qe3.h"
  3.  
  4. BOOL CALLBACK GammaDlgProc (
  5.     HWND hwndDlg,    // handle to dialog box
  6.     UINT uMsg,    // message
  7.     WPARAM wParam,    // first message parameter
  8.     LPARAM lParam     // second message parameter
  9.    )
  10. {
  11.     char sz[256];
  12.  
  13.     switch (uMsg)
  14.     {
  15.     case WM_INITDIALOG:
  16.         sprintf(sz, "%1.1f", g_qeglobals.d_savedinfo.fGamma);        
  17.         SetWindowText(GetDlgItem(hwndDlg, IDC_G_EDIT), sz);
  18.         return TRUE;
  19.     case WM_COMMAND: 
  20.         switch (LOWORD(wParam)) 
  21.         { 
  22.         
  23.         case IDOK:
  24.             GetWindowText(GetDlgItem(hwndDlg, IDC_G_EDIT), sz, 255);
  25.             g_qeglobals.d_savedinfo.fGamma = atof(sz);
  26.             EndDialog(hwndDlg, 1);
  27.             return TRUE;
  28.  
  29.         case IDCANCEL:
  30.             EndDialog(hwndDlg, 0);
  31.             return TRUE;
  32.         }
  33.     }
  34.     return FALSE;
  35. }
  36.  
  37.  
  38.  
  39. void DoGamma(void)
  40. {
  41.     char *psz, sz[256];
  42.     if ( DialogBox(g_qeglobals.d_hInstance, (char *)IDD_GAMMA, g_qeglobals.d_hwndMain, GammaDlgProc))
  43.     {
  44.         psz = ValueForKey(world_entity, "_wad");
  45.         if (psz)
  46.         {
  47.             strcpy(sz, psz);
  48.             Texture_Flush();
  49.             Texture_ShowInuse();
  50.         }
  51.     }
  52. }        
  53.  
  54. //================================================
  55.  
  56.  
  57. void SelectBrush (int entitynum, int brushnum)
  58. {
  59.     entity_t    *e;
  60.     brush_t        *b;
  61.     int            i;
  62.  
  63.     if (entitynum == 0)
  64.         e = world_entity;
  65.     else
  66.     {
  67.         e = entities.next;
  68.         while (--entitynum)
  69.         {
  70.             e=e->next;
  71.             if (e == &entities)
  72.             {
  73.                 Sys_Status ("No such entity.", 0);
  74.                 return;
  75.             }
  76.         }
  77.     }
  78.  
  79.     b = e->brushes.onext;
  80.     if (b == &e->brushes)
  81.     {
  82.         Sys_Status ("No such brush.", 0);
  83.         return;
  84.     }
  85.     while (brushnum--)
  86.     {
  87.         b=b->onext;
  88.         if (b == &e->brushes)
  89.         {
  90.             Sys_Status ("No such brush.", 0);
  91.             return;
  92.         }
  93.     }
  94.  
  95.     Brush_RemoveFromList (b);
  96.     Brush_AddToList (b, &selected_brushes);
  97.  
  98.  
  99.     Sys_UpdateWindows (W_ALL);
  100.     for (i=0 ; i<3 ; i++)
  101.         g_qeglobals.d_xy.origin[i] = (b->mins[i] + b->maxs[i])/2;
  102.  
  103.     Sys_Status ("Selected.", 0);
  104. }
  105.  
  106. /*
  107. =================
  108. GetSelectionIndex
  109. =================
  110. */
  111. void GetSelectionIndex (int *ent, int *brush)
  112. {
  113.     brush_t        *b, *b2;
  114.     entity_t    *entity;
  115.  
  116.     *ent = *brush = 0;
  117.  
  118.     b = selected_brushes.next;
  119.     if (b == &selected_brushes)
  120.         return;
  121.  
  122.     // find entity
  123.     if (b->owner != world_entity)
  124.     {
  125.         (*ent)++;
  126.         for (entity = entities.next ; entity != &entities 
  127.             ; entity=entity->next, (*ent)++)
  128.         ;
  129.     }
  130.  
  131.     // find brush
  132.     for (b2=b->owner->brushes.onext 
  133.         ; b2 != b && b2 != &b->owner->brushes
  134.         ; b2=b2->onext, (*brush)++)
  135.     ;
  136. }
  137.  
  138. BOOL CALLBACK FindBrushDlgProc (
  139.     HWND hwndDlg,    // handle to dialog box
  140.     UINT uMsg,    // message
  141.     WPARAM wParam,    // first message parameter
  142.     LPARAM lParam     // second message parameter
  143.    )
  144. {
  145.     char entstr[256];
  146.     char brushstr[256];
  147.     HWND    h;
  148.     int        ent, brush;
  149.  
  150.     switch (uMsg)
  151.     {
  152.     case WM_INITDIALOG:
  153.         // set entity and brush number
  154.         GetSelectionIndex (&ent, &brush);
  155.         sprintf (entstr, "%i", ent);
  156.         sprintf (brushstr, "%i", brush);
  157.         SetWindowText(GetDlgItem(hwndDlg, IDC_FIND_ENTITY), entstr);
  158.         SetWindowText(GetDlgItem(hwndDlg, IDC_FIND_BRUSH), brushstr);
  159.  
  160.         h = GetDlgItem(hwndDlg, IDC_FIND_ENTITY);
  161.         SetFocus (h);
  162.         return FALSE;
  163.  
  164.     case WM_COMMAND: 
  165.         switch (LOWORD(wParam)) 
  166.         { 
  167.             case IDOK:
  168.                 GetWindowText(GetDlgItem(hwndDlg, IDC_FIND_ENTITY), entstr, 255);
  169.                 GetWindowText(GetDlgItem(hwndDlg, IDC_FIND_BRUSH), brushstr, 255);
  170.                 SelectBrush (atoi(entstr), atoi(brushstr));
  171.                 EndDialog(hwndDlg, 1);
  172.                 return TRUE;
  173.  
  174.             case IDCANCEL:
  175.                 EndDialog(hwndDlg, 0);
  176.                 return TRUE;
  177.         }    
  178.     }
  179.     return FALSE;
  180. }
  181.  
  182.  
  183.  
  184. void DoFind(void)
  185. {
  186.     DialogBox(g_qeglobals.d_hInstance, (char *)IDD_FINDBRUSH, g_qeglobals.d_hwndMain, FindBrushDlgProc);
  187. }    
  188.     
  189. /*
  190. ===================================================
  191.  
  192.   ARBITRARY ROTATE
  193.  
  194. ===================================================
  195. */
  196.  
  197.  
  198. BOOL CALLBACK RotateDlgProc (
  199.     HWND hwndDlg,    // handle to dialog box
  200.     UINT uMsg,    // message
  201.     WPARAM wParam,    // first message parameter
  202.     LPARAM lParam     // second message parameter
  203.    )
  204. {
  205.     char    str[256];
  206.     HWND    h;
  207.     float    v;
  208.  
  209.     switch (uMsg)
  210.     {
  211.     case WM_INITDIALOG:
  212.         h = GetDlgItem(hwndDlg, IDC_FIND_ENTITY);
  213.         SetFocus (h);
  214.         return FALSE;
  215.  
  216.     case WM_COMMAND: 
  217.         switch (LOWORD(wParam)) 
  218.         { 
  219.         
  220.         case IDOK:
  221.             GetWindowText(GetDlgItem(hwndDlg, IDC_ROTX), str, 255);
  222.             v = atof(str);
  223.             if (v)
  224.                 Select_RotateAxis (0, v);
  225.  
  226.             GetWindowText(GetDlgItem(hwndDlg, IDC_ROTY), str, 255);
  227.             v = atof(str);
  228.             if (v)
  229.                 Select_RotateAxis (1, v);
  230.  
  231.             GetWindowText(GetDlgItem(hwndDlg, IDC_ROTZ), str, 255);
  232.             v = atof(str);
  233.             if (v)
  234.                 Select_RotateAxis (2, v);
  235.  
  236.             EndDialog(hwndDlg, 1);
  237.             return TRUE;
  238.  
  239.         case IDCANCEL:
  240.             EndDialog(hwndDlg, 0);
  241.             return TRUE;
  242.         }    
  243.     }
  244.  
  245.     return FALSE;
  246. }
  247.  
  248.  
  249.  
  250. void DoRotate(void)
  251. {
  252.     DialogBox(g_qeglobals.d_hInstance, (char *)IDD_ROTATE, g_qeglobals.d_hwndMain, RotateDlgProc);
  253. }
  254.         
  255. /*
  256. ===================================================
  257.  
  258.   ARBITRARY SIDES
  259.  
  260. ===================================================
  261. */
  262.  
  263.  
  264. BOOL CALLBACK SidesDlgProc (
  265.     HWND hwndDlg,    // handle to dialog box
  266.     UINT uMsg,    // message
  267.     WPARAM wParam,    // first message parameter
  268.     LPARAM lParam     // second message parameter
  269.    )
  270. {
  271.     char str[256];
  272.     HWND    h;
  273.  
  274.     switch (uMsg)
  275.     {
  276.     case WM_INITDIALOG:
  277.         h = GetDlgItem(hwndDlg, IDC_FIND_ENTITY);
  278.         SetFocus (h);
  279.         return FALSE;
  280.  
  281.     case WM_COMMAND: 
  282.         switch (LOWORD(wParam)) { 
  283.         
  284.         case IDOK:
  285.             GetWindowText(GetDlgItem(hwndDlg, IDC_SIDES), str, 255);
  286.             Brush_MakeSided (atoi(str));
  287.  
  288.             EndDialog(hwndDlg, 1);
  289.         break;
  290.  
  291.         case IDCANCEL:
  292.             EndDialog(hwndDlg, 0);
  293.         break;
  294.     }    
  295.     default:
  296.         return FALSE;
  297.     }
  298. }
  299.  
  300.  
  301.  
  302. void DoSides(void)
  303. {
  304.     DialogBox(g_qeglobals.d_hInstance, (char *)IDD_SIDES, g_qeglobals.d_hwndMain, SidesDlgProc);
  305. }        
  306.  
  307. //======================================================================
  308.  
  309. /*
  310. ===================
  311. DoAbout
  312. ===================
  313. */
  314. BOOL CALLBACK AboutDlgProc( HWND hwndDlg,
  315.                             UINT uMsg,
  316.                             WPARAM wParam,
  317.                             LPARAM lParam )
  318. {
  319.     switch (uMsg)
  320.     {
  321.     case WM_INITDIALOG:
  322.         {
  323.             char renderer[1024];
  324.             char version[1024];
  325.             char vendor[1024];
  326.             char extensions[4096];
  327.  
  328.             sprintf( renderer, "Renderer:\t%s", glGetString( GL_RENDERER ) );
  329.             sprintf( version, "Version:\t\t%s", glGetString( GL_VERSION ) );
  330.             sprintf( vendor, "Vendor:\t\t%s", glGetString( GL_VENDOR ) );
  331.             sprintf( extensions, "\n%s", glGetString( GL_EXTENSIONS ) );
  332.  
  333.             SetWindowText( GetDlgItem( hwndDlg, IDC_ABOUT_GLRENDERER ),   renderer );
  334.             SetWindowText( GetDlgItem( hwndDlg, IDC_ABOUT_GLVERSION ),    version );
  335.             SetWindowText( GetDlgItem( hwndDlg, IDC_ABOUT_GLVENDOR ),     vendor );
  336.             SetWindowText( GetDlgItem( hwndDlg, IDC_ABOUT_GLEXTENSIONS ), extensions );
  337.         }
  338.         return TRUE;
  339.  
  340.     case WM_CLOSE:
  341.         EndDialog( hwndDlg, 1 );
  342.         return TRUE;
  343.  
  344.     case WM_COMMAND:
  345.         if ( LOWORD( wParam ) == IDOK )
  346.             EndDialog(hwndDlg, 1);
  347.         return TRUE;
  348.     }
  349.     return FALSE;
  350. }
  351.  
  352. void DoAbout(void)
  353. {
  354.     DialogBox( g_qeglobals.d_hInstance, ( char * ) IDD_ABOUT, g_qeglobals.d_hwndMain, AboutDlgProc );
  355. }
  356.  
  357.  
  358. /*
  359. ===================================================
  360.  
  361.   SURFACE INSPECTOR
  362.  
  363. ===================================================
  364. */
  365.  
  366. texdef_t    g_old_texdef;
  367. HWND        g_surfwin;
  368. qboolean    g_changed_surface;
  369.  
  370. int    g_checkboxes[64] = { 
  371.     IDC_CHECK1, IDC_CHECK2, IDC_CHECK3, IDC_CHECK4, 
  372.     IDC_CHECK5, IDC_CHECK6, IDC_CHECK7, IDC_CHECK8, 
  373.     IDC_CHECK9, IDC_CHECK10, IDC_CHECK11, IDC_CHECK12, 
  374.     IDC_CHECK13, IDC_CHECK14, IDC_CHECK15, IDC_CHECK16,
  375.     IDC_CHECK17, IDC_CHECK18, IDC_CHECK19, IDC_CHECK20,
  376.     IDC_CHECK21, IDC_CHECK22, IDC_CHECK23, IDC_CHECK24,
  377.     IDC_CHECK25, IDC_CHECK26, IDC_CHECK27, IDC_CHECK28,
  378.     IDC_CHECK29, IDC_CHECK30, IDC_CHECK31, IDC_CHECK32,
  379.  
  380.     IDC_CHECK33, IDC_CHECK34, IDC_CHECK35, IDC_CHECK36,
  381.     IDC_CHECK37, IDC_CHECK38, IDC_CHECK39, IDC_CHECK40,
  382.     IDC_CHECK41, IDC_CHECK42, IDC_CHECK43, IDC_CHECK44,
  383.     IDC_CHECK45, IDC_CHECK46, IDC_CHECK47, IDC_CHECK48,
  384.     IDC_CHECK49, IDC_CHECK50, IDC_CHECK51, IDC_CHECK52,
  385.     IDC_CHECK53, IDC_CHECK54, IDC_CHECK55, IDC_CHECK56,
  386.     IDC_CHECK57, IDC_CHECK58, IDC_CHECK59, IDC_CHECK60,
  387.     IDC_CHECK61, IDC_CHECK62, IDC_CHECK63, IDC_CHECK64
  388.  };
  389.  
  390. /*
  391. ==============
  392. SetTexMods
  393.  
  394. Set the fields to the current texdef
  395. ===============
  396. */
  397. void SetTexMods(void)
  398. {
  399.     char    sz[128];
  400.     texdef_t *pt;
  401.     int        i;
  402.  
  403.     pt = &g_qeglobals.d_texturewin.texdef;
  404.  
  405.     SendMessage (g_surfwin, WM_SETREDRAW, 0, 0);
  406.  
  407.     SetWindowText(GetDlgItem(g_surfwin, IDC_TEXTURE), pt->name);
  408.  
  409.     sprintf(sz, "%d", (int)pt->shift[0]);
  410.     SetWindowText(GetDlgItem(g_surfwin, IDC_HSHIFT), sz);
  411.  
  412.     sprintf(sz, "%d", (int)pt->shift[1]);
  413.     SetWindowText(GetDlgItem(g_surfwin, IDC_VSHIFT), sz);
  414.  
  415.     sprintf(sz, "%4.2f", pt->scale[0]);
  416.     SetWindowText(GetDlgItem(g_surfwin, IDC_HSCALE), sz);
  417.  
  418.     sprintf(sz, "%4.2f", pt->scale[1]);
  419.     SetWindowText(GetDlgItem(g_surfwin, IDC_VSCALE), sz);
  420.  
  421.     sprintf(sz, "%d", (int)pt->rotate);
  422.     SetWindowText(GetDlgItem(g_surfwin, IDC_ROTATE), sz);
  423.  
  424.     sprintf(sz, "%d", (int)pt->value);
  425.     SetWindowText(GetDlgItem(g_surfwin, IDC_VALUE), sz);
  426.  
  427.     for (i=0 ; i<32 ; i++)
  428.         SendMessage(GetDlgItem(g_surfwin, g_checkboxes[i]), BM_SETCHECK, !!(pt->flags&(1<<i)), 0 );
  429.     for (i=0 ; i<32 ; i++)
  430.         SendMessage(GetDlgItem(g_surfwin, g_checkboxes[32+i]), BM_SETCHECK, !!(pt->contents&(1<<i)), 0 );
  431.  
  432.     SendMessage (g_surfwin, WM_SETREDRAW, 1, 0);
  433.     InvalidateRect (g_surfwin, NULL, true);
  434. }
  435.  
  436.  
  437. /*
  438. ==============
  439. GetTexMods
  440.  
  441. Reads the fields to get the current texdef
  442. ===============
  443. */
  444. void GetTexMods(void)
  445. {
  446.     char    sz[128];
  447.     texdef_t *pt;
  448.     int        b;
  449.     int        i;
  450.  
  451.     pt = &g_qeglobals.d_texturewin.texdef;
  452.  
  453.     GetWindowText (GetDlgItem(g_surfwin, IDC_TEXTURE), sz, 127);
  454.     strncpy (pt->name, sz, sizeof(pt->name)-1);
  455.     if (pt->name[0] <= ' ')
  456.     {
  457.         strcpy (pt->name, "none");
  458.         SetWindowText(GetDlgItem(g_surfwin, IDC_TEXTURE), pt->name);
  459.     }
  460.  
  461.     GetWindowText (GetDlgItem(g_surfwin, IDC_HSHIFT), sz, 127);
  462.     pt->shift[0] = atof(sz);
  463.  
  464.     GetWindowText (GetDlgItem(g_surfwin, IDC_VSHIFT), sz, 127);
  465.     pt->shift[1] = atof(sz);
  466.  
  467.     GetWindowText(GetDlgItem(g_surfwin, IDC_HSCALE), sz, 127);
  468.     pt->scale[0] = atof(sz);
  469.  
  470.     GetWindowText(GetDlgItem(g_surfwin, IDC_VSCALE), sz, 127);
  471.     pt->scale[1] = atof(sz);
  472.  
  473.     GetWindowText(GetDlgItem(g_surfwin, IDC_ROTATE), sz, 127);
  474.     pt->rotate = atof(sz);
  475.  
  476.     GetWindowText(GetDlgItem(g_surfwin, IDC_VALUE), sz, 127);
  477.     pt->value = atof(sz);
  478.  
  479.     pt->flags = 0;
  480.     for (i=0 ; i<32 ; i++)
  481.     {
  482.         b = SendMessage(GetDlgItem(g_surfwin, g_checkboxes[i]), BM_GETCHECK, 0, 0);
  483.         if (b != 1 && b != 0)
  484.             continue;
  485.         pt->flags |= b<<i;
  486.     }
  487.  
  488.     pt->contents = 0;
  489.     for (i=0 ; i<32 ; i++)
  490.     {
  491.         b = SendMessage(GetDlgItem(g_surfwin, g_checkboxes[32+i]), BM_GETCHECK, 0, 0);
  492.         if (b != 1 && b != 0)
  493.             continue;
  494.         pt->contents |= b<<i;
  495.     }
  496.  
  497.     g_changed_surface = true;
  498.     Select_SetTexture(pt);
  499. }
  500.  
  501. /*
  502. =================
  503. UpdateSpinners
  504. =================
  505. */
  506. void UpdateSpinners(unsigned uMsg, WPARAM wParam, LPARAM lParam)
  507. {
  508.     int nScrollCode;
  509.     HWND hwnd;
  510.     texdef_t *pt;
  511.  
  512.     pt = &g_qeglobals.d_texturewin.texdef;
  513.  
  514.     nScrollCode = (int) LOWORD(wParam);  // scroll bar value 
  515.     hwnd = (HWND) lParam;       // handle of scroll bar 
  516.  
  517.     if ((nScrollCode != SB_LINEUP) && (nScrollCode != SB_LINEDOWN))
  518.         return;
  519.     
  520.     if (hwnd == GetDlgItem(g_surfwin, IDC_ROTATEA))
  521.     {
  522.         if (nScrollCode == SB_LINEUP)
  523.             pt->rotate += 45;
  524.         else
  525.             pt->rotate -= 45;
  526.  
  527.         if (pt->rotate < 0)
  528.             pt->rotate += 360;
  529.  
  530.         if (pt->rotate >= 360)
  531.             pt->rotate -= 360;
  532.     }
  533.  
  534.     else if (hwnd == GetDlgItem(g_surfwin, IDC_HSCALEA))
  535.     {
  536.         if (nScrollCode == SB_LINEDOWN)
  537.             pt->scale[0] -= 0.1;
  538.         else
  539.             pt->scale[0] += 0.1;
  540.     }
  541.     
  542.     else if (hwnd == GetDlgItem(g_surfwin, IDC_VSCALEA))
  543.     {
  544.         if (nScrollCode == SB_LINEUP)
  545.             pt->scale[1] += 0.1;
  546.         else
  547.             pt->scale[1] -= 0.1;
  548.     } 
  549.     
  550.     else if (hwnd == GetDlgItem(g_surfwin, IDC_HSHIFTA))
  551.     {
  552.         if (nScrollCode == SB_LINEDOWN)
  553.             pt->shift[0] -= 8;
  554.         else
  555.             pt->shift[0] += 8;
  556.     }
  557.     
  558.     else if (hwnd == GetDlgItem(g_surfwin, IDC_VSHIFTA))
  559.     {
  560.         if (nScrollCode == SB_LINEUP)
  561.             pt->shift[1] += 8;
  562.         else
  563.             pt->shift[1] -= 8;
  564.     }
  565.  
  566.     SetTexMods();
  567.     g_changed_surface = true;
  568.     Select_SetTexture(pt);
  569. }
  570.  
  571.  
  572.  
  573. BOOL CALLBACK SurfaceDlgProc (
  574.     HWND hwndDlg,    // handle to dialog box
  575.     UINT uMsg,    // message
  576.     WPARAM wParam,    // first message parameter
  577.     LPARAM lParam     // second message parameter
  578.    )
  579. {
  580.     switch (uMsg)
  581.     {
  582.     case WM_INITDIALOG:
  583.         g_surfwin = hwndDlg;
  584.         SetTexMods ();
  585.         return FALSE;
  586.  
  587.     case WM_COMMAND: 
  588.         switch (LOWORD(wParam)) { 
  589.         
  590.         case IDOK:
  591.             GetTexMods ();
  592.             EndDialog(hwndDlg, 1);
  593.         break;
  594.  
  595.         case IDAPPLY:
  596.             GetTexMods ();
  597.             InvalidateRect(g_qeglobals.d_hwndCamera, NULL, false);
  598.             UpdateWindow (g_qeglobals.d_hwndCamera);
  599.         break;
  600.  
  601.         case IDCANCEL:
  602.             g_qeglobals.d_texturewin.texdef = g_old_texdef;
  603.             if (g_changed_surface)
  604.                 Select_SetTexture(&g_qeglobals.d_texturewin.texdef);
  605.             EndDialog(hwndDlg, 0);
  606.         break;
  607.         }    
  608.         break;
  609.  
  610.     case WM_HSCROLL:
  611.     case WM_VSCROLL:
  612.         UpdateSpinners(uMsg, wParam, lParam);
  613.         InvalidateRect(g_qeglobals.d_hwndCamera, NULL, false);
  614.         UpdateWindow (g_qeglobals.d_hwndCamera);
  615.         return 0;
  616.  
  617.     default:
  618.         return FALSE;
  619.     }
  620. }
  621.  
  622.  
  623.  
  624. void DoSurface (void)
  625. {
  626.     // save current state for cancel
  627.     g_old_texdef = g_qeglobals.d_texturewin.texdef;
  628.     g_changed_surface = false;
  629.  
  630.     DialogBox(g_qeglobals.d_hInstance, (char *)IDD_SURFACE, g_qeglobals.d_hwndMain, SurfaceDlgProc);
  631. }        
  632.  
  633.