home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK2.toast / Development Kits (Disc 2) / OpenDoc / OpenDoc Development / Debugging Support / OpenDoc™ Source Code / Binding / PartWrap.cpp < prev   
Encoding:
C/C++ Source or Header  |  1996-08-28  |  34.0 KB  |  1,534 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        PartWrap.cpp
  3.  
  4.     Contains:    Implementation of class ODPartWrapper
  5.  
  6.     Owned by:    Caia Grisar
  7.  
  8.     Copyright:    © 1994 - 1996 by Apple Computer, Inc., all rights reserved.
  9.  
  10.     Change History (most recent first):
  11.  
  12.          <6>     7/11/96    jpa        1364071: UseEditor sets message of
  13.                                     newly-created NoParts.
  14.          <5>     6/22/96    EL        1344140: in use editor, throw if change
  15.                                     editor fails.
  16.          <4>      6/4/96    EL        1335851: GetEditor should return a copy
  17.                                     rather than a pointer.
  18.          <3>     5/24/96    jpa        1246074: SOM_CATCH --> SOM_TRY..SOM_ENDTRY
  19.  
  20.     In Progress:
  21.         
  22. */
  23.  
  24. #ifndef SOM_ODFrame_xh
  25. #include <Frame.xh>
  26. #endif
  27.  
  28. #ifndef SOM_ODFacet_xh
  29. #include <Facet.xh>
  30. #endif
  31.  
  32. #ifndef SOM_ODShape_xh
  33. #include <Shape.xh>
  34. #endif
  35.  
  36. #ifndef SOM_ODTransform_xh
  37. #include <Trnsform.xh>
  38. #endif
  39.  
  40. #ifndef SOM_ODWindow_xh
  41. #include <Window.xh>
  42. #endif
  43.  
  44. #ifndef SOM_ODDraft_xh
  45. #include <Draft.xh>
  46. #endif
  47.  
  48. #ifndef SOM_ODStorageUnit_xh
  49. #include <StorageU.xh>
  50. #endif
  51.  
  52. #ifndef _ODNEWOBJ_
  53. #include "ODNewObj.h"
  54. #endif
  55.  
  56. #ifndef _ODUTILS_
  57. #include "ODUtils.h"
  58. #endif
  59.  
  60. #ifndef _STDTYPIO_
  61. #include "StdTypIO.h"
  62. #endif
  63.  
  64. #ifndef _TEMPOBJ_
  65. #include "TempObj.h"
  66. #endif
  67.  
  68. #ifndef _INFOUTIL_
  69. #include "InfoUtil.h"
  70. #endif
  71.  
  72. #ifndef __QUICKDRAW__
  73. #include <Quickdraw.h>
  74. #endif
  75.  
  76. #ifndef SOM_Apple_NoPart_xh
  77. #include <NoPart.xh>
  78. #endif
  79.  
  80. #ifndef _ISOSTR_
  81. #include "ISOStr.h"
  82. #endif
  83.  
  84. #ifndef SOM_ODUndo_xh
  85. #include <Undo.xh>
  86. #endif
  87.  
  88. #ifndef SOM_ODWindowState_xh
  89. #include <WinStat.xh>
  90. #endif
  91.  
  92. #if ODDebug
  93. #ifndef SOM_ODArbitrator_xh
  94. #include <Arbitrat.xh>
  95. #endif
  96.  
  97. #ifndef SOM_Module_OpenDoc_Foci_defined
  98. #include "Foci.xh"
  99. #endif
  100.  
  101. #ifndef _EXCEPT_
  102. #include <Except.h>
  103. #endif
  104. #endif
  105.  
  106. #ifndef SOM_Module_OpenDoc_StdDefs_defined
  107. #include <StdDefs.xh>
  108. #endif
  109.  
  110. #ifndef SOM_Module_OpenDoc_StdTypes_defined
  111. #include <StdTypes.xh>
  112. #endif
  113.  
  114. #ifndef SOM_Module_OpenDoc_StdProps_defined
  115. #include <StdProps.xh>
  116. #endif
  117.  
  118. #ifndef _STORUTIL_
  119. #include <StorUtil.h>
  120. #endif
  121.  
  122. #ifndef _BNDNSUTL_
  123. #include <BndNSUtl.h>
  124. #endif
  125.  
  126. #pragma segment  PartWrapper
  127.  
  128. #define ODPartWrapper_Class_Source
  129. #define VARIABLE_MACROS
  130. #include <PartWrap.xih>
  131.  
  132. //==============================================================================
  133. // ODPartWrapper
  134. //==============================================================================
  135.  
  136. SOM_Scope void  SOMLINK ODPartWrapperInitPartWrapper(ODPartWrapper *somSelf, Environment *ev)
  137. {
  138.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  139.     
  140. }
  141.  
  142. SOM_Scope void  SOMLINK ODPartWrapperSetRealPart(ODPartWrapper *somSelf, Environment *ev,
  143.         ODPart* realPart, ODEditor editor)
  144. {
  145.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  146.     
  147.     SOM_TRY
  148.         
  149.     _fPart = realPart;
  150.  
  151.     ODUShort length = (ODUShort)ODISOStrLength(editor);
  152.     _fEditor = (ODEditor)ODNewPtrClear( length+1 );
  153.     ODBlockMove(editor,  _fEditor, length+1 );
  154.     
  155.     SOM_CATCH_ALL
  156.     SOM_ENDTRY
  157. }
  158.  
  159. SOM_Scope void  SOMLINK ODPartWrapperUseEditor(ODPartWrapper *somSelf, Environment *ev,
  160.         ODEditor editor)
  161. {
  162.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  163.     
  164.     SOM_TRY
  165.  
  166.     ODEditor oldEditor = kODNULL;
  167.     ODULong currentRefCount = 0;
  168.     ODStorageUnit* su = kODNULL;
  169.     ODDraft* draft = kODNULL;
  170.     ODSession* session = kODNULL;
  171.     ODPart* newRealPart = kODNULL;
  172.     ODULong i = 0;
  173.     ODError errorCode = kODNoError;
  174.     
  175.     oldEditor = _fEditor;
  176.     if ( !ODISOStrEqual( editor, oldEditor) )
  177.     {
  178.         if (_fPartInUse)
  179.             THROW(kODErrPartInUse);
  180.         else
  181.         {
  182.             if (_fPart)
  183.             {
  184.                 su = _fPart->GetStorageUnit(ev);
  185.                 su->Acquire(ev);
  186.                 TempODStorageUnit tempSU = su; // ensure it's released
  187.                 draft = su->GetDraft(ev);
  188.     
  189.                 session = su->GetSession(ev);
  190.                 session->GetUndo(ev)->ClearActionHistory(ev, kODDontRespectMarks);
  191.                 session->GetWindowState(ev)->Externalize(ev, draft);
  192.     
  193.                 _fPart->Acquire(ev);    // prevent frame closing from releasing part to zero refcount
  194.                 TRY
  195.                     draft->SwapPart(ev, somSelf);
  196.                 CATCH_ALL
  197.                     _fPart->Release(ev);
  198.                     RERAISE;
  199.                 ENDTRY
  200.         
  201.                 currentRefCount = _fPart->GetRefCount(ev);
  202.                 for (i=currentRefCount; i>0; --i)
  203.                     _fPart->Release(ev);
  204.             
  205.                 draft->ReleaseRealPart(ev, _fPart);
  206.                 
  207.                 TRY
  208.                     newRealPart = draft->ConstructRealPart(ev,
  209.                                             su, kODTrue, somSelf, kODNULL, editor);
  210.                     if (!ODISOStrEqual(_fEditor, editor)) {
  211.                         somSelf->SetRealPart(ev, newRealPart, oldEditor);
  212.                         errorCode = kODErrAlreadyNotified;
  213.                     }
  214.                     else
  215.                         somSelf->SetRealPart(ev, newRealPart, editor);
  216.                 CATCH_ALL
  217.                     errorCode = ErrorCode();
  218.                     TRY
  219.                         newRealPart = draft->ConstructRealPart(ev,
  220.                                                 su, kODTrue, somSelf, kODNULL, oldEditor);
  221.                     CATCH_ALL
  222.                         newRealPart = draft->ConstructRealPart(ev,
  223.                                                 su, kODTrue, somSelf, kODNULL, kODBlackBoxHandlerOfLastResort);
  224.                     ENDTRY
  225.                     somSelf->SetRealPart(ev, newRealPart, oldEditor);
  226.                     if( ODISOStrEqual(newRealPart->somGetClassName(),kODBlackBoxHandlerOfLastResort) ) {
  227.                         // If it's a NoPart, set its error message:
  228.                         ODIText *editorName;
  229.                         if (!GetUserEditorFromEditor( session->GetNameSpaceManager(ev), editor, &editorName )) 
  230.                             editorName = CreateIText(smRoman,langEnglish,editor);
  231.                         CAST(newRealPart,Apple_NoPart)->SetUserMessage(ev,errorCode,editorName,"");
  232.                     }
  233. //                    errorCode = ErrorCode();
  234.                 ENDTRY
  235.             }
  236.             else
  237.             {
  238.                 // $$$$$ this case should never occur, I don't think UseEditor is
  239.                 // called to create new parts anymore. --JBS
  240.                 newRealPart = draft->ConstructRealPart(ev, kODNULL, kODFalse, somSelf, kODNULL, editor);
  241.                 somSelf->SetRealPart(ev, newRealPart, editor);
  242.             }
  243.             
  244.             if (_fPart)
  245.             {                        
  246.                 for (i=currentRefCount; i>1; --i)  // 1 not 0 because part created with rc = 1.
  247.                     _fPart->Acquire(ev);    
  248.             }
  249.             
  250.             if (session) // implies part was swapped above
  251.             {
  252.                 _fPart->Release(ev);    // balance acquire before SwapPart above
  253.                 session->GetWindowState(ev)->Internalize(ev, draft);
  254.             }
  255.         }
  256.     }
  257.     
  258.     THROW_IF_ERROR(errorCode);  // let user know editor didn't get swapped
  259.     
  260.     SOM_CATCH_ALL
  261.     SOM_ENDTRY
  262. }
  263.  
  264. SOM_Scope ODEditor  SOMLINK ODPartWrapperGetEditor(ODPartWrapper *somSelf, Environment *ev)
  265. {
  266.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  267.     
  268.     ODUShort length = (ODUShort)ODISOStrLength(_fEditor);
  269.     
  270.     ODEditor partName = (ODEditor)ODNewPtrClear( length+1 );;
  271.     ODBlockMove(_fEditor,  partName, length+1 );
  272.     return partName;
  273.  
  274. }
  275. /*
  276. SOM_Scope void  SOMLINK ODPartWrappersomInit(ODPartWrapper *somSelf)
  277. {
  278.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  279.  
  280.     _fPart = kODNULL;
  281.     parent_somInit(somSelf);
  282. }
  283. */
  284. SOM_Scope void  SOMLINK ODPartWrappersomUninit(ODPartWrapper *somSelf)
  285. {
  286.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  287.  
  288.     ODDeleteObject(_fEditor);
  289.     if( _fPart ) {
  290.         TRY{
  291.             Environment* ev = somGetGlobalEnvironment();
  292.             _fPart->GetStorageUnit(ev)->GetDraft(ev)->DeleteRealPart(ev, _fPart);
  293.         }CATCH_ALL{
  294.             // ignore exception
  295.         }ENDTRY
  296.     }
  297. }
  298.  
  299. SOM_Scope void  SOMLINK ODPartWrapperFulfillPromise(ODPartWrapper *somSelf, Environment *ev,
  300.         ODStorageUnitView* promiseSUView)
  301. {
  302.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  303.     
  304.     SOM_TRY
  305.  
  306.     _fPart->FulfillPromise(ev,promiseSUView);
  307.  
  308.     SOM_CATCH_ALL
  309.     SOM_ENDTRY
  310. }
  311.  
  312. SOM_Scope void  SOMLINK ODPartWrapperDropCompleted(ODPartWrapper *somSelf, Environment *ev,
  313.         ODPart* destPart,
  314.         ODDropResult dropResult)
  315. {
  316.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  317.     
  318.     SOM_TRY
  319.  
  320.     _fPart->DropCompleted(ev,destPart,dropResult);
  321.     
  322.     SOM_CATCH_ALL
  323.     SOM_ENDTRY
  324. }
  325.  
  326. SOM_Scope ODDragResult  SOMLINK ODPartWrapperDragEnter(ODPartWrapper *somSelf, Environment *ev,
  327.         ODDragItemIterator* dragInfo,
  328.         ODFacet* facet,
  329.         ODPoint* where)
  330. {
  331.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  332.     ODDragResult    dragResult = kODFalse;
  333.     
  334.     SOM_TRY
  335.     
  336.     dragResult = _fPart->DragEnter(ev,dragInfo,facet,where);
  337.  
  338.     SOM_CATCH_ALL
  339.     SOM_ENDTRY
  340.  
  341.     return dragResult;
  342. }
  343.  
  344. SOM_Scope ODDragResult  SOMLINK ODPartWrapperDragWithin(ODPartWrapper *somSelf, Environment *ev,
  345.         ODDragItemIterator* dragInfo,
  346.         ODFacet* facet,
  347.         ODPoint* where)
  348. {
  349.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  350.     ODDragResult    dragResult = kODFalse;
  351.     
  352.     SOM_TRY
  353.     
  354.     dragResult = _fPart->DragWithin(ev,dragInfo,facet,where);
  355.  
  356.     SOM_CATCH_ALL
  357.     SOM_ENDTRY
  358.  
  359.     return dragResult;
  360. }
  361.  
  362. SOM_Scope void  SOMLINK ODPartWrapperDragLeave(ODPartWrapper *somSelf, Environment *ev,
  363.         ODFacet* facet,
  364.         ODPoint* where)
  365. {
  366.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  367.     
  368.     SOM_TRY
  369.     
  370.     _fPart->DragLeave(ev,facet,where);
  371.  
  372.     SOM_CATCH_ALL
  373.     SOM_ENDTRY
  374. }
  375.  
  376. SOM_Scope ODDropResult  SOMLINK ODPartWrapperDrop(ODPartWrapper *somSelf, Environment *ev,
  377.         ODDragItemIterator* dropInfo,
  378.         ODFacet* facet,
  379.         ODPoint* where)
  380. {
  381.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  382.     
  383.     ODDragResult    dragResult = kODDropFail;
  384.     
  385.     SOM_TRY
  386.     
  387.     dragResult = _fPart->Drop(ev,dropInfo,facet,where);
  388.  
  389.     SOM_CATCH_ALL
  390.     SOM_ENDTRY
  391.  
  392.     return dragResult;
  393. }
  394.  
  395. SOM_Scope void  SOMLINK ODPartWrapperContainingPartPropertiesUpdated(ODPartWrapper *somSelf, Environment *ev,
  396.         ODFrame* frame,
  397.         ODStorageUnit* propertyUnit)
  398. {
  399.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  400.     
  401.     SOM_TRY
  402.     
  403.     _fPart->ContainingPartPropertiesUpdated(ev,frame,propertyUnit);
  404.  
  405.     SOM_CATCH_ALL
  406.     SOM_ENDTRY
  407. }
  408.  
  409. SOM_Scope ODStorageUnit*  SOMLINK ODPartWrapperAcquireContainingPartProperties(ODPartWrapper *somSelf, Environment *ev,
  410.         ODFrame* frame)
  411. {
  412.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  413.     ODStorageUnit* partProps = kODNULL;
  414.     
  415.     SOM_TRY
  416.     
  417.     partProps = _fPart->AcquireContainingPartProperties(ev,frame);
  418.  
  419.     SOM_CATCH_ALL
  420.     SOM_ENDTRY
  421.  
  422.     return partProps;
  423. }
  424.  
  425. SOM_Scope ODBoolean  SOMLINK ODPartWrapperRevealFrame(ODPartWrapper *somSelf, Environment *ev,
  426.         ODFrame* embeddedFrame,
  427.         ODShape* revealShape)
  428. {
  429.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  430.     ODBoolean    revealFrame = kODFalse;
  431.  
  432.     SOM_TRY
  433.  
  434.     revealFrame = _fPart->RevealFrame(ev,embeddedFrame,revealShape);
  435.  
  436.     SOM_CATCH_ALL
  437.     SOM_ENDTRY
  438.  
  439.     return revealFrame;
  440. }
  441.  
  442. SOM_Scope void  SOMLINK ODPartWrapperEmbeddedFrameSpec(ODPartWrapper *somSelf, Environment *ev,
  443.         ODFrame* embeddedFrame,
  444.         ODObjectSpec* spec)
  445. {
  446.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  447.     
  448.     SOM_TRY
  449.     
  450.     _fPart->EmbeddedFrameSpec(ev,embeddedFrame,spec);
  451.  
  452.     SOM_CATCH_ALL
  453.     SOM_ENDTRY
  454. }
  455.  
  456. SOM_Scope ODEmbeddedFramesIterator*  SOMLINK ODPartWrapperCreateEmbeddedFramesIterator(ODPartWrapper *somSelf, Environment *ev,
  457.         ODFrame* frame)
  458. {
  459.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  460.     ODEmbeddedFramesIterator*    itr = kODNULL;
  461.     
  462.     SOM_TRY
  463.     
  464.     itr = _fPart->CreateEmbeddedFramesIterator(ev,frame);
  465.  
  466.     SOM_CATCH_ALL
  467.     SOM_ENDTRY
  468.  
  469.     return itr;
  470. }
  471.  
  472. SOM_Scope void  SOMLINK ODPartWrapperDisplayFrameAdded(ODPartWrapper *somSelf, Environment *ev,
  473.         ODFrame* frame)
  474. {
  475.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  476.  
  477.     SOM_TRY
  478.     
  479.     _fPart->DisplayFrameAdded(ev,frame);
  480.  
  481.     SOM_CATCH_ALL
  482.     SOM_ENDTRY
  483. }
  484.  
  485. SOM_Scope void  SOMLINK ODPartWrapperDisplayFrameRemoved(ODPartWrapper *somSelf, Environment *ev,
  486.         ODFrame* frame)
  487. {
  488.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  489.  
  490.     SOM_TRY
  491.  
  492.     _fPart->DisplayFrameRemoved(ev,frame);
  493. #if ODDebug
  494.  
  495.         // Sanity check to make sure parts have relinquished foci.
  496.         // It would be more general to have a private ODArbitrator
  497.         // method to determine if any frames of a part still own
  498.         // foci
  499.         
  500.         ODStorageUnit* su = _fPart->GetStorageUnit(ev);
  501.         ODSession* session = su->GetSession(ev);
  502.         ODArbitrator* arbitrator = session->GetArbitrator(ev);
  503.                 
  504.         {
  505.         TempODFrame focusFrame = arbitrator->AcquireFocusOwner(ev, session->Tokenize(ev, kODSelectionFocus));
  506.         if (focusFrame && ODObjectsAreEqual(ev, frame, focusFrame))
  507.             WARN("DisplayFrameRemoved: Frame %x of Part %x still has selection focus", frame, _fPart);
  508.         }
  509.         {
  510.         TempODFrame focusFrame = arbitrator->AcquireFocusOwner(ev, session->Tokenize(ev, kODMenuFocus));
  511.         if (focusFrame && ODObjectsAreEqual(ev, frame, focusFrame))
  512.             WARN("DisplayFrameRemoved: Frame %x of Part %x still has menu focus", frame, _fPart);
  513.         }
  514.         {
  515.         TempODFrame focusFrame = arbitrator->AcquireFocusOwner(ev, session->Tokenize(ev, kODKeyFocus));
  516.         if (focusFrame && ODObjectsAreEqual(ev, frame, focusFrame))
  517.             WARN("DisplayFrameRemoved: Frame %x of Part %x still has key focus", frame, _fPart);
  518.         }
  519.         {
  520.         TempODFrame focusFrame = arbitrator->AcquireFocusOwner(ev, session->Tokenize(ev, kODScrollingFocus));
  521.         if (focusFrame && ODObjectsAreEqual(ev, frame, focusFrame))
  522.             WARN("DisplayFrameRemoved: Frame %x of Part %x still has scrolling focus", frame, _fPart);
  523.         }
  524.         {
  525.         TempODFrame focusFrame = arbitrator->AcquireFocusOwner(ev, session->Tokenize(ev, kODClipboardFocus));
  526.         if (focusFrame && ODObjectsAreEqual(ev, frame, focusFrame))
  527.             WARN("DisplayFrameRemoved: Frame %x of Part %x still has clipboard focus", frame, _fPart);
  528.         }
  529.  
  530. #endif
  531.  
  532.     SOM_CATCH_ALL
  533.     SOM_ENDTRY
  534. }
  535.  
  536. SOM_Scope void  SOMLINK ODPartWrapperDisplayFrameConnected(ODPartWrapper *somSelf, Environment *ev,
  537.         ODFrame* frame)
  538. {
  539.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  540.  
  541.     SOM_TRY
  542.  
  543.     _fPart->DisplayFrameConnected(ev,frame);
  544.  
  545.     SOM_CATCH_ALL
  546.     SOM_ENDTRY
  547. }
  548.  
  549. SOM_Scope void  SOMLINK ODPartWrapperDisplayFrameClosed(ODPartWrapper *somSelf, Environment *ev,
  550.         ODFrame* frame)
  551. {
  552.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  553.  
  554.     SOM_TRY
  555.  
  556.     _fPart->DisplayFrameClosed(ev,frame);
  557. #if ODDebug
  558.  
  559.         // Sanity check to make sure parts have relinquished foci.
  560.         // It would be more general to have a private ODArbitrator
  561.         // method to determine if any frames of a part still own
  562.         // foci
  563.         
  564.         ODStorageUnit* su = _fPart->GetStorageUnit(ev);
  565.         ODSession* session = su->GetSession(ev);
  566.         ODArbitrator* arbitrator = session->GetArbitrator(ev);
  567.                 
  568.         {
  569.         TempODFrame focusFrame = arbitrator->AcquireFocusOwner(ev, session->Tokenize(ev, kODSelectionFocus));
  570.         if (focusFrame && ODObjectsAreEqual(ev, frame, focusFrame))
  571.             WARN("DisplayFrameClosed: Frame %x of Part %x still has selection focus", frame, _fPart);
  572.         }
  573.         {
  574.         TempODFrame focusFrame = arbitrator->AcquireFocusOwner(ev, session->Tokenize(ev, kODMenuFocus));
  575.         if (focusFrame && ODObjectsAreEqual(ev, frame, focusFrame))
  576.             WARN("DisplayFrameClosed: Frame %x of Part %x still has menu focus", frame, _fPart);
  577.         }
  578.         {
  579.         TempODFrame focusFrame = arbitrator->AcquireFocusOwner(ev, session->Tokenize(ev, kODKeyFocus));
  580.         if (focusFrame && ODObjectsAreEqual(ev, frame, focusFrame))
  581.             WARN("DisplayFrameClosed: Frame %x of Part %x still has key focus", frame, _fPart);
  582.         }
  583.         {
  584.         TempODFrame focusFrame = arbitrator->AcquireFocusOwner(ev, session->Tokenize(ev, kODScrollingFocus));
  585.         if (focusFrame && ODObjectsAreEqual(ev, frame, focusFrame))
  586.             WARN("DisplayFrameClosed: Frame %x of Part %x still has scrolling focus", frame, _fPart);
  587.         }
  588.         {
  589.         TempODFrame focusFrame = arbitrator->AcquireFocusOwner(ev, session->Tokenize(ev, kODClipboardFocus));
  590.         if (focusFrame && ODObjectsAreEqual(ev, frame, focusFrame))
  591.             WARN("DisplayFrameClosed: Frame %x of Part %x still has clipboard focus", frame, _fPart);
  592.         }
  593.  
  594. #endif
  595.  
  596.     SOM_CATCH_ALL
  597.     SOM_ENDTRY
  598. }
  599.  
  600. SOM_Scope void  SOMLINK ODPartWrapperAttachSourceFrame(ODPartWrapper *somSelf, Environment *ev,
  601.         ODFrame* frame,
  602.         ODFrame* sourceFrame)
  603. {
  604.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  605.  
  606.     SOM_TRY
  607.  
  608.     _fPart->AttachSourceFrame(ev,frame,sourceFrame);
  609.  
  610.     SOM_CATCH_ALL
  611.     SOM_ENDTRY
  612. }
  613.  
  614. SOM_Scope void  SOMLINK ODPartWrapperFrameShapeChanged(ODPartWrapper *somSelf, Environment *ev,
  615.         ODFrame* frame)
  616. {
  617.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  618.  
  619.     SOM_TRY
  620.  
  621.     _fPart->FrameShapeChanged(ev,frame);
  622.  
  623.     SOM_CATCH_ALL
  624.     SOM_ENDTRY
  625. }
  626.  
  627. SOM_Scope void  SOMLINK ODPartWrapperViewTypeChanged(ODPartWrapper *somSelf, Environment *ev,
  628.         ODFrame* frame)
  629. {
  630.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  631.  
  632.     SOM_TRY
  633.  
  634.     _fPart->ViewTypeChanged(ev,frame);
  635.  
  636.     SOM_CATCH_ALL
  637.     SOM_ENDTRY
  638. }
  639.  
  640. SOM_Scope void  SOMLINK ODPartWrapperPresentationChanged(ODPartWrapper *somSelf, Environment *ev,
  641.         ODFrame* frame)
  642. {
  643.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  644.  
  645.     SOM_TRY
  646.  
  647.     _fPart->PresentationChanged(ev,frame);
  648.  
  649.     SOM_CATCH_ALL
  650.     SOM_ENDTRY
  651. }
  652.  
  653. SOM_Scope void  SOMLINK ODPartWrapperSequenceChanged(ODPartWrapper *somSelf, Environment *ev,
  654.         ODFrame* frame)
  655. {
  656.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  657.  
  658.     SOM_TRY
  659.  
  660.     _fPart->SequenceChanged(ev,frame);
  661.  
  662.     SOM_CATCH_ALL
  663.     SOM_ENDTRY
  664. }
  665.  
  666. SOM_Scope ODInfoType  SOMLINK ODPartWrapperReadPartInfo(ODPartWrapper *somSelf, Environment *ev,
  667.         ODFrame* frame,
  668.         ODStorageUnitView* storageUnitView)
  669. {
  670.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  671.     ODInfoType partInfo = kODNULL;
  672.     
  673.     SOM_TRY
  674.  
  675.     partInfo = _fPart->ReadPartInfo(ev,frame,storageUnitView);
  676.  
  677.     SOM_CATCH_ALL
  678.     SOM_ENDTRY
  679.     
  680.     return partInfo;
  681. }
  682.  
  683. SOM_Scope void  SOMLINK ODPartWrapperWritePartInfo(ODPartWrapper *somSelf, Environment *ev,
  684.         ODInfoType partInfo,
  685.         ODStorageUnitView* storageUnitView)
  686. {
  687.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  688.  
  689.     SOM_TRY
  690.  
  691.     _fPart->WritePartInfo(ev,partInfo,storageUnitView);
  692.  
  693.     SOM_CATCH_ALL
  694.     SOM_ENDTRY
  695. }
  696.  
  697. SOM_Scope void  SOMLINK ODPartWrapperClonePartInfo(ODPartWrapper *somSelf, Environment *ev,
  698.         ODDraftKey key,
  699.         ODInfoType partInfo,
  700.         ODStorageUnitView* storageUnitView,
  701.         ODFrame* scopeFrame)
  702. {
  703.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  704.  
  705.     SOM_TRY
  706.  
  707.     _fPart->ClonePartInfo(ev,key,partInfo,storageUnitView,scopeFrame);
  708.  
  709.     SOM_CATCH_ALL
  710.     SOM_ENDTRY
  711. }
  712.  
  713. SOM_Scope ODID  SOMLINK ODPartWrapperOpen(ODPartWrapper *somSelf, Environment *ev,
  714.         ODFrame* frame)
  715. {
  716.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  717.     ODID    id = 0;
  718.     
  719.     SOM_TRY
  720.  
  721.     id = _fPart->Open(ev,frame);
  722.  
  723.     SOM_CATCH_ALL
  724.     SOM_ENDTRY
  725.     
  726.     return id;
  727. }
  728.  
  729. SOM_Scope ODFrame*  SOMLINK ODPartWrapperRequestEmbeddedFrame(ODPartWrapper *somSelf, Environment *ev,
  730.         ODFrame* containingFrame,
  731.         ODFrame* baseFrame,
  732.         ODShape* frameShape,
  733.         ODPart* embedPart,
  734.         ODTypeToken viewType,
  735.         ODTypeToken presentation,
  736.         ODBoolean isOverlaid)
  737. {
  738.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  739.     ODFrame*    frame = kODNULL;
  740.     
  741.     SOM_TRY
  742.  
  743.     frame = _fPart->RequestEmbeddedFrame(ev,containingFrame,baseFrame,frameShape,embedPart,viewType,presentation,isOverlaid);
  744.  
  745.     SOM_CATCH_ALL
  746.     SOM_ENDTRY
  747.     
  748.     return frame;
  749. }
  750.  
  751. SOM_Scope void  SOMLINK ODPartWrapperRemoveEmbeddedFrame(ODPartWrapper *somSelf, Environment *ev,
  752.         ODFrame* embeddedFrame)
  753. {
  754.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  755.  
  756.     SOM_TRY
  757.  
  758.     _fPart->RemoveEmbeddedFrame(ev,embeddedFrame);
  759.  
  760.     SOM_CATCH_ALL
  761.     SOM_ENDTRY
  762. }
  763.  
  764. SOM_Scope ODShape*  SOMLINK ODPartWrapperRequestFrameShape(ODPartWrapper *somSelf, Environment *ev,
  765.         ODFrame* embeddedFrame,
  766.         ODShape* frameShape)
  767. {
  768.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  769.     ODShape*    shape = kODNULL;
  770.     
  771.     SOM_TRY
  772.  
  773.     shape = _fPart->RequestFrameShape(ev,embeddedFrame,frameShape);
  774.  
  775.     SOM_CATCH_ALL
  776.     SOM_ENDTRY
  777.     
  778.     return shape;
  779. }
  780.  
  781. SOM_Scope void  SOMLINK ODPartWrapperUsedShapeChanged(ODPartWrapper *somSelf, Environment *ev,
  782.         ODFrame* embeddedFrame)
  783. {
  784.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  785.  
  786.     SOM_TRY
  787.  
  788.     _fPart->UsedShapeChanged(ev,embeddedFrame);
  789.  
  790.     SOM_CATCH_ALL
  791.     SOM_ENDTRY
  792. }
  793.  
  794. SOM_Scope ODShape*  SOMLINK ODPartWrapperAdjustBorderShape(ODPartWrapper *somSelf, Environment *ev,
  795.         ODFacet* embeddedFacet,
  796.         ODShape* shape)
  797. {
  798.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  799.     ODShape*    borderShape = kODNULL;
  800.     
  801.     SOM_TRY
  802.  
  803.     borderShape = _fPart->AdjustBorderShape(ev,embeddedFacet,shape);
  804.  
  805.     SOM_CATCH_ALL
  806.     SOM_ENDTRY
  807.     
  808.     return borderShape;
  809. }
  810.  
  811. SOM_Scope void  SOMLINK ODPartWrapperFacetAdded(ODPartWrapper *somSelf, Environment *ev,
  812.         ODFacet* facet)
  813. {
  814.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  815.  
  816.     SOM_TRY
  817.  
  818.     _fPart->FacetAdded(ev,facet);
  819.  
  820.     SOM_CATCH_ALL
  821.     SOM_ENDTRY
  822. }
  823.  
  824. SOM_Scope void  SOMLINK ODPartWrapperFacetRemoved(ODPartWrapper *somSelf, Environment *ev,
  825.         ODFacet* facet)
  826. {
  827.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  828.  
  829.     SOM_TRY
  830.  
  831.     _fPart->FacetRemoved(ev,facet);
  832.  
  833.     SOM_CATCH_ALL
  834.     SOM_ENDTRY
  835. }
  836.  
  837. SOM_Scope void  SOMLINK ODPartWrapperCanvasChanged(ODPartWrapper *somSelf, Environment *ev,
  838.         ODFacet* facet)
  839. {
  840.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  841.  
  842.     SOM_TRY
  843.  
  844.     _fPart->CanvasChanged(ev,facet);
  845.  
  846.     SOM_CATCH_ALL
  847.     SOM_ENDTRY
  848. }
  849.  
  850. SOM_Scope void  SOMLINK ODPartWrapperGeometryChanged(ODPartWrapper *somSelf, Environment *ev,
  851.         ODFacet* facet,
  852.         ODBoolean clipShapeChanged,
  853.         ODBoolean externalTransformChanged)
  854. {
  855.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  856.  
  857.     SOM_TRY
  858.  
  859.     _fPart->GeometryChanged(ev,facet,clipShapeChanged,externalTransformChanged);
  860.  
  861.     SOM_CATCH_ALL
  862.     SOM_ENDTRY
  863. }
  864.  
  865. SOM_Scope void  SOMLINK ODPartWrapperDraw(ODPartWrapper *somSelf, Environment *ev,
  866.         ODFacet* facet,
  867.         ODShape* invalidShape)
  868. {
  869.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  870.  
  871.     SOM_TRY
  872.  
  873.     _fPart->Draw(ev,facet,invalidShape);
  874.  
  875.     SOM_CATCH_ALL
  876.     SOM_ENDTRY
  877. }
  878.  
  879. SOM_Scope void  SOMLINK ODPartWrapperCanvasUpdated(ODPartWrapper *somSelf, Environment *ev,
  880.         ODCanvas* canvas)
  881. {
  882.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  883.  
  884.     SOM_TRY
  885.  
  886.     _fPart->CanvasUpdated(ev,canvas);
  887.  
  888.     SOM_CATCH_ALL
  889.     SOM_ENDTRY
  890. }
  891.  
  892. SOM_Scope void  SOMLINK ODPartWrapperHighlightChanged(ODPartWrapper *somSelf, Environment *ev,
  893.         ODFacet* facet)
  894. {
  895.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  896.  
  897.     SOM_TRY
  898.  
  899.     _fPart->HighlightChanged(ev,facet);
  900.  
  901.     SOM_CATCH_ALL
  902.     SOM_ENDTRY
  903. }
  904.  
  905. SOM_Scope ODULong  SOMLINK ODPartWrapperGetPrintResolution(ODPartWrapper *somSelf, Environment *ev,
  906.         ODFrame* frame)
  907. {
  908.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  909.     ODULong    printRes = 0;
  910.     
  911.     SOM_TRY
  912.  
  913.     printRes = _fPart->GetPrintResolution(ev,frame);
  914.  
  915.     SOM_CATCH_ALL
  916.     SOM_ENDTRY
  917.     
  918.     return printRes;
  919. }
  920.  
  921. SOM_Scope ODLinkSource*  SOMLINK ODPartWrapperCreateLink(ODPartWrapper *somSelf, Environment *ev,
  922.         ODByteArray* data)
  923. {
  924.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  925.     ODLinkSource*    link = kODNULL;
  926.     
  927.     SOM_TRY
  928.  
  929.     link = _fPart->CreateLink(ev,data);
  930.  
  931.     SOM_CATCH_ALL
  932.     SOM_ENDTRY
  933.     
  934.     return link;
  935. }
  936.  
  937. SOM_Scope void  SOMLINK ODPartWrapperLinkUpdated(ODPartWrapper *somSelf, Environment *ev,
  938.         ODLink* updatedLink,
  939.         ODUpdateID change)
  940. {
  941.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  942.  
  943.     SOM_TRY
  944.  
  945.     _fPart->LinkUpdated(ev,updatedLink,change);
  946.  
  947.     SOM_CATCH_ALL
  948.     SOM_ENDTRY
  949. }
  950.  
  951. SOM_Scope void  SOMLINK ODPartWrapperRevealLink(ODPartWrapper *somSelf, Environment *ev,
  952.         ODLinkSource* linkSource)
  953. {
  954.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  955.  
  956.     SOM_TRY
  957.  
  958.     _fPart->RevealLink(ev,linkSource);
  959.  
  960.     SOM_CATCH_ALL
  961.     SOM_ENDTRY
  962. }
  963.  
  964. SOM_Scope void  SOMLINK ODPartWrapperEmbeddedFrameUpdated(ODPartWrapper *somSelf, Environment *ev,
  965.         ODFrame* frame,
  966.         ODUpdateID change)
  967. {
  968.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  969.  
  970.     SOM_TRY
  971.  
  972.     _fPart->EmbeddedFrameUpdated(ev,frame,change);
  973.  
  974.     SOM_CATCH_ALL
  975.     SOM_ENDTRY
  976. }
  977.  
  978. SOM_Scope ODBoolean SOMLINK ODPartWrapperEditInLinkAttempted(ODPartWrapper *somSelf, Environment *ev,
  979.         ODFrame* frame)
  980. {
  981.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  982.     ODBoolean result = kODFalse;
  983.  
  984.     SOM_TRY
  985.  
  986.     result = _fPart->EditInLinkAttempted(ev,frame);
  987.  
  988.     SOM_CATCH_ALL
  989.     SOM_ENDTRY
  990.  
  991.     return result;
  992. }
  993.  
  994. SOM_Scope void  SOMLINK ODPartWrapperLinkStatusChanged(ODPartWrapper *somSelf, Environment *ev,
  995.         ODFrame* frame)
  996. {
  997.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  998.  
  999.     SOM_TRY
  1000.  
  1001.     _fPart->LinkStatusChanged(ev,frame);
  1002.  
  1003.     SOM_CATCH_ALL
  1004.     SOM_ENDTRY
  1005. }
  1006.  
  1007. SOM_Scope ODBoolean  SOMLINK ODPartWrapperBeginRelinquishFocus(ODPartWrapper *somSelf, Environment *ev,
  1008.         ODTypeToken focus,
  1009.         ODFrame* ownerFrame,
  1010.         ODFrame* proposedFrame)
  1011. {
  1012.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1013.     ODBoolean    relinqFocus = kODFalse;
  1014.     
  1015.     SOM_TRY
  1016.  
  1017.     relinqFocus = _fPart->BeginRelinquishFocus(ev,focus,ownerFrame,proposedFrame);
  1018.  
  1019.     SOM_CATCH_ALL
  1020.     SOM_ENDTRY
  1021.     
  1022.     return relinqFocus;
  1023. }
  1024.  
  1025. SOM_Scope void  SOMLINK ODPartWrapperCommitRelinquishFocus(ODPartWrapper *somSelf, Environment *ev,
  1026.         ODTypeToken focus,
  1027.         ODFrame* ownerFrame,
  1028.         ODFrame* proposedFrame)
  1029. {
  1030.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1031.  
  1032.     SOM_TRY
  1033.  
  1034.     _fPart->CommitRelinquishFocus(ev,focus,ownerFrame,proposedFrame);
  1035.  
  1036.     SOM_CATCH_ALL
  1037.     SOM_ENDTRY
  1038. }
  1039.  
  1040. SOM_Scope void  SOMLINK ODPartWrapperAbortRelinquishFocus(ODPartWrapper *somSelf, Environment *ev,
  1041.         ODTypeToken focus,
  1042.         ODFrame* ownerFrame,
  1043.         ODFrame* proposedFrame)
  1044. {
  1045.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1046.  
  1047.     SOM_TRY
  1048.  
  1049.     _fPart->AbortRelinquishFocus(ev,focus,ownerFrame,proposedFrame);
  1050.  
  1051.     SOM_CATCH_ALL
  1052.     SOM_ENDTRY
  1053. }
  1054.  
  1055. SOM_Scope void  SOMLINK ODPartWrapperFocusAcquired(ODPartWrapper *somSelf, Environment *ev,
  1056.         ODTypeToken focus,
  1057.         ODFrame* ownerFrame)
  1058. {
  1059.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1060.  
  1061.     SOM_TRY
  1062.  
  1063.     _fPart->FocusAcquired(ev,focus,ownerFrame);
  1064.  
  1065.     SOM_CATCH_ALL
  1066.     SOM_ENDTRY
  1067. }
  1068.  
  1069. SOM_Scope void  SOMLINK ODPartWrapperFocusLost(ODPartWrapper *somSelf, Environment *ev,
  1070.         ODTypeToken focus,
  1071.         ODFrame* ownerFrame)
  1072. {
  1073.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1074.  
  1075.     SOM_TRY
  1076.  
  1077.     _fPart->FocusLost(ev,focus,ownerFrame);
  1078.  
  1079.     SOM_CATCH_ALL
  1080.     SOM_ENDTRY
  1081. }
  1082.  
  1083. SOM_Scope void  SOMLINK ODPartWrapperInitObject(ODPartWrapper *somSelf, Environment *ev)
  1084. {
  1085.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1086.  
  1087.     SOM_TRY
  1088.  
  1089.     _fPart->InitObject(ev);
  1090.  
  1091.     SOM_CATCH_ALL
  1092.     SOM_ENDTRY
  1093. }
  1094.  
  1095.  
  1096. SOM_Scope ODBoolean  SOMLINK ODPartWrapperHasExtension(ODPartWrapper *somSelf, Environment *ev,
  1097.         ODType extensionName)
  1098. {
  1099.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1100.     ODBoolean    hasExt = kODFalse;
  1101.     
  1102.     SOM_TRY
  1103.  
  1104.     hasExt = _fPart->HasExtension(ev,extensionName);
  1105.  
  1106.     SOM_CATCH_ALL
  1107.     SOM_ENDTRY
  1108.  
  1109.     return hasExt;
  1110. }
  1111.  
  1112. SOM_Scope ODExtension*  SOMLINK ODPartWrapperAcquireExtension(ODPartWrapper *somSelf, Environment *ev,
  1113.         ODType extensionName)
  1114. {
  1115.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1116.     ODExtension*    extName = kODNULL;
  1117.     
  1118.     SOM_TRY
  1119.  
  1120.     extName = _fPart->AcquireExtension(ev,extensionName);
  1121.  
  1122.     SOM_CATCH_ALL
  1123.     SOM_ENDTRY
  1124.  
  1125.     return extName;
  1126. }
  1127.  
  1128. SOM_Scope void  SOMLINK ODPartWrapperReleaseExtension(ODPartWrapper *somSelf, Environment *ev,
  1129.         ODExtension* extension)
  1130. {
  1131.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1132.  
  1133.     SOM_TRY
  1134.  
  1135.     _fPart->ReleaseExtension(ev,extension);
  1136.  
  1137.     SOM_CATCH_ALL
  1138.     SOM_ENDTRY
  1139. }
  1140.  
  1141. SOM_Scope ODSize  SOMLINK ODPartWrapperPurge(ODPartWrapper *somSelf, Environment *ev,
  1142.         ODSize size)
  1143. {
  1144.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1145.  
  1146.     ODSize    purgeSize = 0; ODVolatile( purgeSize );
  1147.     
  1148.     SOM_TRY
  1149.  
  1150.         purgeSize = _fPart->Purge(ev,size);
  1151.  
  1152.         purgeSize += parent_Purge(somSelf,ev,size);
  1153.     SOM_CATCH_ALL
  1154.         WARN("Error %ld trying to purge in ODPartWrapperPurge",ErrorCode());
  1155.         SetErrorCode(kODNoError);        // Eat the exception; Purge should not 
  1156.                                         // propagate it because clients function
  1157.                                         // fine whether memory was purged or not.
  1158.     SOM_ENDTRY
  1159.  
  1160.     return purgeSize;
  1161. }
  1162.  
  1163. SOM_Scope ODBoolean  SOMLINK ODPartWrapperIsEqualTo(ODPartWrapper *somSelf, Environment *ev,
  1164.         ODObject* object)
  1165. {
  1166.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1167.     ODBoolean    isEqualTo = kODFalse;
  1168.     
  1169.     SOM_TRY
  1170.  
  1171.     isEqualTo = _fPart->IsEqualTo(ev,object);
  1172.  
  1173.     SOM_CATCH_ALL
  1174.     SOM_ENDTRY
  1175.  
  1176.     return isEqualTo;
  1177. }
  1178.  
  1179. SOM_Scope void  SOMLINK ODPartWrapperSubClassResponsibility(ODPartWrapper *somSelf, Environment *ev)
  1180. {
  1181.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1182.  
  1183.  
  1184.     //_fPart->SubClassResponsibility(ev);
  1185.  
  1186.     WARN("A subclass should have overridden this method!");
  1187.     ODSetSOMException(ev,kODErrSubClassResponsibility, "SubClass Responsibility");
  1188. }
  1189.  
  1190. SOM_Scope void  SOMLINK ODPartWrapperInitRefCntObject(ODPartWrapper *somSelf, Environment *ev)
  1191. {
  1192.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1193.  
  1194.     SOM_TRY
  1195.  
  1196.     _fPart->InitRefCntObject(ev);
  1197.  
  1198.     SOM_CATCH_ALL
  1199.     SOM_ENDTRY
  1200. }
  1201.  
  1202. SOM_Scope void  SOMLINK ODPartWrapperAcquire(ODPartWrapper *somSelf, Environment *ev)
  1203. {
  1204.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1205.  
  1206.     SOM_TRY
  1207.  
  1208.     _fPart->Acquire(ev);
  1209.  
  1210.     SOM_CATCH_ALL
  1211.     SOM_ENDTRY
  1212. }
  1213.  
  1214. SOM_Scope void  SOMLINK ODPartWrapperRelease(ODPartWrapper *somSelf, Environment *ev)
  1215. {
  1216.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1217.  
  1218.     SOM_TRY
  1219.  
  1220.     if( _fPart ) {
  1221.         _fPart->Release(ev);
  1222.         if ( _fPart->GetRefCount(ev) == 0 ) {
  1223.             _fPart->GetStorageUnit(ev)->GetDraft(ev)->ReleasePart(ev, somSelf);
  1224.         }
  1225.     }
  1226.     
  1227.     SOM_CATCH_ALL
  1228.     SOM_ENDTRY
  1229. }
  1230.  
  1231. SOM_Scope ODULong  SOMLINK ODPartWrapperGetRefCount(ODPartWrapper *somSelf, Environment *ev)
  1232. {
  1233.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1234.     ODULong    refCount = 0;
  1235.     
  1236.     SOM_TRY
  1237.  
  1238.     refCount = _fPart->GetRefCount(ev);
  1239.  
  1240.     SOM_CATCH_ALL
  1241.     SOM_ENDTRY
  1242.  
  1243.     return refCount;
  1244. }
  1245.  
  1246. SOM_Scope void  SOMLINK ODPartWrapperInitPersistentObject(ODPartWrapper *somSelf, Environment *ev,
  1247.         ODStorageUnit* storageUnit)
  1248. {
  1249.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1250.  
  1251.     SOM_TRY
  1252.  
  1253.     _fPart->InitPersistentObject(ev,storageUnit);
  1254.  
  1255.     SOM_CATCH_ALL
  1256.     SOM_ENDTRY
  1257. }
  1258.  
  1259. SOM_Scope void  SOMLINK ODPartWrapperInitPersistentObjectFromStorage(ODPartWrapper *somSelf, Environment *ev,
  1260.         ODStorageUnit* storageUnit)
  1261. {
  1262.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1263.  
  1264.     SOM_TRY
  1265.  
  1266.      _fPart->InitPersistentObjectFromStorage(ev,storageUnit);
  1267.  
  1268.     SOM_CATCH_ALL
  1269.     SOM_ENDTRY
  1270. }
  1271.  
  1272. SOM_Scope void  SOMLINK ODPartWrapperReleaseAll(ODPartWrapper *somSelf, Environment *ev)
  1273. {
  1274.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1275.  
  1276.     SOM_TRY
  1277.     
  1278.     _fPart->ReleaseAll(ev);
  1279.  
  1280.     SOM_CATCH_ALL
  1281.     SOM_ENDTRY
  1282. }
  1283.  
  1284. SOM_Scope void  SOMLINK ODPartWrapperExternalize(ODPartWrapper *somSelf, Environment *ev)
  1285. {
  1286.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1287.  
  1288.     SOM_TRY
  1289.  
  1290.     _fPart->Externalize(ev);
  1291.     
  1292.     SOM_CATCH_ALL
  1293.     SOM_ENDTRY
  1294. }
  1295.  
  1296. SOM_Scope ODStorageUnit*  SOMLINK ODPartWrapperGetStorageUnit(ODPartWrapper *somSelf, Environment *ev)
  1297. {
  1298.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1299.  
  1300.     SOM_TRY
  1301.  
  1302.     return (_fPart->GetStorageUnit(ev));
  1303.  
  1304.     SOM_CATCH_ALL
  1305.     SOM_ENDTRY
  1306.     return kODNULL;
  1307. }
  1308.  
  1309. SOM_Scope ODID  SOMLINK ODPartWrapperGetID(ODPartWrapper *somSelf, Environment *ev)
  1310. {
  1311.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1312.  
  1313.     SOM_TRY
  1314.  
  1315.     return (_fPart->GetID(ev));
  1316.  
  1317.     SOM_CATCH_ALL
  1318.     SOM_ENDTRY
  1319.     return 0;
  1320. }
  1321.  
  1322. SOM_Scope void  SOMLINK ODPartWrapperCloneInto(ODPartWrapper *somSelf, Environment *ev,
  1323.         ODDraftKey key,
  1324.         ODStorageUnit* storageUnit,
  1325.         ODFrame* initiatingFrame)
  1326. {
  1327.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1328.  
  1329.     SOM_TRY
  1330.  
  1331.     _fPart->CloneInto(ev,key,storageUnit,initiatingFrame);
  1332.  
  1333.     SOM_CATCH_ALL
  1334.     SOM_ENDTRY
  1335. }
  1336.  
  1337. SOM_Scope void  SOMLINK ODPartWrapperExternalizeKinds(ODPartWrapper *somSelf, Environment *ev,
  1338.         ODTypeList* kindset)
  1339. {
  1340.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1341.  
  1342.     SOM_TRY
  1343.  
  1344.     _fPart->ExternalizeKinds(ev,kindset);
  1345.  
  1346.     SOM_CATCH_ALL
  1347.     SOM_ENDTRY
  1348. }
  1349.  
  1350. SOM_Scope void  SOMLINK ODPartWrapperChangeKind(ODPartWrapper *somSelf, Environment *ev,
  1351.         ODType kind)
  1352. {
  1353.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1354.  
  1355.     SOM_TRY
  1356.  
  1357.     _fPart->ChangeKind(ev,kind);
  1358.  
  1359.     SOM_CATCH_ALL
  1360.     SOM_ENDTRY
  1361. }
  1362.  
  1363. SOM_Scope ODBoolean  SOMLINK ODPartWrapperIsRealPart(ODPartWrapper *somSelf, Environment *ev)
  1364. {
  1365.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1366.  
  1367.     return kODFalse;
  1368. }
  1369.  
  1370. SOM_Scope ODPart*  SOMLINK ODPartWrapperGetRealPart(ODPartWrapper *somSelf, Environment *ev)
  1371. {
  1372.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1373.     ODPart*    realPart = kODNULL;
  1374.     
  1375.     SOM_TRY
  1376.  
  1377.     if ( _fPartInUse )
  1378.         THROW(kODErrPartInUse);
  1379.     else
  1380.     {
  1381.         _fPartInUse = kODTrue;
  1382.         realPart = _fPart;
  1383.     }
  1384.  
  1385.     SOM_CATCH_ALL
  1386.     SOM_ENDTRY
  1387.  
  1388.     return realPart;
  1389. }
  1390.  
  1391. SOM_Scope void  SOMLINK ODPartWrapperReleaseRealPart(ODPartWrapper *somSelf, Environment *ev)
  1392. {
  1393.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1394.  
  1395.     SOM_TRY
  1396.  
  1397.     _fPartInUse = kODFalse;
  1398.  
  1399.     SOM_CATCH_ALL
  1400.     SOM_ENDTRY
  1401. }
  1402.  
  1403. SOM_Scope ODBoolean  SOMLINK ODPartWrapperHandleEvent(ODPartWrapper *somSelf, Environment *ev,
  1404.         ODEventData* event,
  1405.         ODFrame* frame,
  1406.         ODFacet* facet,
  1407.         ODEventInfo* eventInfo)
  1408. {
  1409.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1410.     ODBoolean    eventHandled = kODFalse;
  1411.     
  1412.     SOM_TRY
  1413.  
  1414.     eventHandled = _fPart->HandleEvent(ev,event,frame,facet, eventInfo);
  1415.  
  1416.     SOM_CATCH_ALL
  1417.     SOM_ENDTRY
  1418.  
  1419.     return eventHandled;
  1420. }
  1421.  
  1422. SOM_Scope void  SOMLINK ODPartWrapperAdjustMenus(ODPartWrapper *somSelf, Environment *ev,
  1423.         ODFrame* frame)
  1424. {
  1425.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1426.  
  1427.     SOM_TRY
  1428.  
  1429.     _fPart->AdjustMenus(ev,frame);
  1430.  
  1431.     SOM_CATCH_ALL
  1432.     SOM_ENDTRY
  1433. }
  1434.  
  1435. SOM_Scope void  SOMLINK ODPartWrapperUndoAction(ODPartWrapper *somSelf, Environment *ev,
  1436.         ODActionData* actionState)
  1437. {
  1438.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1439.  
  1440.     SOM_TRY
  1441.  
  1442.     _fPart->UndoAction(ev,actionState);
  1443.  
  1444.     SOM_CATCH_ALL
  1445.     SOM_ENDTRY
  1446. }
  1447.  
  1448. SOM_Scope void  SOMLINK ODPartWrapperRedoAction(ODPartWrapper *somSelf, Environment *ev,
  1449.         ODActionData* actionState)
  1450. {
  1451.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1452.  
  1453.     SOM_TRY
  1454.  
  1455.     _fPart->RedoAction(ev,actionState);
  1456.  
  1457.     SOM_CATCH_ALL
  1458.     SOM_ENDTRY
  1459. }
  1460.  
  1461. SOM_Scope void  SOMLINK ODPartWrapperDisposeActionState(ODPartWrapper *somSelf, Environment *ev,
  1462.         ODActionData* actionState,
  1463.         ODDoneState doneState)
  1464. {
  1465.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1466.  
  1467.     SOM_TRY
  1468.  
  1469.     _fPart->DisposeActionState(ev,actionState,doneState);
  1470.  
  1471.     SOM_CATCH_ALL
  1472.     SOM_ENDTRY
  1473. }
  1474.  
  1475. SOM_Scope void  SOMLINK ODPartWrapperWriteActionState(ODPartWrapper *somSelf, Environment *ev,
  1476.         ODActionData* actionState,
  1477.         ODStorageUnitView* storageUnitView)
  1478. {
  1479.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1480.  
  1481.     SOM_TRY
  1482.  
  1483.     _fPart->WriteActionState(ev,actionState,storageUnitView);
  1484.  
  1485.     SOM_CATCH_ALL
  1486.     SOM_ENDTRY
  1487. }
  1488.  
  1489. SOM_Scope ODActionData  SOMLINK ODPartWrapperReadActionState(ODPartWrapper *somSelf, Environment *ev,
  1490.         ODStorageUnitView* storageUnitView)
  1491. {
  1492.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1493.  
  1494.     ODActionData data;
  1495.     data._maximum = 0;
  1496.     data._length = 0;
  1497.     data._buffer = kODNULL;
  1498.  
  1499.     SOM_TRY
  1500.  
  1501.     data = _fPart->ReadActionState(ev,storageUnitView);
  1502.  
  1503.     SOM_CATCH_ALL
  1504.     SOM_ENDTRY
  1505.  
  1506.     return data;
  1507. }
  1508.  
  1509. SOM_Scope void  SOMLINK ODPartWrapperInitPart(ODPartWrapper *somSelf, Environment *ev,
  1510.         ODStorageUnit* storageUnit, ODPart* partWrapper)
  1511. {
  1512.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1513.  
  1514.     SOM_TRY
  1515.  
  1516.     _fPart->InitPart(ev,storageUnit, somSelf);
  1517.  
  1518.     SOM_CATCH_ALL
  1519.     SOM_ENDTRY
  1520. }
  1521.  
  1522. SOM_Scope void  SOMLINK ODPartWrapperInitPartFromStorage(ODPartWrapper *somSelf, Environment *ev,
  1523.         ODStorageUnit* storageUnit, ODPart* partWrapper)
  1524. {
  1525.     ODPartWrapperData *somThis = ODPartWrapperGetData(somSelf);
  1526.  
  1527.     SOM_TRY
  1528.  
  1529.     _fPart->InitPartFromStorage(ev,storageUnit, somSelf);
  1530.  
  1531.     SOM_CATCH_ALL
  1532.     SOM_ENDTRY
  1533. }
  1534.