home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / OTL-MC7.DMS / in.adf / classsource.lha / ClassSource / Intuition / Screen / Screen.c
Encoding:
C/C++ Source or Header  |  1995-02-12  |  3.1 KB  |  218 lines

  1. #include <classes/Intuition/Screen.h>
  2.  
  3. #include <classes/exec/lists.h>
  4.  
  5. #pragma -
  6. #include <pragma/intuition_lib.h>
  7. #pragma +
  8.  
  9. ScreenC::ScreenC(Tag tag1Type, ...)
  10.     : inittags((struct TagItem *) &tag1Type)
  11. {
  12.     screen_ob = NULL;
  13. }
  14.  
  15. ScreenC::ScreenC(struct TagItem *tags)
  16.     : inittags(tags)
  17. {
  18.     screen_ob = NULL;
  19. }
  20.  
  21. ScreenC::ScreenC(const ScreenC &s)
  22.     : inittags(s.inittags)
  23. {
  24.     screen_ob = NULL;
  25. }
  26.  
  27. ScreenC::~ScreenC()
  28. {
  29.     close();
  30. }
  31.  
  32. ScreenC &ScreenC::operator= (const ScreenC &s)
  33. {
  34.     if (this != &s)
  35.     {
  36.         close();
  37.         inittags = s.inittags;
  38.         screen_ob = NULL;
  39.     };
  40.     return *this;
  41. }
  42.  
  43. VOID ScreenC::open(struct TagItem *tagList)
  44. {
  45.     if (screen_ob)
  46.         return;
  47.     TagItemC t = inittags;
  48.     t.append(tagList);
  49.     if ((screen_ob = OpenScreenTagList(NULL,t.tags())) == NULL)
  50.         throw ScreenX();
  51. }
  52.  
  53. BOOL ScreenC::close()
  54. {
  55.     if (screen_ob)
  56.     {
  57.         BOOL r = CloseScreen(screen_ob);
  58.         if (r)
  59.             screen_ob = NULL;
  60.         return r;
  61.     };
  62.     return TRUE;
  63. }
  64.  
  65. VOID ScreenC::toFront()
  66. {
  67.     if (screen_ob)
  68.     {
  69.         ScreenToFront(screen_ob);
  70.     };
  71. }
  72.  
  73. VOID ScreenC::toBack()
  74. {
  75.     if (screen_ob)
  76.     {
  77.         ScreenToBack(screen_ob);
  78.     };
  79. }
  80.  
  81. VOID ScreenC::move(WORD dx, WORD dy)
  82. {
  83.     if (screen_ob)
  84.     {
  85.         MoveScreen(screen_ob,dx,dy);
  86.     };
  87. }
  88.  
  89. VOID ScreenC::beep(BOOL all)
  90. {
  91.     if (all)
  92.         DisplayBeep(NULL)
  93.     else if (screen_ob)
  94.         DisplayBeep(screen_ob);
  95. }
  96.  
  97. VOID ScreenC::showTitle(BOOL infront)
  98. {
  99.     if (screen_ob)
  100.     {
  101.         ShowTitle(screen_ob,infront);
  102.     };
  103. }
  104.  
  105. // ************************************************************
  106.  
  107. PublicScreenC::PublicScreenC(STRPTR name)
  108. {
  109.     pubname = name;
  110. }
  111.  
  112. PublicScreenC::~PublicScreenC()
  113. {
  114.     unlock();
  115. }
  116.  
  117. VOID PublicScreenC::open(struct TagItem *tagList)
  118. {
  119.     if (screen_ob)
  120.         return;
  121.     if (!lock(NULL))
  122.         throw ScreenX();
  123. }
  124.  
  125. BOOL PublicScreenC::close()
  126. {
  127.     unlock();
  128.     return TRUE;
  129. }
  130.  
  131. BOOL PublicScreenC::lock(STRPTR name)
  132. {
  133.     if (!screen_ob)
  134.     {
  135.         if (name)
  136.             screen_ob = LockPubScreen(name)
  137.         else
  138.             screen_ob = LockPubScreen(pubname);
  139.         return screen_ob != NULL;
  140.     };
  141.     return FALSE;
  142. }
  143.  
  144. VOID PublicScreenC::unlock()
  145. {
  146.     if (screen_ob)
  147.     {
  148.         UnlockPubScreen(NULL,screen_ob);
  149.         screen_ob = NULL;
  150.     };
  151. }
  152.  
  153. // ************************************************************
  154.  
  155. DrawInfoC::DrawInfoC()
  156. {
  157.     di = NULL;
  158.     screen = NULL;
  159. }
  160.  
  161. DrawInfoC::DrawInfoC(ScreenC &s)
  162. {
  163.     di = NULL;
  164.     screen = NULL;
  165.     if (!getInfo(s))
  166.         throw ScreenDrawInfoX();
  167. }
  168.  
  169. DrawInfoC::~DrawInfoC()
  170. {
  171.     freeInfo();
  172. }
  173.  
  174. struct DrawInfo *DrawInfoC::getInfo(ScreenC &s)
  175. {
  176.     freeInfo();
  177.     if (!s.screen())
  178.         throw ScreenDrawInfoX();
  179.     screen = s.screen();
  180.     di = GetScreenDrawInfo(screen);
  181.     if (!di)
  182.         throw ScreenDrawInfoX();
  183.     return di;
  184. }
  185.  
  186. VOID DrawInfoC::freeInfo()
  187. {
  188.     if (di)
  189.     {
  190.         FreeScreenDrawInfo(screen,di);
  191.         di = NULL;
  192.     };
  193. }
  194.  
  195. // *************************************************************
  196.  
  197. PublicScreenListC::PublicScreenListC()
  198.     : infos(sizeof(PublicScreenInfoC),20)
  199. {
  200. }
  201.  
  202. VOID PublicScreenListC::update()
  203. {
  204.     infos.clear();
  205.     ListC *screenlist = (ListC *) LockPubScreenList();
  206.     if (screenlist)
  207.     {
  208.         PublicScreenInfoC *psi;
  209.         ListCursorC lc(*screenlist);
  210.         while (!lc.isDone()) {
  211.             psi = &(PublicScreenInfoC &) infos.addTail();
  212.             psi->screenname = ((PubScreenNode *) lc.item())->psn_Node.ln_Name;
  213.             lc.next();
  214.         };
  215.     };
  216.     UnlockPubScreenList();
  217. }
  218.