home *** CD-ROM | disk | FTP | other *** search
/ Game Level Design / GLDesign.bin / Software / UnrealEngine2Runtime / UE2Runtime-22262001_Demo.exe / GUI / Classes / GUIList.uc < prev    next >
Text File  |  2003-06-30  |  5KB  |  288 lines

  1. // ====================================================================
  2. //  Class:  GUI.GUIList
  3. //
  4. //  The GUIList is a basic list component.   
  5. //
  6. //  Written by Joe Wilcox
  7. //  (c) 2002, Epic Games, Inc.  All Rights Reserved
  8. // ====================================================================
  9.  
  10. class GUIList extends GUIVertList
  11.         Native;
  12.  
  13. #exec OBJ LOAD FILE=GUIContent.utx
  14.     
  15. cpptext
  16. {
  17.     void DrawItem(UCanvas* Canvas, INT Item, FLOAT X, FLOAT Y, FLOAT W, FLOAT H);
  18. }
  19.  
  20. var        eTextAlign            TextAlign;            // How is text Aligned in the control
  21.  
  22. var        array<GUIListElem>    Elements;
  23.  
  24. native final function SortList();
  25.  
  26. // Used by SortList.
  27. delegate int CompareItem(GUIListElem ElemA, GUIListElem ElemB);
  28.  
  29. // Accessor function for the items.
  30.  
  31. function string SelectedText()
  32. {
  33.     if ( (Index >=0) && (Index <Elements.Length) )
  34.         return Elements[Index].Item;
  35.     else
  36.         return "";
  37. }
  38.  
  39. function Add(string NewItem, optional Object obj, optional string Str)
  40. {
  41.     Elements.Length = Elements.Length+1;
  42.     
  43.     Elements[Elements.Length-1].Item=NewItem;
  44.     Elements[Elements.Length-1].ExtraData=obj;
  45.     Elements[Elements.Length-1].ExtraStrData=Str;
  46.  
  47.     ItemCount=Elements.Length;
  48.     
  49.     if (Elements.Length == 1)
  50.         SetIndex(0);
  51.     else
  52.         OnChange(self);
  53.  
  54.     MyScrollBar.AlignThumb();
  55. }
  56.  
  57. function Replace(int index, string NewItem, optional Object obj, optional string Str)
  58. {
  59.     if ( (Index<0) || (Index>=Elements.Length) )
  60.         Add(NewItem,Obj,Str);
  61.     else
  62.     {
  63.         Elements[Index].Item = NewItem;
  64.         Elements[Index].ExtraData = obj;
  65.         Elements[Index].ExtraStrData = Str;
  66.     }
  67. }        
  68.  
  69. function Insert(int Index, string NewItem, optional Object obj, optional string Str)
  70. {
  71.     if ( (Index<0) || (Index>=Elements.Length) )
  72.         Add(NewItem,Obj,Str);
  73.     else
  74.     {
  75.         Elements.Insert(index,1);
  76.         Elements[Index].Item=NewItem;
  77.         Elements[Index].ExtraData=obj;
  78.         Elements[Index].ExtraStrData=Str;
  79.  
  80.         ItemCount=Elements.Length;    
  81.  
  82.         OnChange(self);
  83.         MyScrollBar.AlignThumb();
  84.     }
  85. }    
  86.  
  87. event Swap(int IndexA, int IndexB)
  88. {
  89.     local GUI.GUIListElem elem;
  90.  
  91.     if ( (IndexA<0) || (IndexA>=Elements.Length) || (IndexB<0) || (IndexB>=Elements.Length) )
  92.         return;
  93.  
  94.     elem = Elements[IndexA];
  95.     Elements[IndexA] = Elements[IndexB];
  96.     Elements[IndexB] = elem;
  97. }
  98.     
  99. function string GetItemAtIndex(int i)
  100. {
  101.     if ((i<0) || (i>Elements.Length))
  102.         return "";
  103.         
  104.     return Elements[i].Item;
  105. }
  106.  
  107. function SetItemAtIndex(int i, string NewItem)
  108. {
  109.     if ((i<0) || (i>Elements.Length))
  110.         return;
  111.         
  112.     Elements[i].Item = NewItem;
  113. }
  114.  
  115. function object GetObjectAtIndex(int i)
  116. {
  117.     if ((i<0) || (i>Elements.Length))
  118.         return None;
  119.         
  120.     return Elements[i].ExtraData;
  121. }
  122.  
  123. function string GetExtraAtIndex(int i)
  124. {
  125.     if ((i<0) || (i>Elements.Length))
  126.         return "";
  127.         
  128.     return Elements[i].ExtraStrData;
  129. }
  130.  
  131. function SetExtraAtIndex(int i, string NewExtra)
  132. {
  133.     if ((i<0) || (i>Elements.Length))
  134.         return;
  135.         
  136.     Elements[i].ExtraStrData = NewExtra;
  137. }
  138.  
  139. function GetAtIndex(int i, out string ItemStr, out object ExtraObj, out string ExtraStr)
  140. {
  141.     if ((i<0) || (i>Elements.Length))
  142.         return;
  143.         
  144.     ItemStr = Elements[i].Item;
  145.     ExtraObj = Elements[i].ExtraData;
  146.     ExtraStr = Elements[i].ExtraStrData;
  147. }  
  148.  
  149. function LoadFrom(GUIList Source, optional bool bClearFirst)
  150. {
  151.     local string t1,t2;
  152.     local object t;
  153.     local int i;
  154.  
  155.     if (bClearfirst)
  156.         Clear();
  157.     
  158.     for (i=0;i<Source.Elements.Length;i++)
  159.     {
  160.         Source.GetAtIndex(i,t1,t,t2);
  161.         Add(t1,t,t2);
  162.     }
  163. }
  164.  
  165. function Remove(int i, optional int Count)
  166. {
  167.     if (Count==0)
  168.         Count=1;
  169.         
  170.     Elements.Remove(i, Count);
  171.  
  172.     ItemCount = Elements.Length;        
  173.         
  174.     SetIndex(-1);
  175.     MyScrollBar.AlignThumb();
  176.  
  177. function RemoveItem(string Item)
  178. {
  179.     local int i;
  180.  
  181.     // Work through array. If we find it, remove it (will reduce Elements.Length).
  182.     // If we don't, move on to next one.
  183.     i=0;
  184.     while(i<Elements.Length)
  185.     {
  186.         if(Item ~= Elements[i].Item)
  187.             Elements.Remove(i, 1);
  188.         else
  189.             i++;
  190.     }
  191.  
  192.     ItemCount = Elements.Length;
  193.  
  194.     SetIndex(-1);
  195.     MyScrollBar.AlignThumb();
  196. }
  197.  
  198. function Clear()
  199. {
  200.     Elements.Remove(0,Elements.Length);
  201.  
  202.     Super.Clear();
  203.     OnChange(self);
  204. }    
  205.  
  206. function string Get()
  207. {
  208.     if ( (Index<0) || (Index>=ItemCount) )
  209.         return "";
  210.     else
  211.         return Elements[Index].Item;
  212. }
  213.  
  214. function object GetObject()
  215. {
  216.     if ( (Index<0) || (Index>=ItemCount) )
  217.         return none;
  218.     else
  219.         return Elements[Index].ExtraData;
  220. }    
  221.  
  222. function string GetExtra()
  223. {
  224.     if ( (Index<0) || (Index>=ItemCount) )
  225.         return "";
  226.     else
  227.         return Elements[Index].ExtraStrData;
  228. }
  229.     
  230. function string find(string Text, optional bool bExact)
  231. {
  232.     local int i;
  233.     for (i=0;i<ItemCount;i++)
  234.     {
  235.         if (bExact)
  236.         {
  237.             if (Text == Elements[i].Item)
  238.             {
  239.                 SetIndex(i);
  240.                 return  Elements[i].Item;
  241.             }
  242.         }
  243.         else
  244.         {
  245.             if (Text ~=  Elements[i].Item)
  246.             {
  247.                 SetIndex(i);
  248.                 return  Elements[i].Item;
  249.             }
  250.         }
  251.     }
  252.     return "";
  253. }
  254.  
  255. // find an element by the 'extra' string
  256. // only sets the index if it finds the string
  257. // returns the string of the found item
  258. function string FindExtra (string ExtraText, optional bool bExact )
  259. {
  260.     local int i;
  261.     for (i=0;i<ItemCount;i++)
  262.     {
  263.         if (bExact)
  264.         {
  265.             if (ExtraText == Elements[i].ExtraStrData)
  266.             {
  267.                 SetIndex(i);
  268.                 return Elements[i].Item;
  269.             }
  270.         }
  271.         else
  272.         {
  273.             if (ExtraText ~=  Elements[i].ExtraStrData)
  274.             {
  275.                 SetIndex(i);
  276.                 return Elements[i].Item;
  277.             }
  278.         }
  279.     }
  280.     return "";
  281. }
  282.  
  283. defaultproperties
  284. {
  285.     TextAlign=TXTA_Center
  286. }
  287.