home *** CD-ROM | disk | FTP | other *** search
/ The Pier Shareware 6 / The_Pier_Shareware_Number_6_(The_Pier_Exchange)_(1995).iso / 035 / kwclass.zip / KDOBMGR.CPP < prev    next >
C/C++ Source or Header  |  1994-04-18  |  3KB  |  139 lines

  1. #include <iwindow.hpp>
  2. #include <kdobmgr.hpp>
  3. #include "kdobent.hpp"
  4. #include "kwdobmgr.hpp"
  5. #include <kdata.hpp>
  6. #include <imap.h>
  7. #include <istdops.h>
  8. #include <ireslock.hpp>
  9. #include <iexcept.hpp>
  10.  
  11. KDobManager KDobManager::global;
  12.  
  13. /*-------------------------------------------------------------------------
  14.  * member functions for KDobWinMgrMap.
  15.  *-----------------------------------------------------------------------*/
  16. IWindow* const &key(KDobWinMgrPtr const &entry)
  17. {
  18.    return entry->window;
  19. }
  20.  
  21. class KDobWinMgrMap : public IMap<KDobWinMgrPtr,IWindow*>
  22. {
  23.    public:
  24.       KDobWinMgrMap() : IMap<KDobWinMgrPtr,IWindow*>() {}
  25.       ~KDobWinMgrMap() {}
  26. };
  27.  
  28. class KDobWinMgrCursor : public IMap<KDobWinMgrPtr,IWindow*>::Cursor
  29. {
  30.    public:
  31.       KDobWinMgrCursor(KDobWinMgrMap const &map) : IMap<KDobWinMgrPtr,IWindow*>::Cursor(map) {}
  32. };
  33.  
  34. static KDobWinMgrMap mgrWindowMap;
  35.  
  36. /*------------------------------------------------------------------------
  37.  * member functions for KDobMap        
  38.  *----------------------------------------------------------------------*/
  39. IString const &key(KDobEntryPtr const &entry)
  40. {
  41.    return entry->factory->name();
  42. }
  43.  
  44. class KDobMap : public IMap<KDobEntryPtr,IString>
  45. {
  46.    public:
  47.       KDobMap() : IMap<KDobEntryPtr,IString>() {}
  48.       ~KDobMap() {}
  49. };
  50.  
  51. class KDobCursor : public IMap<KDobEntryPtr,IString>::Cursor
  52. {
  53.    public:
  54.       KDobCursor(KDobMap const &map) : IMap<KDobEntryPtr,IString>::Cursor(map) {}
  55. };
  56.  
  57.  
  58. /*------------------------------------------------------------------------
  59.  * member functions for KDobManager
  60.  *----------------------------------------------------------------------*/
  61. KDobManager::KDobManager(IWindow *window, IWindow *caller)
  62.    : map(*new KDobMap)
  63.    , _window(window)
  64.    , _caller(caller)
  65. {
  66. }
  67.  
  68. KDobManager::~KDobManager()
  69. {
  70.    delete ↦
  71. }
  72.  
  73.  
  74. KDobEntry *KDobManager::findEntry(KDataFactory const &factory)
  75. {
  76.    KDobCursor cursor(map);
  77.    KDobEntryPtr element;
  78.  
  79.    if (map.locateElementWithKey(factory.name(), cursor))
  80.       element = map.elementAt(cursor);
  81.    else
  82.    {
  83.       element = new KDobEntry(factory);
  84.       map.add(element);
  85.    }
  86.    return element;
  87.    
  88. }
  89.  
  90.  
  91. IPrivateResource &KDobManager::dataLock(KDataFactory const &factory)
  92. {
  93.    KDobEntry *entry = findEntry(factory);
  94.    return entry->lock;
  95. }
  96.  
  97.  
  98. KData &KDobManager::dataObject(KDataFactory const &factory)
  99. {
  100.    KDobEntry *entry = findEntry(factory);
  101.    IASSERT(entry->data != 0);
  102.    return *entry->data;
  103. }
  104.  
  105. KDobManager &KDobManager::globalManager()
  106. {
  107.    return global;
  108. }
  109.  
  110. KDobManager *KDobManager::managerFor(IWindow *window, IWindow *caller)
  111. {
  112.    KDobWinMgrCursor cursor(mgrWindowMap);
  113.  
  114.    if (mgrWindowMap.locateElementWithKey(window, cursor))
  115.       return mgrWindowMap.elementAt(cursor)->manager;
  116.    else
  117.       return 0;
  118. }
  119.  
  120. KDobManager *KDobManager::associate(IWindow *window, IWindow *caller)
  121. {
  122.    KDobWinMgrPtr element;
  123.    
  124.    if (managerFor(window))
  125.       return(managerFor(window));
  126.  
  127.    element = new KDobWinMgrEntry(window, caller);
  128.    mgrWindowMap.add(element);
  129.    return element->manager;
  130. }
  131.  
  132. void KDobManager::detach(IWindow *window)
  133. {
  134.    KDobManager *manager = managerFor(window);
  135.    delete manager;
  136. }
  137.  
  138.  
  139.