home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 July: Mac OS SDK / Dev.CD Jul 97 SDK1.toast / Development Kits (Disc 1) / QuickDraw 3D / Samples / SampleCode / VCDemo / Source / MenuDispatch.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-05-21  |  6.1 KB  |  291 lines  |  [TEXT/MPS ]

  1. /*
  2.     MenuDispatch.c
  3.  
  4.     Handle menu commands. 
  5.  
  6.     © 1995 Apple Computer, Inc.
  7. */
  8. #include <QuickDraw.h>
  9. #include <Windows.h>
  10. #include <Menus.h>
  11. #include <Files.h>
  12. #include <StandardFile.h>
  13. #include <Desk.h>
  14.  
  15. #include "EventLoop.h"
  16. #include "MenuDispatch.h"
  17. #include "QD3DViewer.h"
  18.  
  19. void BuildMenuBars(void);
  20. void ChooseApple(short itemNumber);
  21. void ChooseFile(short item);
  22. void ChooseEdit(short item);
  23. void MenuDispatch(short menuNumber,short itemNumber);
  24. void RunDeskAccesory(short item);
  25. void AdjustMenuItems(void);
  26.  
  27. extern void ChooseView(short item);
  28. extern void ChooseTest(short item);
  29.  
  30. extern WindowPtr    MainView;
  31. int                    gWindowCount;
  32.  
  33. void BuildMenuBars(void)
  34. {    
  35.     SetMenuBar(GetNewMBar(128));
  36.     AppendResMenu(GetMenuHandle(APPLE_MENU),'DRVR');
  37.     DrawMenuBar();
  38.     gWindowCount = 0;
  39. }
  40.  
  41. void RunDeskAccesory(short item)
  42. {
  43.     GrafPtr        savePort;
  44.     short        daRefNum;
  45.     Str255        daName;
  46.     
  47.     GetPort(&savePort);
  48.     GetMenuItemText(GetMenuHandle(APPLE_MENU), item, daName);
  49.     daRefNum = OpenDeskAcc(daName);
  50.     SetPort(savePort);
  51. }
  52.  
  53. void ChooseApple(short itemNumber)
  54. {
  55.     short item;
  56.     
  57.     if(itemNumber == cmdAbout) {
  58.         item = Alert(ABOUT_BOX_ID,nil);
  59.     } else {
  60.         RunDeskAccesory(itemNumber);
  61.     }
  62. }
  63.  
  64. void ChooseFile(short item)
  65. {
  66.     switch(item)
  67.     {
  68.         case cmdNew:
  69.         {
  70.             Rect            defaultBounds = {50, 50, 300, 300};
  71.             TQ3ViewerObject    aViewer;
  72.             TVCDemoDataHdl    demoData;
  73.  
  74.             MainView = GetNewCWindow(128, nil, (WindowPtr)-1L);
  75.             MoveWindow(MainView, 10 + (gWindowCount * 18), 40 + (gWindowCount * 18), true);
  76.             gWindowCount++;
  77.             ShowWindow(MainView);
  78.             aViewer = Q3ViewerNew((CGrafPtr)MainView, &MainView->portRect, kQ3ViewerDefault);
  79.             demoData = (TVCDemoDataHdl)NewHandle(sizeof(TVCDemoData));
  80.             (*demoData)->containerStyle = kContainerFull;
  81.             (*demoData)->viewer1 = aViewer;
  82.             SetWRefCon(MainView, (long)demoData);
  83.             break;
  84.         }
  85.  
  86.         case cmdOpen:
  87.         {
  88.             short                refNum;
  89.             OSErr                anErr = noErr;
  90.             short                numTypes;
  91.             OSType                typeList[2];
  92.             StandardFileReply    sfReply;
  93.             TVCDemoDataHdl        demoData;
  94.  
  95.             numTypes = 2;
  96.             typeList[0] = '3DMF';
  97.             typeList[1] = 'TEXT';
  98.             StandardGetFile(nil, numTypes, typeList, &sfReply);
  99.             if (sfReply.sfGood)
  100.             {
  101.                 anErr = FSpOpenDF(&sfReply.sfFile, fsCurPerm, &refNum);
  102.                 if (anErr == noErr)
  103.                 {
  104.                     TQ3ViewerObject    aViewer;
  105.  
  106.                     ChooseFile(cmdNew);
  107.                     demoData = (TVCDemoDataHdl)GetWRefCon(MainView);
  108.                     aViewer = (*demoData)->viewer1;
  109.                     Q3ViewerUseFile(aViewer, refNum);
  110.                     anErr = FSClose(refNum);
  111.                 }
  112.             }
  113.             break;
  114.         }
  115.  
  116.         case cmdClose:
  117.         {
  118.             if (MainView == FrontWindow())
  119.             {
  120.                 TQ3ViewerObject    aViewer;
  121.                 TVCDemoDataHdl    demoData;
  122.  
  123.                 demoData = (TVCDemoDataHdl)GetWRefCon(MainView);
  124.                 aViewer = (*demoData)->viewer1;
  125.                 Q3ViewerDispose(aViewer);
  126.                 if ((*demoData)->containerStyle == kContainerFourView)
  127.                 {
  128.                     Q3ViewerDispose((*demoData)->viewer2);
  129.                     Q3ViewerDispose((*demoData)->viewer3);
  130.                     Q3ViewerDispose((*demoData)->viewer4);
  131.                 }
  132.                 DisposeHandle((Handle)demoData);
  133.  
  134.                 DisposeWindow(MainView);
  135.                 MainView = FrontWindow();
  136.             }
  137.             break;
  138.         }
  139.  
  140.         case cmdSave:
  141.         case cmdSaveAs:
  142.         {
  143.             short                refNum;
  144.             OSErr                anErr = noErr;
  145.             StandardFileReply    sfReply;
  146.  
  147.             if (!MainView)
  148.                 break;
  149.             StandardPutFile("\pSave model as:", "\pUntitled", &sfReply);
  150.             if (sfReply.sfGood)
  151.             {
  152.                 anErr = FSpOpenDF(&sfReply.sfFile, fsCurPerm, &refNum);
  153.                 if (anErr != noErr)
  154.                 {
  155.                     anErr = FSpCreate(&sfReply.sfFile, 'QD3A', '3DMF', sfReply.sfScript);
  156.                     if (anErr == noErr)
  157.                         anErr = FSpOpenDF(&sfReply.sfFile, fsCurPerm, &refNum);
  158.                 }
  159.                 if (anErr == noErr)
  160.                 {
  161.                     TVCDemoDataHdl    demoData;
  162.                     TQ3ViewerObject    aViewer;
  163.     
  164.                     demoData = (TVCDemoDataHdl)GetWRefCon(MainView);
  165.                     aViewer = (*demoData)->viewer1;
  166.  
  167.                     Q3ViewerWriteFile(aViewer, refNum);
  168.                     anErr = FSClose(refNum);
  169.                 }
  170.             }
  171.             break;
  172.         }
  173.  
  174.         case cmdQuit:
  175.             ChooseFile(cmdClose);
  176.             Done = true;
  177.             break;
  178.  
  179.         default:
  180.             break;
  181.     }
  182. }
  183.  
  184.  
  185. void ChooseEdit(short item)
  186. {
  187.     if (MainView == FrontWindow())
  188.     {
  189.         TQ3ViewerObject    aViewer;
  190.         TVCDemoDataHdl    demoData;
  191.  
  192.         demoData = (TVCDemoDataHdl)GetWRefCon(MainView);
  193.         aViewer = (*demoData)->viewer1;
  194.  
  195.         switch(item)
  196.         {
  197.             case cmdCut:
  198.                 Q3ViewerCut(aViewer);
  199.                 break;
  200.             case cmdCopy:
  201.                 Q3ViewerCopy(aViewer);
  202.                 break;
  203.             case cmdPaste:
  204.                 Q3ViewerPaste(aViewer);
  205.                 break;
  206.             case cmdClear:
  207.                 Q3ViewerClear(aViewer);
  208.                 break;
  209.             default:
  210.                 break;
  211.         }
  212.     }
  213. }
  214.  
  215. void MenuDispatch(short menuNumber,short itemNumber)
  216. {
  217.  
  218.     if(menuNumber != 0)
  219.         switch(menuNumber) {
  220.             case APPLE_MENU :     ChooseApple(itemNumber);
  221.                                 break;
  222.             case FILE_MENU :    ChooseFile(itemNumber);
  223.                                 break;
  224.             case EDIT_MENU :    ChooseEdit(itemNumber);
  225.                                 break;
  226.             case VIEW_MENU :    ChooseView(itemNumber);
  227.                                 break;
  228.             case TEST_MENU :    ChooseTest(itemNumber);
  229.                                 break;
  230.             default :            break;
  231.         }
  232. }
  233.  
  234. void AdjustMenuItems(void)
  235. {
  236.     MenuHandle        menu;
  237.     unsigned long    viewerFlags;
  238.     Boolean            checked;
  239.  
  240.     menu = GetMenuHandle(VIEW_MENU);
  241.     if (MainView && MainView == FrontWindow())
  242.     {
  243.         TVCDemoDataHdl    demoData;
  244.         TQ3ViewerObject    aViewer;
  245.  
  246.         demoData = (TVCDemoDataHdl)GetWRefCon(MainView);
  247.         aViewer = (*demoData)->viewer1;
  248.  
  249.         viewerFlags = Q3ViewerGetFlags(aViewer);
  250.     
  251.         checked = (viewerFlags & kQ3ViewerShowBadge);
  252.         CheckItem(menu, cmdBadge, checked);
  253.     
  254.         checked = (viewerFlags & kQ3ViewerActive);
  255.         CheckItem(menu, cmdViewer, checked);
  256.     
  257.         checked = (viewerFlags & kQ3ViewerControllerVisible);
  258.         CheckItem(menu, cmdController, checked);
  259.     
  260.         checked = (viewerFlags & kQ3ViewerDraggingOff);
  261.         CheckItem(menu, cmdDraggingOff, checked);
  262.     
  263.         checked = (viewerFlags & kQ3ViewerButtonCamera);
  264.         CheckItem(menu, cmdBtnCamera, checked);
  265.     
  266.         checked = (viewerFlags & kQ3ViewerButtonTruck);
  267.         CheckItem(menu, cmdBtnTruck, checked);
  268.     
  269.         checked = (viewerFlags & kQ3ViewerButtonOrbit);
  270.         CheckItem(menu, cmdBtnOrbit, checked);
  271.     
  272.         checked = (viewerFlags & kQ3ViewerDrawFrame);
  273.         CheckItem(menu, cmdFrame, checked);
  274.     
  275.         if ((viewerFlags & kQ3ViewerButtonZoom) > 0)
  276.             CheckItem(menu, cmdBtnZoom, 1);
  277.         else
  278.             CheckItem(menu, cmdBtnZoom, 0);
  279.  
  280.         if ((viewerFlags & kQ3ViewerButtonDolly) > 0)
  281.             CheckItem(menu, cmdBtnDolly, 1);
  282.         else
  283.             CheckItem(menu, cmdBtnDolly, 0);
  284.             
  285.         menu = GetMenuHandle(TEST_MENU);
  286.         CheckItem(menu, cmdNormalMemory, true);
  287.     }
  288. }
  289.  
  290. /* EOF */
  291.