home *** CD-ROM | disk | FTP | other *** search
/ Hall of Fame / HallofFameCDROM.cdr / window / multed.lzh / FILEAPP.CLS next >
Text File  |  1990-06-11  |  4KB  |  98 lines

  1. /* FileApp.cls
  2.    This class contains all necessary methods to initialize an
  3.    MDI File Window application.  It can be used to seal off the
  4.    MDIFileWindow classes and create a stand alone application.
  5.       PAD
  6. */!!
  7.  
  8. inherit(Application, #FileApp, nil, 2, nil)!!
  9.  
  10. now(class(FileApp))!!
  11.  
  12. /* Remove unwanted Globals and Classes that are
  13.   part of the Actor development environment. */
  14. Def removeExtra(self)
  15. { do(#(SortedCollection WinEllipse WinPolygon StopWatch
  16.        ListBox ScrollBar SnapDialog),
  17.   {using(g) removeGlobal(self, g);
  18.   });
  19. }!!
  20.  
  21. /* Remove unwanted Globals and Classes that are
  22.   part of the Actor development environment. */
  23. Def removeActor(self)
  24. { do(#(ClassList MethodList VarList ClVarDialog
  25.     ClassDialog DebugDialog DirtyCLD SealDialog
  26.     AboutWindow WorkWindow
  27.     ToolWindow Browser MethodBrowser DebugWindow
  28.     Inspector BrowEdit DBBrowEdit DebugEdit WorkSpace),
  29.   {using(g) removeGlobal(self, g);
  30.   });
  31. }!!
  32.  
  33. now(FileApp)!!
  34.  
  35. /* Duplicates the Actor low-level message loop with the exception
  36.    that it handles modeless dialogs.  It still has the problem
  37.    with child windows without menus since it dispatchs messages
  38.    to the hWnd passed in the message struct. It therefore does
  39.    need the translateMsg method to handle those cases. */
  40. Def messageLoop(self | hMsg, lpMsg, hProp, lpProp hAccel, tmp, hWnd, hMD, wind)
  41. { if TheApp == self
  42.   then hMsg := asGlobalHandle("123456789012345678", GMEM_FIXED);
  43.     lpMsg := globalLock(hMsg);
  44.     hProp := asGlobalHandle(asciiz("ActorOOP"), GMEM_FIXED);
  45.     lpProp := globalLock(hProp);
  46.     hAccel := Call LoadAccelerators(HInstance, asciiz(loadString(IDSNAME)));
  47.     /* works only if OC returned from modelessHandles is the same for
  48.        the "life" of the message loop, since the loop depends on hMD
  49.        to reference to same OC as $HModelessDialog class var. */
  50.     hMD := modelessHandles(Dialog);
  51.  
  52.     loop  /* start message loop */
  53.     while Call GetMessage(lpMsg, 0, 0, 0) <> 0
  54.     begin         /* Modeless dialog processing */
  55.       tmp := size(hMD:OrderedCollection);
  56.       loop
  57.       while tmp > 0
  58.       begin tmp := tmp - 1;
  59.         (Call IsDialogMessage(hMD:Object[tmp], lpMsg) <> 0) cand (tmp := -1);
  60.       endLoop;
  61.                   /* Not a message for a modeless dialog */
  62.       if tmp = 0
  63.       then        /* Find the ultimate ancestor of the window */
  64.         hWnd := wordAt(lpMsg);
  65.         loop
  66.         while not(
  67.           (wind := (asLong(Call GetProp(hWnd, lpProp))*4L):Object[0]):Object)
  68.             cand ((tmp := Call GetParent(hWnd)) <> 0)
  69.         begin hWnd := tmp;
  70.         endLoop;
  71.         wind cand (hWnd := translateMsg(wind, lpMsg) cor hWnd);
  72.         if (hWnd <> 0)
  73.            cand (Call TranslateMDISysAccel(getHWnd(getClient(mainWindow)),lpMsg) = 0)
  74.            cand (Call TranslateAccelerator(hWnd, hAccel, lpMsg) = 0)
  75.         then Call TranslateMessage(lpMsg);
  76.           Call DispatchMessage(lpMsg);
  77.         else (wordAt(lpMsg) = 0) cand message(self, lpMsg);
  78.         endif;
  79.       endif;
  80.     endLoop;
  81.     globalUnlock(hMsg);
  82.     globalUnlock(hProp);
  83.     ^nil; /* Return nil to skip the low-level message loop */
  84.   endif;
  85. }!!
  86.  
  87. /* Create and show the application mainWindow
  88.    Load a data file, if necessary. */ 
  89. Def init(self, cmdLine | dlg fName)
  90. { init(self:ancestor, cmdLine);
  91.   mainWindow := newMain(MDIFileWindow, "FileEditMenu", "MultiEdit", nil);
  92.   setClassType(mainWindow,#FileChildMDI);
  93.   show(mainWindow, CmdShow); 
  94.   ^messageLoop(self);
  95. }!!
  96.  
  97. /* Class Initialization */
  98.