home *** CD-ROM | disk | FTP | other *** search
- /* ==============
- * AEAAccessor.cc
- * ==============
- */
-
- #include "AEADebugging.h"
-
- #include <AEObjects.h>
-
- #include "AEAAccessor.hh"
-
- OSLAccessorUPP
- AEAAccessor::sOSLAccessorUPP = NewOSLAccessorProc(GenericObjectAccessor);
-
- AEAAccessor::AEAAccessor(DescType inDesiredClass, DescType inContainerType)
- : mDesiredClass(inDesiredClass), mContainerType(inContainerType)
- {
- Install();
- }
-
- AEAAccessor::~AEAAccessor()
- {
- Remove();
- }
-
- void
- AEAAccessor::Install()
- {
- OSErr err = ::AEInstallObjectAccessor(mDesiredClass, mContainerType,
- sOSLAccessorUPP, (long)this, false);
- ThrowIfOSErr_(err);
- }
-
- void
- AEAAccessor::Remove()
- {
- OSErr err = ::AERemoveObjectAccessor(mDesiredClass, mContainerType,
- sOSLAccessorUPP, false);
- ThrowIfOSErr_(err);
- }
-
- void
- AEAAccessor::AccessObject(DescType inDesiredClass,
- const AEDesc *inContainerToken, DescType inContainerClass,
- DescType inKeyForm, const AEDesc *inKeyData, AEDesc *outToken) const
- {
- // Get the containing object
- // (inContainerToken is an OBJ, which is either a (CAEOMObject *) or a list of OBJ.)
- // Get the selection data
- throw (ExceptionCode)errAEEventNotHandled;
- }
-
- AEAObjectAccessorFuncPtr
- AEAAccessor::AccessorFunc()
- {
- // For some stupid reason this CANNOT be overridden.
- return &GenericObjectAccessor;
- }
-
- /*
- * GenericObjectAccessor
- *
- * This function gets installed as an AEOM object accessor with AEInstallObjectAccessor
- * for each AEAAccessor object that gets constructed.
- *
- * inRefCon is a pointer to the AEAAccessor.
- */
-
- pascal OSErr
- AEAAccessor::GenericObjectAccessor(
- DescType inDesiredClass, const AEDesc *inContainerToken, DescType inContainerClass,
- DescType inKeyForm, const AEDesc *inKeyData, AEDesc *outToken, long inRefCon)
- {
- // If we don't have the real accessor, we can't do much.
- // We should probably signal an error.
- if (inRefCon == NULL) return errAEEventNotHandled;
-
- // Throwing out of a callback is probably bad. Don't do it.
- try {
- ((AEAAccessor *)inRefCon)->AccessObject(inDesiredClass,
- inContainerToken, inContainerClass, inKeyForm, inKeyData, outToken);
- } catch (ExceptionCode code) {
- return code;
- } catch (OSErr err) {
- return err;
- }
-
- return noErr;
- }
-