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 / Storage / DgItmIt.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-08-28  |  3.5 KB  |  111 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        DgItmIt.cpp
  3.  
  4.     Contains:    Implementation of ODDragItemIterator
  5.  
  6.     Owned by:    Vincent Lo
  7.  
  8.     Copyright:    © 1994 - 1996 by Apple Computer, Inc., all rights reserved.
  9.  
  10.     Change History (most recent first):
  11.  
  12.          <3>     7/11/96    DH        1365986    1.1GM: Crash when drag fails and
  13.                                     another drag is attempted. Fixed many stale
  14.                                     object references.
  15.          <2>     5/13/96    DH        1305572 - 1.1MRD:[Cyberdog]Dragging
  16.                                     multiple items *really* slow.
  17.                                     1314704 - 1.0.x: Enourmous performance hit
  18.                                     when dragging numb erous items over
  19.                                     windows.
  20.                                     Now uses API for getting storage unit of
  21.                                     Drag Items so that processing of those
  22.                                     items happens during that method call.
  23.          <5>      8/3/95    RR        #1257260: Collapse B classes. Remove
  24.                                     somInit methods. Don't call IsInitialized
  25.                                     or SubclassResponsibility
  26.          <4>     5/26/95    VL        1251403: Multithreading naming support.
  27.          <3>     5/25/95    jpa        List.h --> LinkList.h [1253324]
  28.          <2>     7/21/94    VL        Added implementation.
  29.  
  30.     To Do:
  31. */
  32.  
  33. #define ODDragItemIterator_Class_Source
  34. #define VARIABLE_MACROS
  35. #include <DgItmIt.xih>
  36.  
  37. #ifndef _DRAGPRIV_
  38. #include <DragPriv.h>
  39. #endif
  40.  
  41. #ifndef _LINKLIST_
  42. #include <LinkList.h>
  43. #endif
  44.  
  45. #include "DgItmItB.cpp"    // Platform-independent methods, if any
  46.  
  47. SOM_Scope void  SOMLINK ODDragItemIteratorInitDragItemIterator(ODDragItemIterator *somSelf, Environment *ev,
  48.         LinkedListIterator* dragItemListIter)
  49. {
  50.     ODDragItemIteratorData *somThis = ODDragItemIteratorGetData(somSelf);
  51.     ODDragItemIteratorMethodDebug("ODDragItemIterator","ODDragItemIteratorInitDragItemIterator");
  52.  
  53.     _fDragItemListIter = dragItemListIter;
  54. }
  55.  
  56. SOM_Scope void  SOMLINK ODDragItemIteratorsomUninit(ODDragItemIterator *somSelf)
  57. {
  58.     ODDragItemIteratorData *somThis = ODDragItemIteratorGetData(somSelf);
  59.     ODDragItemIteratorMethodDebug("ODDragItemIterator","ODDragItemIteratorsomUninit");
  60.  
  61.     if( _fDragItemListIter != kODNULL )
  62.     {
  63.         delete _fDragItemListIter;
  64.         _fDragItemListIter = kODNULL;
  65.     }
  66.     
  67.     ODDragItemIterator_parent_ODObject_somUninit(somSelf);
  68. }
  69.  
  70. SOM_Scope ODStorageUnit*  SOMLINK ODDragItemIteratorFirst(ODDragItemIterator *somSelf, Environment *ev)
  71. {
  72.     ODDragItemIteratorData *somThis = ODDragItemIteratorGetData(somSelf);
  73.     ODDragItemIteratorMethodDebug("ODDragItemIterator","ODDragItemIteratorFirst");
  74.  
  75.     ODDragLink*    theLink = kODNULL; ODVolatile( theLink );
  76.     ODStorageUnit* returnSU = kODNULL; ODVolatile( returnSU );
  77.  
  78.     SOM_TRY
  79.         ODDragLink*    theLink = (ODDragLink*) _fDragItemListIter->First();
  80.         returnSU = (theLink ? (ODStorageUnit*) theLink->fItem->GetStorageUnit(ev) : (ODStorageUnit*) kODNULL);
  81.     SOM_CATCH_ALL
  82.     SOM_ENDTRY
  83.  
  84.     return returnSU;
  85. }
  86.  
  87. SOM_Scope ODStorageUnit*  SOMLINK ODDragItemIteratorNext(ODDragItemIterator *somSelf, Environment *ev)
  88. {
  89.     ODDragItemIteratorData *somThis = ODDragItemIteratorGetData(somSelf);
  90.     ODDragItemIteratorMethodDebug("ODDragItemIterator","ODDragItemIteratorNext");
  91.  
  92.     ODDragLink*    theLink = kODNULL; ODVolatile( theLink );
  93.     ODStorageUnit* returnSU = kODNULL; ODVolatile( returnSU );
  94.  
  95.     SOM_TRY
  96.         ODDragLink *theLink = (ODDragLink*)_fDragItemListIter->Next();
  97.         returnSU = (theLink ? (ODStorageUnit*) theLink->fItem->GetStorageUnit(ev) : (ODStorageUnit*) kODNULL);
  98.     SOM_CATCH_ALL
  99.     SOM_ENDTRY
  100.  
  101.     return returnSU;
  102. }
  103.  
  104. SOM_Scope ODBoolean  SOMLINK ODDragItemIteratorIsNotComplete(ODDragItemIterator *somSelf, Environment *ev)
  105. {
  106.     ODDragItemIteratorData *somThis = ODDragItemIteratorGetData(somSelf);
  107.     ODDragItemIteratorMethodDebug("ODDragItemIterator","ODDragItemIteratorIsNotComplete");
  108.  
  109.     return (_fDragItemListIter->IsNotComplete());
  110. }
  111.