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