home *** CD-ROM | disk | FTP | other *** search
/ QuickTime 2.0 Developer Kit / QuickTime 2.0 Developer Kit.iso / mac / MAC / Programming Stuff / Sample Code / Mixed Bag / Sample Components / SGPictPanel.c < prev   
Encoding:
C/C++ Source or Header  |  1992-10-22  |  5.4 KB  |  181 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        SGPictPanel.c
  3.  
  4.     Written by:    Peter Hoddie
  5.  
  6.     Copyright:    © 1992 by Apple Computer, Inc., all rights reserved.
  7.  
  8. */
  9.  
  10. #include <Dialogs.h>
  11. #include <Errors.h>
  12. #include <Memory.h>
  13. #include <QuickDraw.h>
  14. #include <Resources.h>
  15.  
  16. #include <QuickTimeComponents.h>
  17.  
  18. #define sgcPictShowTicksType 'TICK'
  19.  
  20. typedef struct {
  21.     ComponentInstance        self;
  22.     ControlHandle            ch;
  23. } PictPanelGlobalsRecord, *PictPanelGlobals;
  24.  
  25. pascal ComponentResult PictPanelDispatcher(ComponentParameters *params, Handle storage);
  26. pascal ComponentResult PictPanelOpen (PictPanelGlobals store, ComponentInstance self);
  27. pascal ComponentResult PictPanelClose (PictPanelGlobals store, ComponentInstance self);
  28. pascal ComponentResult PictPanelCanDo (PictPanelGlobals store, short ftnNumber );
  29. pascal ComponentResult PictPanelVersion (PictPanelGlobals store);
  30. pascal ComponentResult PictPanelPanelGetDitl (PictPanelGlobals store, Handle *ditl);
  31. pascal ComponentResult PictPanelPanelInstall (PictPanelGlobals store, SGChannel c, DialogPtr d, short itemOffset);
  32. pascal ComponentResult PictPanelPanelItem (PictPanelGlobals store, SGChannel c, DialogPtr d, short itemOffset, short itemNum);
  33. pascal ComponentResult PictPanelPanelRemove (PictPanelGlobals store, SGChannel c, DialogPtr d, short itemOffset);
  34. pascal ComponentResult PictPanelPanelGetSettings (PictPanelGlobals store, SGChannel c, UserData *ud, long flags);
  35. pascal ComponentResult PictPanelPanelSetSettings (PictPanelGlobals store, SGChannel c, UserData ud, long flags);
  36.  
  37. // only for PICT channels
  38. pascal ComponentResult SGSetShowTickCount (SGChannel c, Boolean show) = {0x2f3c,2,0x100,0x7000,0xA82A};
  39. pascal ComponentResult SGGetShowTickCount (SGChannel c, Boolean *show) = {0x2f3c,4,0x101,0x7000,0xA82A};
  40.  
  41. pascal ComponentResult PictPanelDispatcher(ComponentParameters *params, Handle storage)
  42. {
  43.     OSErr err = badComponentSelector;
  44.     ComponentFunction componentProc = 0;
  45.  
  46.     switch (params->what) {
  47.         case kComponentOpenSelect: componentProc = PictPanelOpen; break;
  48.         case kComponentCloseSelect: componentProc = PictPanelClose; break;
  49.         case kComponentCanDoSelect: componentProc = PictPanelCanDo; break;
  50.         case kComponentVersionSelect: componentProc = PictPanelVersion; break;
  51.  
  52.         case kSGCPanelGetDitlSelect: componentProc = PictPanelPanelGetDitl; break;
  53.         case kSGCPanelInstallSelect: componentProc = PictPanelPanelInstall; break;
  54.         case kSGCPanelItemSelect: componentProc = PictPanelPanelItem; break;
  55.         case kSGCPanelRemoveSelect: componentProc = PictPanelPanelRemove; break;
  56.         case kSGCPanelGetSettingsSelect: componentProc = PictPanelPanelGetSettings; break;
  57.         case kSGCPanelSetSettingsSelect: componentProc = PictPanelPanelSetSettings; break;
  58.     }
  59.  
  60.     if (componentProc)
  61.         err = CallComponentFunctionWithStorage(storage, params, componentProc);
  62.  
  63.     return err;
  64. }
  65.  
  66. pascal ComponentResult PictPanelCanDo (PictPanelGlobals store, short ftnNumber )
  67. {
  68.     switch (ftnNumber) {
  69.         case kComponentOpenSelect: 
  70.         case kComponentCloseSelect: 
  71.         case kComponentCanDoSelect: 
  72.         case kComponentVersionSelect: 
  73.  
  74.         case kSGCPanelGetDitlSelect: 
  75.         case kSGCPanelInstallSelect: 
  76.         case kSGCPanelItemSelect: 
  77.         case kSGCPanelRemoveSelect: 
  78.         case kSGCPanelGetSettingsSelect: 
  79.         case kSGCPanelSetSettingsSelect: 
  80.             return true;
  81.         default:
  82.             return false;
  83.     }
  84. }
  85.  
  86. pascal ComponentResult PictPanelVersion (PictPanelGlobals store)
  87. {
  88.     return 0x00020001;    
  89. }
  90.  
  91. pascal ComponentResult PictPanelOpen (PictPanelGlobals store, ComponentInstance self)
  92. {
  93.     OSErr err;
  94.  
  95.     store = (PictPanelGlobals)NewPtrClear(sizeof(PictPanelGlobalsRecord));
  96.     if (err = MemError()) goto bail;
  97.  
  98.     store->self = self;
  99.     SetComponentInstanceStorage(self, (Handle)store);
  100.  
  101. bail:
  102.     return err;
  103. }
  104.  
  105. pascal ComponentResult PictPanelClose (PictPanelGlobals store, ComponentInstance self)
  106. {
  107.     if (store) DisposePtr((Ptr)store);
  108.     return noErr;
  109. }
  110.  
  111. pascal ComponentResult PictPanelPanelGetDitl (PictPanelGlobals store, Handle *ditl)
  112. {
  113.     *ditl = GetResource('DITL', 7001); 
  114.     if (!*ditl) return resNotFound;
  115.     DetachResource(*ditl);
  116.     return noErr;
  117. }
  118.  
  119. pascal ComponentResult PictPanelPanelInstall (PictPanelGlobals store, SGChannel c, DialogPtr d, short itemOffset)
  120. {
  121.     Rect r;
  122.     short kind;
  123.     Handle h;
  124.     Boolean ticksShowing;
  125.  
  126.     GetDItem(d, 1 + itemOffset, &kind, &h, &r);
  127.     store->ch = (ControlHandle)h;
  128.     SGGetShowTickCount(c, &ticksShowing);
  129.     SetCtlValue(store->ch, ticksShowing);
  130.  
  131.     return noErr;
  132. }
  133.  
  134. pascal ComponentResult PictPanelPanelItem (PictPanelGlobals store, SGChannel c, DialogPtr d, short itemOffset, short itemNum)
  135. {
  136.     if ((itemNum - itemOffset) == 1) {
  137.         Boolean showing = GetCtlValue(store->ch);
  138.         SetCtlValue(store->ch, !showing);
  139.         SGSetShowTickCount(c, !showing);
  140.     }
  141.  
  142.     return noErr;
  143. }
  144.  
  145. pascal ComponentResult PictPanelPanelRemove (PictPanelGlobals store, SGChannel c, DialogPtr d, short itemOffset)
  146. {
  147.     store->ch = nil;
  148.     return noErr;
  149. }
  150.  
  151. pascal ComponentResult PictPanelPanelGetSettings (PictPanelGlobals store, SGChannel c, UserData *result, long flags)
  152. {
  153.     OSErr err;
  154.     UserData ud;
  155.     Boolean ticksShowing;
  156.  
  157.     if (err = NewUserData(&ud)) goto bail;
  158.     if (err = SGGetShowTickCount(c, &ticksShowing)) goto bail;
  159.     if (err = SetUserDataItem(ud, &ticksShowing, sizeof(ticksShowing), sgcPictShowTicksType, 1)) goto bail;
  160.  
  161. bail:
  162.     if (err) {
  163.         DisposeUserData(ud);
  164.         ud = 0;
  165.     }
  166.     *result = ud;
  167.  
  168.     return err;
  169. }
  170.  
  171. pascal ComponentResult PictPanelPanelSetSettings (PictPanelGlobals store, SGChannel c, UserData ud, long flags)
  172. {
  173.     Boolean ticksShowing;
  174.  
  175.     if (GetUserDataItem(ud, &ticksShowing, sizeof(ticksShowing), sgcPictShowTicksType, 1) == noErr)
  176.         SGSetShowTickCount(c, ticksShowing);
  177.  
  178.     return noErr;
  179. }
  180.  
  181.