home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / mac / developm / source / macraysh.sit / Code / Source / macmenus.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-05-12  |  6.5 KB  |  293 lines

  1. /*
  2.  * macmenus.c
  3.  *
  4.  * Menu manipulation and handler routines.
  5.  * 
  6.  */
  7.  
  8. #include <MacHeaders>
  9. #include <StandardFile.h>
  10. #include "macmenus.h"
  11. #include "rayshade.h"
  12. #include "options.h"
  13. #include "geom.h"
  14.  
  15. extern WindowPtr imageWindow;
  16. extern RSOptions Options ;
  17. extern Geom *World;
  18.  
  19. MenuHandle myMenus[10] ;
  20. char filename[65] ;
  21. struct menuinfo menuInfo ;
  22.  
  23. void SaveScript();
  24.  
  25. void SetUpMenus(void)
  26. {
  27.     menuInfo.scene_in_memory = 0 ;
  28.     menuInfo.rendering = 0 ;
  29.     myMenus[appleM] = GetMenu(appleID) ;
  30.     myMenus[fileM] = GetMenu(fileID) ;
  31.     myMenus[editM] = GetMenu(editID);
  32.     myMenus[renderM] = GetMenu(renderID) ;
  33.     AddResMenu(myMenus[appleM], 'DRVR');
  34.     InsertMenu(myMenus[appleM],0) ;
  35.     InsertMenu(myMenus[fileM],0) ;
  36.     InsertMenu(myMenus[editM],0) ;
  37.     InsertMenu(myMenus[renderM],0) ;
  38.     DrawMenuBar();
  39.     AdjustMenus() ;
  40. }
  41.  
  42. void AdjustMenus(void)
  43. {
  44.     register WindowPeek wp = (WindowPeek) FrontWindow();
  45.     short kind = wp ? wp->windowKind : 0;
  46.     Boolean DA = kind < 0;
  47.     
  48.     /* Disable everything apart from cancel option */
  49.     if(menuInfo.rendering) {
  50.         DisableItem(myMenus[fileM], newItem);
  51.         DisableItem(myMenus[fileM], openItem);
  52.         DisableItem(myMenus[fileM], saveimageItem) ;
  53.         DisableItem(myMenus[fileM], saveItem) ;
  54.         DisableItem(myMenus[fileM], closeItem) ;
  55.         DisableItem(myMenus[renderM],previewItem) ;
  56.         DisableItem(myMenus[renderM],renderoptionsItem) ;
  57.         DisableItem(myMenus[renderM],screenoptionsItem) ;
  58.         DisableItem(myMenus[renderM],cameraoptionsItem) ;
  59.         SetItem(myMenus[renderM],raytraceItem,"\pStop rendering") ;
  60.         EnableItem(myMenus[renderM],raytraceItem) ;
  61.     }
  62.     else {
  63.         EnableItem(myMenus[fileM], newItem);
  64.         EnableItem(myMenus[fileM], openItem);
  65.         EnableItem(myMenus[fileM], saveimageItem) ;
  66.         EnableItem(myMenus[fileM], saveItem) ;
  67.         EnableItem(myMenus[fileM], closeItem) ;
  68.         EnableItem(myMenus[renderM],previewItem) ;
  69.         EnableItem(myMenus[renderM],renderoptionsItem) ;
  70.         EnableItem(myMenus[renderM],screenoptionsItem) ;
  71.         EnableItem(myMenus[renderM],cameraoptionsItem) ;
  72.         SetItem(myMenus[renderM],raytraceItem,"\pRender Picture") ;
  73.  
  74.         if(imageWindow)
  75.             EnableItem(myMenus[fileM], saveimageItem) ;
  76.         else
  77.             DisableItem(myMenus[fileM], saveimageItem) ;
  78.         
  79.         if(!menuInfo.scene_in_memory) {
  80.             EnableItem(myMenus[fileM], newItem);
  81.             EnableItem(myMenus[fileM], openItem);
  82.             DisableItem(myMenus[fileM], saveimageItem) ;
  83.             DisableItem(myMenus[fileM], saveItem) ;
  84.             DisableItem(myMenus[fileM], closeItem) ;
  85.             DisableItem(myMenus[renderM],raytraceItem) ;
  86.             DisableItem(myMenus[renderM],previewItem) ;
  87.         }
  88.         else {
  89.             DisableItem(myMenus[fileM], newItem);
  90.             DisableItem(myMenus[fileM], openItem);
  91.             EnableItem(myMenus[fileM], closeItem);
  92.             EnableItem(myMenus[fileM], saveItem);
  93.             EnableItem(myMenus[renderM],raytraceItem) ;
  94.             EnableItem(myMenus[renderM],previewItem) ;
  95.         }
  96.     }
  97. }
  98.  
  99. void HandleMenu (long mSelect)
  100. {
  101.     short menuID ;
  102.     short menuItem ;
  103.     Str255 name;
  104.     GrafPtr savePort;
  105.     WindowPeek frontWindow;
  106.     Rect windowBounds;
  107.  
  108.     menuID = HiWord(mSelect) ;
  109.     menuItem = LoWord(mSelect) ;
  110.     switch (menuID) {
  111.         case appleID:
  112.             if(menuItem==aboutItem)
  113.                 aboutDialog();
  114.             else {
  115.                 GetItem(myMenus[appleM], menuItem, name);
  116.                 OpenDeskAcc(name);
  117.             }
  118.             break;
  119.         case fileID:
  120.             switch (menuItem) {
  121.                 case openItem:
  122.                     PrepareScript() ;
  123.                     AdjustMenus() ;
  124.                     break;
  125.                 case newItem:
  126.                     OpenNewScript();
  127.                     AdjustMenus() ;
  128.                     break;
  129.                 case closeItem:
  130.                     /* Add scene deallocation details */
  131.                     /* Disable rendering menu options */
  132.                     menuInfo.scene_in_memory = 0 ;
  133.                     CloseEditorDialog();
  134.                     CleanUpMemory() ;
  135.                     RSResetValues() ;
  136.                     AdjustMenus() ;
  137.                       break;
  138.                 case saveItem:
  139.                     SaveScript();
  140.                     AdjustMenus() ;
  141.                     break ;
  142.                 case saveimageItem:
  143.                     write_picture() ;
  144.                     break ;
  145.                 case quitItem:
  146.                     /* remember to ask user if they wish to save before quitting */
  147.                     ExitToShell();
  148.                     break;
  149.             }
  150.             break;
  151.         case editID:
  152.             if (!SystemEdit(menuItem-1))
  153.                 SysBeep(5);
  154.             break;
  155.         case renderID:
  156.             switch(menuItem) {
  157.                 case raytraceItem:
  158.                     if(!menuInfo.rendering) {
  159.                         menuInfo.rendering = 1 ;
  160.                         HiliteMenu(0) ;
  161.                         AdjustMenus() ;
  162.                         StartRendering() ;
  163.                         menuInfo.rendering = 0 ;
  164.                         AdjustMenus() ;
  165.                     }
  166.                     else {
  167.                         SetRenderAbort() ;
  168.                         menuInfo.rendering = 0 ;
  169.                         AdjustMenus() ;
  170.                     }
  171.                     break ;
  172.                 case previewItem:
  173.                     if(!menuInfo.rendering) {
  174.                         menuInfo.rendering = 1 ;
  175.                         HiliteMenu(0) ;
  176.                         AdjustMenus() ;
  177.                         PreviewRender() ;
  178.                         menuInfo.rendering = 0 ;
  179.                         AdjustMenus() ;
  180.                     }
  181.                     else {
  182.                         SetRenderAbort() ;
  183.                         menuInfo.rendering = 0 ;
  184.                         AdjustMenus() ;
  185.                     }
  186.                     break ;
  187.                 case raytracecrop:
  188.                     break;
  189.                 case renderoptionsItem:
  190.                     SetRenderOptions() ;
  191.                     break ;
  192.                 case screenoptionsItem:
  193.                     SetScreenOptions() ;
  194.                     break ;
  195.                 case cameraoptionsItem:
  196.                     SetCameraOptions() ;
  197.                     break ;
  198.                 case showoptionsItem:
  199.                     RSOptionsList() ;
  200.                     break ;
  201.                 default:
  202.                     break ;
  203.             }
  204.             break ;
  205.     }
  206.     HiliteMenu(0) ;
  207. }
  208. /* end HandleMenu */
  209.  
  210. void PrepareScript()
  211. {
  212.     struct SFReply reply ;
  213.     SFTypeList myTypes;
  214.     Point filerequestPoint ;
  215.     char loop ;
  216.  
  217.     /* Get a filename from disk */
  218.     myTypes[0]='TEXT';
  219.     filerequestPoint.v = 50 ; filerequestPoint.h = 50 ;
  220.     SFGetFile(filerequestPoint, "\p", 0L, 1, myTypes, 0L, &reply) ;
  221.     
  222.     if(reply.good) {
  223.         /*
  224.           * Initialize variables, etc.
  225.          */
  226.         for(loop = 0 ; loop< 65;loop++) filename[loop] = 0 ;
  227.         strncpy(filename,&reply.fName[1],reply.fName[0]) ;
  228.         Options.inputname = filename ;
  229.  
  230.         /*
  231.          * Process input file.
  232.          */
  233.         menuInfo.scene_in_memory = 1 ;
  234.         printf("Attempting to read input :- %s\n",Options.inputname);    
  235.         RSReadInputFile();
  236.         WorldSetup();
  237.         OpenEditorDialog() ;
  238.         printf("Parsing sucessful\n") ;
  239.     }
  240. }
  241.  
  242. void SaveScript()
  243. {
  244.     struct SFReply reply ;
  245.     SFTypeList myTypes;
  246.     Str255 theFileName;
  247.     Point filerequestPoint = {50,50} ;
  248.     short theFile, vRef ;
  249.     char loop ;
  250.  
  251.     SFPutFile(filerequestPoint, "\pSave script as", "\pout.ray", 0L, &reply);
  252.     if (reply.good) {
  253.         vRef = reply.vRefNum;
  254.         pStrCopy(reply.fName, theFileName);
  255.         theFileName[theFileName[0]+1] = '\0';
  256.         GenerateScript(&theFileName[1]);
  257.     }
  258. }
  259.  
  260.  
  261. void OpenNewScript()
  262. {
  263.     /*
  264.      * Process input file.
  265.      */
  266.     menuInfo.scene_in_memory = 1 ;
  267.     SymtabInit();
  268.     WorldSetup();
  269.     OpenEditorDialog() ;
  270. }
  271.  
  272.  
  273. void PreviewRender()
  274. {
  275.     RSOptions old_options ;
  276.  
  277.     /*
  278.      * Preview-quality rendering
  279.      * no shadows
  280.      * max depth of 0
  281.      * 1 jittered sample/pixel
  282.      */
  283.     old_options = Options ;
  284.     Options.no_shadows = TRUE;
  285.     Options.maxdepth = 0;
  286.     Options.maxdepth_set = TRUE;
  287.     Options.jitter = TRUE;
  288.     Options.jitter_set = TRUE;
  289.     Options.samples = 1;
  290.     Options.samples_set = TRUE;    
  291.     StartRendering() ;
  292.     Options = old_options ;
  293. }