home *** CD-ROM | disk | FTP | other *** search
- /*
- * macmenus.c
- *
- * Menu manipulation and handler routines.
- *
- */
-
- #include <MacHeaders>
- #include <StandardFile.h>
- #include "macmenus.h"
- #include "rayshade.h"
- #include "options.h"
- #include "geom.h"
-
- extern WindowPtr imageWindow;
- extern RSOptions Options ;
- extern Geom *World;
-
- MenuHandle myMenus[10] ;
- char filename[65] ;
- struct menuinfo menuInfo ;
-
- void SaveScript();
-
- void SetUpMenus(void)
- {
- menuInfo.scene_in_memory = 0 ;
- menuInfo.rendering = 0 ;
- myMenus[appleM] = GetMenu(appleID) ;
- myMenus[fileM] = GetMenu(fileID) ;
- myMenus[editM] = GetMenu(editID);
- myMenus[renderM] = GetMenu(renderID) ;
- AddResMenu(myMenus[appleM], 'DRVR');
- InsertMenu(myMenus[appleM],0) ;
- InsertMenu(myMenus[fileM],0) ;
- InsertMenu(myMenus[editM],0) ;
- InsertMenu(myMenus[renderM],0) ;
- DrawMenuBar();
- AdjustMenus() ;
- }
-
- void AdjustMenus(void)
- {
- register WindowPeek wp = (WindowPeek) FrontWindow();
- short kind = wp ? wp->windowKind : 0;
- Boolean DA = kind < 0;
-
- /* Disable everything apart from cancel option */
- if(menuInfo.rendering) {
- DisableItem(myMenus[fileM], newItem);
- DisableItem(myMenus[fileM], openItem);
- DisableItem(myMenus[fileM], saveimageItem) ;
- DisableItem(myMenus[fileM], saveItem) ;
- DisableItem(myMenus[fileM], closeItem) ;
- DisableItem(myMenus[renderM],previewItem) ;
- DisableItem(myMenus[renderM],renderoptionsItem) ;
- DisableItem(myMenus[renderM],screenoptionsItem) ;
- DisableItem(myMenus[renderM],cameraoptionsItem) ;
- SetItem(myMenus[renderM],raytraceItem,"\pStop rendering") ;
- EnableItem(myMenus[renderM],raytraceItem) ;
- }
- else {
- EnableItem(myMenus[fileM], newItem);
- EnableItem(myMenus[fileM], openItem);
- EnableItem(myMenus[fileM], saveimageItem) ;
- EnableItem(myMenus[fileM], saveItem) ;
- EnableItem(myMenus[fileM], closeItem) ;
- EnableItem(myMenus[renderM],previewItem) ;
- EnableItem(myMenus[renderM],renderoptionsItem) ;
- EnableItem(myMenus[renderM],screenoptionsItem) ;
- EnableItem(myMenus[renderM],cameraoptionsItem) ;
- SetItem(myMenus[renderM],raytraceItem,"\pRender Picture") ;
-
- if(imageWindow)
- EnableItem(myMenus[fileM], saveimageItem) ;
- else
- DisableItem(myMenus[fileM], saveimageItem) ;
-
- if(!menuInfo.scene_in_memory) {
- EnableItem(myMenus[fileM], newItem);
- EnableItem(myMenus[fileM], openItem);
- DisableItem(myMenus[fileM], saveimageItem) ;
- DisableItem(myMenus[fileM], saveItem) ;
- DisableItem(myMenus[fileM], closeItem) ;
- DisableItem(myMenus[renderM],raytraceItem) ;
- DisableItem(myMenus[renderM],previewItem) ;
- }
- else {
- DisableItem(myMenus[fileM], newItem);
- DisableItem(myMenus[fileM], openItem);
- EnableItem(myMenus[fileM], closeItem);
- EnableItem(myMenus[fileM], saveItem);
- EnableItem(myMenus[renderM],raytraceItem) ;
- EnableItem(myMenus[renderM],previewItem) ;
- }
- }
- }
-
- void HandleMenu (long mSelect)
- {
- short menuID ;
- short menuItem ;
- Str255 name;
- GrafPtr savePort;
- WindowPeek frontWindow;
- Rect windowBounds;
-
- menuID = HiWord(mSelect) ;
- menuItem = LoWord(mSelect) ;
- switch (menuID) {
- case appleID:
- if(menuItem==aboutItem)
- aboutDialog();
- else {
- GetItem(myMenus[appleM], menuItem, name);
- OpenDeskAcc(name);
- }
- break;
- case fileID:
- switch (menuItem) {
- case openItem:
- PrepareScript() ;
- AdjustMenus() ;
- break;
- case newItem:
- OpenNewScript();
- AdjustMenus() ;
- break;
- case closeItem:
- /* Add scene deallocation details */
- /* Disable rendering menu options */
- menuInfo.scene_in_memory = 0 ;
- CloseEditorDialog();
- CleanUpMemory() ;
- RSResetValues() ;
- AdjustMenus() ;
- break;
- case saveItem:
- SaveScript();
- AdjustMenus() ;
- break ;
- case saveimageItem:
- write_picture() ;
- break ;
- case quitItem:
- /* remember to ask user if they wish to save before quitting */
- ExitToShell();
- break;
- }
- break;
- case editID:
- if (!SystemEdit(menuItem-1))
- SysBeep(5);
- break;
- case renderID:
- switch(menuItem) {
- case raytraceItem:
- if(!menuInfo.rendering) {
- menuInfo.rendering = 1 ;
- HiliteMenu(0) ;
- AdjustMenus() ;
- StartRendering() ;
- menuInfo.rendering = 0 ;
- AdjustMenus() ;
- }
- else {
- SetRenderAbort() ;
- menuInfo.rendering = 0 ;
- AdjustMenus() ;
- }
- break ;
- case previewItem:
- if(!menuInfo.rendering) {
- menuInfo.rendering = 1 ;
- HiliteMenu(0) ;
- AdjustMenus() ;
- PreviewRender() ;
- menuInfo.rendering = 0 ;
- AdjustMenus() ;
- }
- else {
- SetRenderAbort() ;
- menuInfo.rendering = 0 ;
- AdjustMenus() ;
- }
- break ;
- case raytracecrop:
- break;
- case renderoptionsItem:
- SetRenderOptions() ;
- break ;
- case screenoptionsItem:
- SetScreenOptions() ;
- break ;
- case cameraoptionsItem:
- SetCameraOptions() ;
- break ;
- case showoptionsItem:
- RSOptionsList() ;
- break ;
- default:
- break ;
- }
- break ;
- }
- HiliteMenu(0) ;
- }
- /* end HandleMenu */
-
- void PrepareScript()
- {
- struct SFReply reply ;
- SFTypeList myTypes;
- Point filerequestPoint ;
- char loop ;
-
- /* Get a filename from disk */
- myTypes[0]='TEXT';
- filerequestPoint.v = 50 ; filerequestPoint.h = 50 ;
- SFGetFile(filerequestPoint, "\p", 0L, 1, myTypes, 0L, &reply) ;
-
- if(reply.good) {
- /*
- * Initialize variables, etc.
- */
- for(loop = 0 ; loop< 65;loop++) filename[loop] = 0 ;
- strncpy(filename,&reply.fName[1],reply.fName[0]) ;
- Options.inputname = filename ;
-
- /*
- * Process input file.
- */
- menuInfo.scene_in_memory = 1 ;
- printf("Attempting to read input :- %s\n",Options.inputname);
- RSReadInputFile();
- WorldSetup();
- OpenEditorDialog() ;
- printf("Parsing sucessful\n") ;
- }
- }
-
- void SaveScript()
- {
- struct SFReply reply ;
- SFTypeList myTypes;
- Str255 theFileName;
- Point filerequestPoint = {50,50} ;
- short theFile, vRef ;
- char loop ;
-
- SFPutFile(filerequestPoint, "\pSave script as", "\pout.ray", 0L, &reply);
- if (reply.good) {
- vRef = reply.vRefNum;
- pStrCopy(reply.fName, theFileName);
- theFileName[theFileName[0]+1] = '\0';
- GenerateScript(&theFileName[1]);
- }
- }
-
-
- void OpenNewScript()
- {
- /*
- * Process input file.
- */
- menuInfo.scene_in_memory = 1 ;
- SymtabInit();
- WorldSetup();
- OpenEditorDialog() ;
- }
-
-
- void PreviewRender()
- {
- RSOptions old_options ;
-
- /*
- * Preview-quality rendering
- * no shadows
- * max depth of 0
- * 1 jittered sample/pixel
- */
- old_options = Options ;
- Options.no_shadows = TRUE;
- Options.maxdepth = 0;
- Options.maxdepth_set = TRUE;
- Options.jitter = TRUE;
- Options.jitter_set = TRUE;
- Options.samples = 1;
- Options.samples_set = TRUE;
- StartRendering() ;
- Options = old_options ;
- }