home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c082_122 / 3.ddi / CHESS.ZIP / PVALUE.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1992-06-10  |  7.3 KB  |  252 lines

  1. // ObjectWindows - (C) Copyright 1992 by Borland International
  2.  
  3. #include <static.h>
  4. #include <filedial.h>
  5. #include <inputdia.h>
  6. #include <bwcc.h>
  7. #include <string.h>
  8. #include <stdio.h>
  9. #include "wcdefs.h"
  10. #include "info.h"
  11. #include "wchess.h"
  12. #include "pvalue.h"
  13. #include "externs.h"
  14.  
  15. const int DefaultValues[5] = {0x90, 0x4c, 0x30, 0x30, 0x10};
  16.  
  17. enum PIECES { pvqueen, pvrook, pvbishop, pvknight, pvpawn};
  18.  
  19. #define min(x, y)   (((x) < (y)) ? (x) : (y))
  20. #define max(x, y)   (((x) > (y)) ? (x) : (y))
  21.  
  22.  
  23. TPieceValueDialog::TPieceValueDialog(PTWindowsObject AParent, LPSTR AName)
  24.    : TDialog(AParent, AName)
  25.    {
  26.    }
  27.  
  28. inline void TPieceValueDialog::PVSetFocus(HWND hWnd)
  29. {
  30.    SendMessage(HWindow, WM_NEXTDLGCTL, WPARAM(hWnd), 1L);
  31.    SendMessage(hWnd, EM_SETSEL, 0, MAKELONG(0, 32767));
  32. }
  33.  
  34. BOOL TPieceValueDialog::GetColorValue(WORD Id)
  35. {
  36.    int NewVal;
  37.    BOOL Ok;
  38.    int *CurVal;
  39.    HWND hScroller;
  40.  
  41.    NewVal = GetDlgItemInt(HWindow, Id, &Ok, TRUE);
  42.  
  43.    switch (Id)
  44.       {
  45.       case IDD_EQUEEN:
  46.          CurVal = &Values[pvqueen];
  47.          hScroller = GetDlgItem(HWindow, IDD_QUEEN);
  48.          break;
  49.       case IDD_EROOK:
  50.          CurVal = &Values[pvrook];
  51.          hScroller = GetDlgItem(HWindow, IDD_ROOK);
  52.          break;
  53.       case IDD_EBISHOP:
  54.          CurVal = &Values[pvbishop];
  55.          hScroller = GetDlgItem(HWindow, IDD_BISHOP);
  56.          break;
  57.       case IDD_EKNIGHT:
  58.          CurVal = &Values[pvknight];
  59.          hScroller = GetDlgItem(HWindow, IDD_KNIGHT);
  60.          break;
  61.       case IDD_EPAWN:
  62.          CurVal = &Values[pvpawn];
  63.          hScroller = GetDlgItem(HWindow, IDD_PAWN);
  64.          break;
  65.       }
  66.  
  67.    if (Ok)
  68.       {
  69.       Ok = (NewVal > 255) ? FALSE : ( (NewVal < 0 ) ? FALSE : TRUE );
  70.       }
  71.    else 
  72.       NewVal = *CurVal;
  73.      
  74.    if (!Ok)
  75.       {
  76.       Error("Please enter a valid number between 0 and 255.");
  77.       PVSetFocus(GetDlgItem(HWindow, Id));
  78.       }
  79.    else if (NewVal != *CurVal)
  80.       {
  81.       *CurVal = NewVal;
  82.       SetScrollPos(hScroller, SB_CTL, *CurVal, TRUE);
  83.       }
  84.    return Ok;
  85. }
  86.  
  87. void TPieceValueDialog::Ok(RTMessage)
  88. {
  89.    MSG msg;
  90.  
  91.    while (PeekMessage(&msg, HWindow, PV_KILLFOCUS, PV_KILLFOCUS, PM_NOREMOVE))
  92.       continue;
  93.  
  94.    if ( GetColorValue(IDD_EQUEEN) && GetColorValue(IDD_EROOK) &&
  95.       GetColorValue(IDD_EBISHOP) && GetColorValue(IDD_EKNIGHT) &&
  96.       GetColorValue(IDD_EPAWN) )
  97.       {
  98.       PieceValue[queen] = Values[pvqueen] * 16;
  99.       PieceValue[rook]  = Values[pvrook] * 16;
  100.       PieceValue[bishop] = Values[pvbishop] * 16;
  101.       PieceValue[knight] = Values[pvknight] * 16;
  102.       PieceValue[pawn] = Values[pvpawn] * 16;
  103.       CloseWindow(IDOK);
  104.       }
  105. }
  106.  
  107. void TPieceValueDialog::SetupWindow()
  108. {
  109.    TDialog::SetupWindow();
  110.    Values[pvqueen] = PieceValue[queen] / 16;
  111.    Values[pvrook] = PieceValue[rook] / 16;
  112.    Values[pvbishop] = PieceValue[bishop] / 16;
  113.    Values[pvknight] = PieceValue[knight] / 16;
  114.    Values[pvpawn] = PieceValue[pawn] / 16;
  115.  
  116.    SetDlgItemInt(HWindow, IDD_EQUEEN, Values[pvqueen], FALSE);
  117.    SetDlgItemInt(HWindow, IDD_EROOK, Values[pvrook], FALSE);
  118.    SetDlgItemInt(HWindow, IDD_EBISHOP, Values[pvbishop], FALSE);
  119.    SetDlgItemInt(HWindow, IDD_EKNIGHT, Values[pvknight], FALSE);
  120.    SetDlgItemInt(HWindow, IDD_EPAWN, Values[pvpawn], FALSE);
  121.  
  122.    SetScrollRange(GetDlgItem(HWindow, IDD_QUEEN), SB_CTL, 0, 255, FALSE);
  123.    SetScrollPos(GetDlgItem(HWindow, IDD_QUEEN), SB_CTL, Values[pvqueen], FALSE);
  124.  
  125.    SetScrollRange(GetDlgItem(HWindow, IDD_ROOK), SB_CTL, 0, 255, FALSE);
  126.    SetScrollPos(GetDlgItem(HWindow, IDD_ROOK), SB_CTL, Values[pvrook], FALSE);
  127.  
  128.    SetScrollRange(GetDlgItem(HWindow, IDD_BISHOP), SB_CTL, 0, 255, FALSE);
  129.    SetScrollPos(GetDlgItem(HWindow, IDD_BISHOP), SB_CTL, Values[pvbishop], FALSE);
  130.  
  131.    SetScrollRange(GetDlgItem(HWindow, IDD_KNIGHT), SB_CTL, 0, 255, FALSE);
  132.    SetScrollPos(GetDlgItem(HWindow, IDD_KNIGHT), SB_CTL, Values[pvknight], FALSE);
  133.  
  134.    SetScrollRange(GetDlgItem(HWindow, IDD_PAWN), SB_CTL, 0, 255, FALSE);
  135.    SetScrollPos(GetDlgItem(HWindow, IDD_PAWN), SB_CTL, Values[pvpawn], FALSE);
  136. }
  137.  
  138.  
  139. void TPieceValueDialog::IDDDefault(RTMessage)
  140. {
  141.    memcpy(Values, DefaultValues, 5 * sizeof(int));
  142.  
  143.    SetDlgItemInt(HWindow, IDD_EQUEEN, Values[pvqueen], FALSE);
  144.    SetDlgItemInt(HWindow, IDD_EROOK, Values[pvrook], FALSE);
  145.    SetDlgItemInt(HWindow, IDD_EBISHOP, Values[pvbishop], FALSE);
  146.    SetDlgItemInt(HWindow, IDD_EKNIGHT, Values[pvknight], FALSE);
  147.    SetDlgItemInt(HWindow, IDD_EPAWN, Values[pvpawn], FALSE);
  148.  
  149.    SetScrollPos(GetDlgItem(HWindow, IDD_QUEEN), SB_CTL, Values[pvqueen], TRUE);
  150.    SetScrollPos(GetDlgItem(HWindow, IDD_ROOK), SB_CTL, Values[pvrook], TRUE);
  151.    SetScrollPos(GetDlgItem(HWindow, IDD_BISHOP), SB_CTL, Values[pvbishop], TRUE);
  152.    SetScrollPos(GetDlgItem(HWindow, IDD_KNIGHT), SB_CTL, Values[pvknight], TRUE);
  153.    SetScrollPos(GetDlgItem(HWindow, IDD_PAWN), SB_CTL, Values[pvpawn], TRUE);
  154. }
  155.  
  156. void TPieceValueDialog::WMHScroll(RTMessage msg)
  157. {
  158.    int ID = GetDlgCtrlID(HWND(msg.LP.Hi));
  159.    HWND hScroller;
  160.    int *curvalue;
  161.    int dlgitem;
  162.  
  163.    if (ID == GetDlgCtrlID(hScroller = GetDlgItem(HWindow, IDD_QUEEN)))
  164.       {
  165.       curvalue = &Values[pvqueen];
  166.       dlgitem = IDD_EQUEEN;
  167.       }
  168.    else if (ID == GetDlgCtrlID(hScroller = GetDlgItem(HWindow, IDD_ROOK)))
  169.       {
  170.       curvalue = &Values[pvrook];
  171.       dlgitem = IDD_EROOK;
  172.       }
  173.    else if (ID == GetDlgCtrlID(hScroller = GetDlgItem(HWindow, IDD_BISHOP)))
  174.       {
  175.       curvalue = &Values[pvbishop];
  176.       dlgitem = IDD_EBISHOP;
  177.       }
  178.    else if (ID == GetDlgCtrlID(hScroller = GetDlgItem(HWindow, IDD_KNIGHT)))
  179.       {
  180.       curvalue = &Values[pvknight];
  181.       dlgitem = IDD_EKNIGHT;
  182.       }
  183.    else if (ID == GetDlgCtrlID(hScroller = GetDlgItem(HWindow, IDD_PAWN)))
  184.       {
  185.       curvalue = &Values[pvpawn];
  186.       dlgitem = IDD_EPAWN;
  187.       }
  188.    else
  189.       return;
  190.  
  191.    switch (msg.WParam)
  192.       {
  193.       case SB_PAGEDOWN :
  194.          *curvalue += 15;
  195.       case SB_LINEDOWN :
  196.          *curvalue = min(255, *curvalue + 1);
  197.          break;
  198.       case SB_PAGEUP :
  199.          *curvalue -= 15;
  200.       case SB_LINEUP :
  201.          *curvalue = max(0, *curvalue - 1);
  202.          break;
  203.       case SB_TOP:
  204.          *curvalue = 0;
  205.          break;
  206.       case SB_BOTTOM :
  207.          *curvalue = 255;
  208.          break;
  209.       case SB_THUMBPOSITION :
  210.       case SB_THUMBTRACK :
  211.          *curvalue = msg.LP.Lo;
  212.          break;
  213.       default:
  214.          break;
  215.       }
  216.    SetScrollPos(hScroller, SB_CTL, *curvalue, TRUE);
  217.    SetDlgItemInt(HWindow, dlgitem, *curvalue, FALSE);
  218. }
  219.  
  220. void TPieceValueDialog::PVKillFocus(RTMessage msg)
  221. {
  222.    WORD Id = msg.WParam;
  223.    HWND Focus = GetFocus();
  224.  
  225.    if ( ( GetDlgItem(HWindow, Id) == Focus || 
  226.       GetDlgItem(HWindow, IDCANCEL) == Focus ||
  227.       GetDlgItem(HWindow, IDD_DEFAULT) == Focus) ||
  228.       GetActiveWindow() != HWindow)
  229.       return;
  230.    GetColorValue(Id);   
  231. }
  232.  
  233. void TPieceValueDialog::WMCommand(RTMessage msg)
  234. {
  235.    WORD ID = msg.WParam;
  236.  
  237.    if (msg.LP.Lo)
  238.       {
  239.       switch (msg.LP.Hi)
  240.          {
  241.          case EN_KILLFOCUS:
  242.             if (SendMessage(HWND(msg.LP.Lo), EM_GETMODIFY, 0, 0L))
  243.                PostMessage(HWindow, PV_KILLFOCUS, ID, 0L);
  244.          default:
  245.             TWindowsObject::WMCommand(msg);
  246.             return;
  247.          }
  248.       }
  249.    else
  250.       TWindowsObject::WMCommand(msg);
  251. }
  252.