home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / dovetail.zip / FDLGPROC.CC < prev    next >
C/C++ Source or Header  |  1994-04-06  |  6KB  |  163 lines

  1. //**************************************************************************
  2. #define INCL_WIN
  3. #include <os2.h>
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. #include "dove.h"
  7. #include "process.h"
  8. #include "combobox.h"
  9. //**************************************************************************
  10.  
  11.  
  12. extern "C"
  13.  {
  14.    // This function must be exported so don't mangle the name
  15.  
  16.    MRESULT EXPENTRY FileDlgProc (HWND, USHORT, MPARAM, MPARAM);
  17.  }
  18. MRESULT EXPENTRY FileDlgProc (HWND    hwnd,
  19.                                    USHORT  msg,
  20.                                    MPARAM  mp1,
  21.                                    MPARAM  mp2)
  22.  
  23.   { // Variable Declarations
  24.     static Combobox *pcbName = NULL;
  25.     static int n, cur_des=0;
  26.     static DESIGN *pDesign;
  27.     extern int read_write;
  28.     FILE *fp;
  29.     int i;
  30.     char * new_name;
  31.     extern HWND     hwndFrame;
  32.  
  33.    switch(msg) {
  34.      case WM_INITDLG:
  35.         pcbName = new Combobox(hwnd,ID_NAME);
  36.         pcbName->SetLength(31);
  37.         fp=fopen("dovetail.dat","rb");
  38.         if(fp == NULL) {
  39.           n=0;
  40.           pDesign = new DESIGN [1];  // one for newly created design
  41.         } else {
  42.           fread(&n,sizeof(int),1,fp);
  43.           pDesign = new DESIGN [n+1];  // one more for newly created design
  44.           fread(pDesign,sizeof(DESIGN),n,fp);
  45.           fclose(fp);
  46.         }
  47.         for(i=0; i<n; i++)
  48.           pcbName->Insert(pDesign[i].name);
  49.         if(n > 0) pcbName->SetText(pDesign[cur_des].name);
  50.         break;
  51.      case WM_COMMAND:
  52.         switch(SHORT1FROMMP(mp1)) {
  53.            case ID_OK:
  54.              new_name = (char *) *pcbName;
  55. // if reading
  56.              if(read_write == 0) {
  57.                for(i=0; i<n; i++)
  58.                  if(strcmp(pDesign[i].name,new_name)==0) {
  59.                    fLength = pDesign[i].fLength;
  60.                    fThickness = pDesign[i].fThickness;
  61.                    fSlope = pDesign[i].fSlope;
  62.                    fTailPinRatio = pDesign[i].fTailPinRatio;
  63.                    fMidEdgeRatio = pDesign[i].fMidEdgeRatio;
  64.                    fEndPinSize = pDesign[i].fEndPinSize;
  65.                    iNumTails = pDesign[i].iNumTails;
  66.                    iMultOrAdd = pDesign[i].iMultOrAdd;
  67.                    old_unit = pDesign[i].unit;
  68.                    cur_des = i;
  69.                    WinPostMsg(hMain,UM_UPDATE,0,0);
  70.                    char *text = new char [48];
  71.                    sprintf(text,"Dovetail Designer: %s",new_name);
  72.                    WinSetWindowText(hwndFrame,(PSZ) text);
  73.                    delete[] text;
  74.                  }
  75. // if saving
  76.                } else if(read_write == 1) {
  77.                  for(i=0; i<n; i++)
  78.                    if(strcmp(pDesign[i].name,new_name)==0) break;
  79.                  if(i < n) {
  80.                    if(WinMessageBox(HWND_DESKTOP, HWND_DESKTOP,
  81.                          (PSZ)"Overwrite existing design?",
  82.                          (PSZ) "Design Save", (USHORT)0,
  83.                          MB_YESNO | MB_APPLMODAL | MB_MOVEABLE) != MBID_YES) {
  84.                      delete [] new_name;
  85.                      return 0;
  86.                    }
  87.                  } else {
  88.                    n++;
  89.                  }
  90.                  strcpy(pDesign[i].name,new_name);
  91.                  pDesign[i].fLength = fLength;
  92.                  pDesign[i].fThickness = fThickness;
  93.                  pDesign[i].fSlope = fSlope;
  94.                  pDesign[i].fTailPinRatio = fTailPinRatio;
  95.                  pDesign[i].fMidEdgeRatio = fMidEdgeRatio;
  96.                  pDesign[i].fEndPinSize = fEndPinSize;
  97.                  pDesign[i].iNumTails = iNumTails;
  98.                  pDesign[i].iMultOrAdd = iMultOrAdd;
  99.                  pDesign[i].unit = old_unit;
  100.                  fp=fopen("dovetail.dat","wb");
  101.                  fwrite(&n,sizeof(int),1,fp);
  102.                  fwrite(pDesign,sizeof(DESIGN),n,fp);
  103.                  cur_des = i;
  104.                  fclose(fp);
  105.                  char *text = new char [48];
  106.                  sprintf(text,"Dovetail Designer: %s",new_name);
  107.                  WinSetWindowText(hwndFrame,(PSZ) text);
  108.                  delete[] text;
  109.                } else if(read_write == 2) {
  110.                  for(i=0; i<n; i++)
  111.                    if(strcmp(pDesign[i].name,new_name)==0) break;
  112.                  if(i >= n) {
  113.                    delete [] new_name;
  114.                    return 0;
  115.                  }
  116.                  if(WinMessageBox(HWND_DESKTOP, HWND_DESKTOP,
  117.                        (PSZ)"Delete this design?",
  118.                        (PSZ) "Design Delete", (USHORT)0,
  119.                        MB_YESNO | MB_APPLMODAL | MB_MOVEABLE) != MBID_YES) {
  120.                    delete [] new_name;
  121.                    return 0;
  122.                  }
  123.                  if(cur_des == i)
  124.                    cur_des=0;
  125.                  else if(cur_des > i)
  126.                    cur_des--;
  127.                  n--;
  128.                  for(; i<n; i++)
  129.                    pDesign[i]=pDesign[i+1];
  130.                  fp=fopen("dovetail.dat","wb");
  131.                  fwrite(&n,sizeof(int),1,fp);
  132.                  fwrite(pDesign,sizeof(DESIGN),n,fp);
  133.                  fclose(fp);
  134.                  pcbName->Delete(); // delete currently selected item
  135.                  pcbName->Clear();  // Clear entry field text
  136.                  delete[] new_name;
  137.                  WinSetWindowText(hwndFrame,(PSZ) "Dovetail Designer: No name");
  138.                  return 0;
  139.                }
  140.                delete[] new_name;
  141.                delete[] pDesign;
  142.                delete pcbName;
  143.              break;
  144.            case ID_CANCEL:
  145.              delete[] pDesign;
  146.              delete pcbName;
  147.              break;
  148.          }
  149. /*
  150.   in case of enter, send myself OK message
  151. */
  152.      case WM_CONTROL:
  153.         switch(SHORT1FROMMP(mp1)) {
  154.            case ID_NAME:
  155.              if(SHORT2FROMMP(mp1) == CBN_ENTER)
  156.                 WinPostMsg(hwnd,WM_COMMAND,MPFROMSHORT(ID_OK),0);
  157.              break;
  158.          }
  159.          break;
  160.      }
  161.      return WinDefDlgProc(hwnd,msg,mp1,mp2);
  162.  }
  163.