home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Linux / Divers / freedraft.tar.gz / freedraft.tar / FREEdraft-050298 / CORE / canvasregister.cpp < prev    next >
C/C++ Source or Header  |  1998-04-23  |  6KB  |  171 lines

  1. //canvasregister.cpp
  2.  
  3. // Copyright (C) 1997,1998  Cliff Johnson                                       //
  4. //                                                                         //
  5. // This program is free software; you can redistribute it and/or           //
  6. // modify it under the terms of the GNU  General Public                    //
  7. // License as published by the Free Software Foundation; either            //
  8. // version 2 of the License, or (at your option) any later version.        //
  9. //                                                                         //
  10. // This software is distributed in the hope that it will be useful,        //
  11. // but WITHOUT ANY WARRANTY; without even the implied warranty of          //
  12. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU       //
  13. // General Public License for more details.                                //
  14. //                                                                         //
  15. // You should have received a copy of the GNU General Public License       //
  16. // along with this software (see COPYING.LIB); if not, write to the        //
  17. // Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. //
  18.  
  19. #include <algo.h>
  20. #include <iostream.h>
  21.  
  22. #include <canvasregister.h>    
  23.  
  24. #include <attributes.h>       //ITO   
  25. #include <handle.h>           //ITO
  26.  
  27. #include <coreexception.h>
  28.  
  29. //-------------------------CanvasRegister::Register---------------------
  30.  
  31. void CanvasRegister::Register(    const Handle& h, 
  32.                 const Attributes& a,
  33.                 const DrawableGeom* d,
  34.                 bool v,
  35.                 bool hl)
  36. {            
  37. // if the entity is not in the list, add it...
  38.  
  39.     list<RegisteredEntity>::iterator i=
  40.         find(entityRegister.begin(),entityRegister.end(),h);
  41.     if(i==entityRegister.end()){
  42.         entityRegister.push_back(RegisteredEntity(h,a,d,v));
  43.     }
  44. }
  45.  
  46. //-------------------------CanvasRegister::UnRegister---------------------
  47. void CanvasRegister::UnRegister(const Handle& h)
  48. {
  49. // if the entity is in the list, remove it...
  50.  
  51.     list<RegisteredEntity>::iterator i=
  52.         find(entityRegister.begin(),entityRegister.end(),h);
  53.     if(i!=entityRegister.end())entityRegister.erase(i++);
  54. }
  55.  
  56. //-------------------------CanvasRegister::SetAttributes---------------------
  57. void CanvasRegister::SetAttributes(const Handle& h, const Attributes& a)
  58. {
  59. // if the entity is in the list, replace it...
  60.  
  61.     list<RegisteredEntity>::iterator i=
  62.         find(entityRegister.begin(),entityRegister.end(),h);
  63.  
  64.     if(i!=entityRegister.end()){
  65.         RegisteredEntity tmpRE = RegisteredEntity(*i);
  66.         entityRegister.erase(i++);
  67.         entityRegister.push_back(RegisteredEntity(h,a,tmpRE.GetDrawable(),
  68.                                         tmpRE.IsVisible()));
  69.     }
  70. }
  71.  
  72. //------------------------CanvasRegister::SetVisible----------------------
  73. void CanvasRegister::SetVisible(const Handle& h, bool v)
  74. {
  75. // if the entity is in the list, replace it...
  76.  
  77.     list<RegisteredEntity>::iterator i=
  78.         find(entityRegister.begin(),entityRegister.end(),h);
  79.  
  80.     if(i!=entityRegister.end()) i->SetVisible(v);
  81. }
  82. //-------------------------CanvasRegister::SetAllVisible---------------------
  83. void CanvasRegister::SetAllVisible(bool v)
  84. {
  85. // go through the list, and turn off all highlighting 
  86.  
  87.     list<RegisteredEntity>::iterator i= entityRegister.begin();
  88.  
  89.     while(i != entityRegister.end())
  90.     {
  91.         i->SetVisible(v);
  92.         i++;
  93.     }
  94. }
  95. //-------------------------CanvasRegister::SwapVisible---------------------
  96. void CanvasRegister::SwapVisible()
  97. {
  98. // go through the list, and reverse all the visible flags
  99.  
  100.     list<RegisteredEntity>::iterator i= entityRegister.begin();
  101.  
  102.     while(i != entityRegister.end())
  103.     {
  104.         if(i->IsVisible())i->SetVisible(false);
  105.         else i->SetVisible(true);
  106.         i++;
  107.     }
  108. }
  109. //-------------------------CanvasRegister::SetHighlight---------------------
  110. void CanvasRegister::SetHighlight(const Handle& h, bool hl)
  111. {
  112. // if the entity is in the list, replace it...
  113.  
  114.     list<RegisteredEntity>::iterator i=
  115.         find(entityRegister.begin(),entityRegister.end(),h);
  116.  
  117.     if(i!=entityRegister.end())i->SetHighlight(hl);
  118. }
  119. //-------------------------CanvasRegister::SetHighlight---------------------
  120. void CanvasRegister::SetAllHighlights(bool hl)
  121. {
  122. // go through the list, and turn off all highlighting 
  123.  
  124.     list<RegisteredEntity>::iterator i= entityRegister.begin();
  125.  
  126.     while(i != entityRegister.end())
  127.     {
  128.         i->SetHighlight(hl);
  129.         i++;
  130.     }
  131. }
  132. //-------------------------CanvasRegister::InitList---------------------
  133. void CanvasRegister::Init()
  134. {
  135.     ix = entityRegister.begin();
  136. }
  137.  
  138. //-------------------------CanvasRegister::NextItem---------------------
  139. bool CanvasRegister::NextItem(RegisteredEntity & re)
  140. {
  141.     if(ix == entityRegister.end())return false;  // no more to read
  142.  
  143.     re = RegisteredEntity(*ix);    // copy
  144.     ix++;                // increment the iterator
  145.     return true;
  146. }
  147. //-------------------------CanvasRegister::GetHandleFromName---------------------
  148. Handle CanvasRegister::GetHandleFromName(unsigned int name) const throw (CoreException)
  149. {
  150.     list<RegisteredEntity>::const_iterator tx = entityRegister.begin();
  151.     while( !(tx == entityRegister.end()))
  152.     {
  153.         Handle hx = tx->GetHandle();
  154.         if ( name == hx ) return Handle(hx);
  155.         tx++;
  156.     }
  157.     throw CoreException("CanvasRegister::GetHandleFromName() : name not in register");
  158. }
  159.  
  160. //-------------------------CanvasRegister::GetAttributes---------------------
  161. Attributes CanvasRegister::GetAttributes(const Handle & h) const throw (CoreException)
  162. {
  163.     list<RegisteredEntity>::const_iterator i=
  164.         find(entityRegister.begin(),entityRegister.end(),h);
  165.  
  166.     if(i == entityRegister.end() ) 
  167.         throw CoreException("CanvasRegister::GetAttributes() : handle not found");
  168.     
  169.     return i->GetAttributes();
  170. }
  171.