home *** CD-ROM | disk | FTP | other *** search
/ MacHack 2000 / MacHack 2000.toast / pc / The Hacks / Genie / Projects / AEA / Source / Sources / Object Accessors / AEAAccessor.cc next >
Encoding:
C/C++ Source or Header  |  2000-06-24  |  2.1 KB  |  90 lines

  1. /*    ==============
  2.  *    AEAAccessor.cc
  3.  *    ==============
  4.  */
  5.  
  6. #include "AEADebugging.h"
  7.  
  8. #include <AEObjects.h>
  9.  
  10. #include "AEAAccessor.hh"
  11.  
  12. OSLAccessorUPP
  13. AEAAccessor::sOSLAccessorUPP = NewOSLAccessorProc(GenericObjectAccessor);
  14.  
  15. AEAAccessor::AEAAccessor(DescType inDesiredClass, DescType inContainerType)
  16. : mDesiredClass(inDesiredClass), mContainerType(inContainerType)
  17. {
  18.     Install();
  19. }
  20.  
  21. AEAAccessor::~AEAAccessor()
  22. {
  23.     Remove();
  24. }
  25.  
  26. void
  27. AEAAccessor::Install()
  28. {
  29.     OSErr err = ::AEInstallObjectAccessor(mDesiredClass, mContainerType, 
  30.         sOSLAccessorUPP, (long)this, false);
  31.     ThrowIfOSErr_(err);
  32. }
  33.  
  34. void
  35. AEAAccessor::Remove()
  36. {
  37.     OSErr err = ::AERemoveObjectAccessor(mDesiredClass, mContainerType, 
  38.         sOSLAccessorUPP, false);
  39.     ThrowIfOSErr_(err);
  40. }
  41.  
  42. void
  43. AEAAccessor::AccessObject(DescType inDesiredClass, 
  44.     const AEDesc *inContainerToken, DescType inContainerClass, 
  45.     DescType inKeyForm, const AEDesc *inKeyData, AEDesc *outToken) const
  46. {
  47.     // Get the containing object
  48.     // (inContainerToken is an OBJ, which is either a (CAEOMObject *) or a list of OBJ.)
  49.     // Get the selection data
  50.     throw (ExceptionCode)errAEEventNotHandled;
  51. }
  52.  
  53. AEAObjectAccessorFuncPtr
  54. AEAAccessor::AccessorFunc()
  55. {
  56.     // For some stupid reason this CANNOT be overridden.
  57.     return &GenericObjectAccessor;
  58. }
  59.  
  60. /*
  61.  *    GenericObjectAccessor
  62.  *    
  63.  *    This function gets installed as an AEOM object accessor with AEInstallObjectAccessor
  64.  *    for each AEAAccessor object that gets constructed.
  65.  *    
  66.  *    inRefCon is a pointer to the AEAAccessor.
  67.  */
  68.  
  69. pascal OSErr
  70. AEAAccessor::GenericObjectAccessor(
  71.     DescType inDesiredClass, const AEDesc *inContainerToken, DescType inContainerClass, 
  72.     DescType inKeyForm, const AEDesc *inKeyData, AEDesc *outToken, long inRefCon)
  73. {
  74.     // If we don't have the real accessor, we can't do much.
  75.     // We should probably signal an error.
  76.     if (inRefCon == NULL) return errAEEventNotHandled;
  77.     
  78.     // Throwing out of a callback is probably bad. Don't do it.
  79.     try {
  80.         ((AEAAccessor *)inRefCon)->AccessObject(inDesiredClass, 
  81.             inContainerToken, inContainerClass, inKeyForm, inKeyData, outToken);
  82.     } catch (ExceptionCode code) {
  83.         return code;
  84.     } catch (OSErr err) {
  85.         return err;
  86.     }
  87.     
  88.     return noErr;
  89. }
  90.