home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / exedt040.zip / src / procs.c < prev    next >
C/C++ Source or Header  |  1999-01-24  |  5KB  |  189 lines

  1. #define INCL_PM
  2.  
  3. #include <string.h>
  4. #include <os2.h>
  5. #include "exedit.h"
  6.  
  7. HWND CreateChild(HWND hwnd,PSZ Title)
  8. {
  9.  ULONG ulCreate = FCF_STANDARD & ~FCF_MENU & ~FCF_ACCELTABLE;
  10.  TChild *Child;
  11.  TMain *Main=WinQueryWindowPtr(hwnd,0);
  12.  HWND hwndClient,hwndFrame;
  13.  SWP swp;
  14.  
  15.  if (!ChildCount(hwnd)) CItemsEnable(hwnd,TRUE);
  16.  
  17.  hwndFrame=WinCreateStdWindow(hwnd,0,&ulCreate,WC_CHILD,Title,0,NULLHANDLE,
  18.                               Id_ChildWindow,&hwndClient);
  19.  Child=WinQueryWindowPtr(hwndClient,0);
  20.  
  21.  if (Title)
  22.   strcpy(Child->FileName,Title);
  23.  else
  24.  {
  25.   Child->FileName[0]=0;
  26.   Main->Untitled[8]++;
  27.   if (Main->Untitled[8]>'9') Main->Untitled[8]='1';
  28.   WinSetWindowText(hwndFrame,Main->Untitled);
  29.  }
  30.  
  31.  UpdateSettings(hwndClient,&Main->DefSettings,FALSE);
  32.  WinGetMaxPosition(hwndFrame,&swp);
  33.  WinSetWindowPos(hwndFrame,HWND_TOP,swp.x+4,swp.y+4,swp.cx-7,swp.cy-7,
  34.                  SWP_ACTIVATE|SWP_MOVE|SWP_SIZE|SWP_NOADJUST|SWP_SHOW);
  35.  WinSetActiveWindow(HWND_DESKTOP,hwndFrame);
  36.  RefreshWinList(hwnd);
  37.  return hwndClient;
  38. }
  39.  
  40. MPARAM ChildSendMsg(HWND hwndMain,ULONG msg,MPARAM mp1,MPARAM mp2)
  41. {
  42.  HWND hwnd;
  43.  if ((hwnd=WinQueryActiveWindow(hwndMain))!=NULLHANDLE)
  44.  return WinSendMsg(hwnd,msg,mp1,mp2);
  45.  
  46.  return 0;
  47. }
  48.  
  49. void FileOpen(TChild *Child)
  50. {
  51.  CHAR  *Buffer;
  52.  HFILE hfFile ;
  53.  ULONG Action, BytesRead = 0;
  54.  IPT   ipt = -1;
  55.  
  56.  DosOpen (Child->FileName,&hfFile,&Action,0,FILE_NORMAL,
  57.           FILE_OPEN,OPEN_FLAGS_FAIL_ON_ERROR |OPEN_SHARE_DENYWRITE,
  58.           NULL);
  59.  
  60.  if (hfFile)
  61.   {
  62.    Buffer = (char *)malloc(0x8FFF);
  63.    WinSendMsg(Child->hwndMLE,MLM_SETIMPORTEXPORT,
  64.               (MPARAM) Buffer,(MPARAM) 0x8FFF);
  65.    do {
  66.        DosRead(hfFile, Buffer, 0x8000, &BytesRead);
  67.        WinSendMsg(Child->hwndMLE,MLM_IMPORT,
  68.                   (MPARAM) &ipt,MPFROMLONG(BytesRead));
  69.       }
  70.    while (BytesRead == 0x8000);
  71.  
  72.    DosClose(hfFile);
  73.    free(Buffer);
  74.   }
  75.  WinSendMsg(Child->hwndMLE,MLM_SETCHANGED,0,0);
  76. }
  77.  
  78. void FileSave (TChild *Child)
  79. {
  80.  PVOID  Buffer;
  81.  HFILE  hfFile;
  82.  ULONG  Action, Wrote, amount, amountexp;
  83.  IPT    FirstChar = 0;
  84.  LONG   FileLength;
  85.  APIRET rc;
  86.  
  87.  FileLength = (LONG) WinSendMsg(Child->hwndMLE,MLM_QUERYTEXTLENGTH,
  88.                                 0,(MPARAM)0xffffffff);
  89.  if (FileLength > 0)
  90.   {
  91.    DosOpen(Child->FileName,&hfFile,&Action,FileLength,FILE_NORMAL,
  92.            OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_REPLACE_IF_EXISTS,
  93.            OPEN_FLAGS_FAIL_ON_ERROR |OPEN_SHARE_DENYREADWRITE|
  94.            OPEN_ACCESS_READWRITE,NULL);
  95.  
  96.    if (hfFile)
  97.     {
  98.      Buffer = (char *)malloc(64000);
  99.  
  100.      WinSendMsg(Child->hwndMLE,MLM_SETIMPORTEXPORT,Buffer,
  101.                 MPFROMLONG(64000));
  102.  
  103.      do {
  104.          amount = 64000;
  105.          amountexp = (ULONG) WinSendMsg(Child->hwndMLE, MLM_EXPORT, &FirstChar, &amount);
  106.          DosWrite(hfFile, (PVOID)Buffer, amountexp, &Wrote);
  107.         }
  108.      while(amountexp != 0);
  109.  
  110.      free (Buffer);
  111.      DosClose (hfFile) ;
  112.      }
  113.     }
  114.  WinSendMsg(Child->hwndMLE,MLM_SETCHANGED,0,0);
  115.  RefreshWinList(WinQueryWindow(WinQueryWindow(WinQueryWindow(Child->hwndMLE,QW_PARENT),QW_PARENT),QW_PARENT));
  116. }
  117.  
  118. int ChildCount(HWND hwndMain)
  119. {
  120.  HENUM henum;
  121.  int count=0;
  122.  
  123.  henum = WinBeginEnumWindows(hwndMain);
  124.  while(WinGetNextWindow(henum)!=NULLHANDLE) count++;
  125.  WinEndEnumWindows(henum);
  126.  return count;
  127. }
  128.  
  129. void CItemsEnable(HWND hwnd,BOOL State)
  130. {
  131.   int i;
  132.   HWND hwndFrame=WinQueryWindow(hwnd,QW_PARENT);
  133.   TFMain *FMain=WinQueryWindowPtr(hwndFrame,0);
  134.  
  135.   for (i=CITEM_FIRST;i<=CITEM_LAST;i++)
  136.   {
  137.    WinEnableMenuItem(WinWindowFromID(hwndFrame,FID_MENU),i,State);
  138.    WinSendMsg(FMain->hwndToolbar,TM_HIDEITEM,(MPARAM)i,(MPARAM)!State);
  139.   }
  140.  
  141.   WinInvalidateRect(FMain->hwndToolbar,NULL,FALSE);
  142. }
  143.  
  144. void RefreshWinList (HWND hwndClient)
  145. {
  146.  MENUITEM item;
  147.  char iText[255];
  148.  HWND hwndSubMenu,hwnd;
  149.  HENUM henum;
  150.  int x=0;
  151.  
  152.  WinSendMsg(WinWindowFromID(WinQueryWindow(hwndClient,QW_PARENT),FID_MENU),MM_QUERYITEM,MPFROM2SHORT(M_Window,TRUE),MPFROMP(&item));
  153.  
  154.  //Delete old items
  155.  hwndSubMenu=item.hwndSubMenu;
  156.  while (SHORT1FROMMP(WinSendMsg(hwndSubMenu,MM_DELETEITEM,MPFROM2SHORT(WinList_First+x,TRUE),0))!=6)
  157.  x++;
  158.  
  159.  //Add new items
  160.  memset(&item,0,sizeof(MENUITEM));
  161.  item.iPosition=MIT_END;
  162.  item.id=WinList_First;
  163.  
  164.  henum = WinBeginEnumWindows(hwndClient);
  165.  while((hwnd=WinGetNextWindow(henum))!=NULLHANDLE)
  166.  {
  167.   WinQueryWindowText(hwnd,253,iText);
  168.   if (iText[0])
  169.   {
  170.    item.id++;
  171.    item.hItem=hwnd;
  172.    WinSendMsg(hwndSubMenu,MM_INSERTITEM,MPFROMP(&item),MPFROMP(iText));
  173.   }
  174.  }
  175.  WinEndEnumWindows(henum);
  176. }
  177.  
  178. void MaxChilds(HWND hwndMain)
  179. {
  180.  HENUM henum;
  181.  HWND hwnd;
  182.  
  183.  henum = WinBeginEnumWindows(hwndMain);
  184.  while((hwnd=WinGetNextWindow(henum))!=NULLHANDLE)
  185.   WinSetWindowPos(hwnd,0,0,0,0,0,SWP_MAXIMIZE);
  186.  WinEndEnumWindows(henum);
  187. }
  188.  
  189.