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

  1. // ====================================================================
  2. //  Class:  GUI.GUIEditBox
  3. //
  4. //    GUIEditBox - The basic text edit control.  I've merged Normal
  5. //  edit, restricted edit, numeric edit and password edit in to 1 control.
  6. //
  7. //  Written by Joe Wilcox
  8. //  (c) 2002, Epic Games, Inc.  All Rights Reserved
  9. // ====================================================================
  10.  
  11. class GUIEditBox extends GUIButton
  12.         Native;
  13.  
  14. #exec OBJ LOAD FILE=GUIContent.utx
  15.  
  16. cpptext
  17. {
  18.         void Draw(UCanvas* Canvas);
  19. }
  20.  
  21. var(Menu)        string        TextStr;            // Holds the current string
  22. var(Menu)        string        AllowedCharSet;        // Only Allow these characters
  23. var(Menu)        bool        bMaskText;            // Displays the text as a *
  24. var(Menu)        bool        bIntOnly;            // Only Allow Interger Numeric entry
  25. var(Menu)        bool        bFloatOnly;            // Only Allow Float Numeric entry
  26. var(Menu)        bool        bIncludeSign;        // Do we need to allow a -/+ sign
  27. var(Menu)        bool        bConvertSpaces;        // Do we want to convert Spaces to "_"
  28. var(Menu)        int            MaxWidth;            // Holds the maximum width (in chars) of the string - 0 = No Max
  29. var(Menu)        eTextCase    TextCase;            // Controls forcing case, etc
  30. var(Menu)        int            BorderOffsets[4];    // How far in from the edit is the edit area
  31. var(Menu)        bool        bReadOnly;            // Can't actually edit this box
  32. var int     CaretPos;        // Where is the cursor within the string
  33. var    int        FirstVis;        // Position of the first visible character;
  34. var int     LastSizeX;        // Used to detect resolution changes
  35. var int        LastCaret,LastLength;    // Used to make things quick
  36.  
  37. var bool    bAllSelected;
  38. var byte    LastKey;
  39. var float    DelayTime;
  40.  
  41. function InitComponent(GUIController MyController, GUIComponent MyOwner)
  42. {
  43.     Super.InitComponent(MyController, MyOwner);
  44.  
  45.     OnKeyType = InternalOnKeyType;
  46.     OnKeyEvent = InternalOnKeyEvent;
  47.  
  48.     if ( (bIntOnly) || (bFloatOnly) )
  49.     {
  50.         AllowedCharSet = "0123456789";
  51.         if (bFloatOnly)
  52.             AllowedCharSet=AllowedCharSet$".";
  53.  
  54.     }
  55.  
  56.     bAllSelected=true;
  57. }
  58.  
  59. event SetText(string NewText)
  60. {
  61.     TextStr = NewText;
  62.     CaretPos=len(TextStr);
  63.     OnChange(self);
  64.  
  65.     bAllSelected=true;
  66. }
  67.  
  68. function DeleteChar()
  69. {
  70.     if (CaretPos==len(TextStr))
  71.         return;
  72.     else if (CaretPos==Len(TextStr)-1)
  73.     {
  74.         TextStr = left(TextStr,CaretPos);
  75.         CaretPos=len(TextStr);
  76.     }
  77.     else
  78.         TextStr = left(TextStr,CaretPos)$Mid(TextStr,CaretPos+1);
  79.  
  80.     OnChange(Self);
  81.  
  82. }
  83.  
  84. function bool InternalOnKeyType(out byte Key, optional string Unicode)
  85. {
  86.     local string temp,st;
  87.  
  88.     if (bReadOnly)
  89.         return false;
  90.  
  91.     if (UniCode!="")
  92.         st = Unicode;
  93.     else
  94.         st = chr(Key);
  95.  
  96.     // Handle cut/paste/copy keys
  97.     if (key<32)
  98.     {
  99.         if (!Controller.CtrlPressed)
  100.             return true;  // old code captured any keys under 32
  101.  
  102.         switch (key)
  103.         {
  104.         case 3:   // ctrl-c, copy to console
  105.             PlayerOwner().CopyToClipboard(TextStr);
  106.             bAllSelected=true;
  107.             break;
  108.         case 22: // ctrl-v, paste at position
  109.             if ( (TextStr=="") || ( CaretPos==len(TextStr) ) )    // At the end of the string, just add
  110.             {
  111.                 if (bAllSelected)
  112.                     TextStr="";
  113.                 TextStr = ConvertIllegal(TextStr$PlayerOwner().PasteFromClipboard());
  114.                 CaretPos=len(TextStr);
  115.             }
  116.             else
  117.             {
  118.                 // We are somewhere inside the string, insert.
  119.                 temp    = ConvertIllegal(left(TextStr,CaretPos)$PlayerOwner().PasteFromClipboard()$Mid(TextStr,CaretPos));
  120.                 TextStr = temp;
  121.             }
  122.             break;
  123.         case 24:  // ctrl-x, clear and copy
  124.             PlayerOwner().CopyToClipboard(TextStr);
  125.             TextStr="";
  126.             CaretPos=0;
  127.         }
  128.         OnChange(Self);
  129.         return true;
  130.     }
  131.  
  132.     if(bAllSelected)
  133.     {
  134.         TextStr="";
  135.         CaretPos=0;
  136.         bAllSelected=false;
  137.         OnChange(Self);
  138.     }
  139.  
  140.     if ( (AllowedCharSet=="") || ( (bIncludeSign) && ( (st=="-") || (st=="+") ) && (TextStr=="") ) || (InStr(AllowedCharSet,St)>=0) )
  141.     {
  142.  
  143.         if ( (MaxWidth==0) || (Len(TextStr)<MaxWidth) )
  144.         {
  145.             if ( (bConvertSpaces) && ((st==" ") || (st=="?") || (st=="\\")) )
  146.                 st = "_";
  147.  
  148.             if ( (TextStr=="") || ( CaretPos==len(TextStr) ) )    // At the end of the string, just add
  149.             {
  150.                 TextStr = TextStr$st;
  151.                 CaretPos=len(TextStr);
  152.             }
  153.             else
  154.             {
  155.                 // We are somewhere inside the string, insert it.
  156.  
  157.                 temp    = left(TextStr,CaretPos)$st$Mid(TextStr,CaretPos);
  158.                 TextStr = temp;
  159.                 CaretPos++;
  160.             }
  161.  
  162.             OnChange(Self);
  163.         }
  164.     }
  165.  
  166.     return false;
  167. }
  168.  
  169. function bool InternalOnKeyEvent(out byte Key, out byte State, float delta)
  170. {
  171.     if (bReadOnly)
  172.         return false;
  173.  
  174.     if( (Key==8) && (State==1) ) // Process Backspace
  175.     {
  176.         if (CaretPos>0)
  177.         {
  178.             CaretPos--;
  179.             DeleteChar();
  180.         }
  181.  
  182.         return true;
  183.     }
  184.  
  185.     if ( (Key==0x2E) && (State==1) ) // Delete key
  186.     {
  187.         if(bAllSelected)
  188.         {
  189.             TextStr="";
  190.             CaretPos = 0;
  191.             bAllSelected=false;
  192.             OnChange(Self);
  193.         }
  194.         else
  195.             DeleteChar();
  196.  
  197.         return true;
  198.     }
  199.  
  200.     //if ( (Key==0x64 || Key==0x25) && (State==1) )    // Left Arrow
  201.     if ( (Key==0x25) && (State==1) )    // Left Arrow
  202.     {
  203.         if(bAllSelected)
  204.         {
  205.             CaretPos = 0;
  206.             bAllSelected=false;
  207.         }
  208.         else if (CaretPos>0)
  209.             CaretPos--;
  210.  
  211.         return true;
  212.     }
  213.  
  214.     //if ( (Key==0x66 || Key==0x27) && (State==1) ) // Right Arrow
  215.     if ( (Key==0x27) && (State==1) ) // Right Arrow
  216.     {
  217.         if(bAllSelected)
  218.         {
  219.             CaretPos = len(TextStr);
  220.             bAllSelected=false;
  221.         }
  222.         else if ( CaretPos<Len(TextStr) )
  223.             CaretPos++;
  224.  
  225.         return true;
  226.     }
  227.  
  228.     //if ( (Key==0x24 || Key==0x67) && (State==1) ) // Home
  229.     if ( (Key==0x24) && (State==1) ) // Home
  230.     {
  231.         CaretPos=0;
  232.         bAllSelected=false;
  233.         return true;
  234.     }
  235.  
  236.     //if ( (Key==0x23 || Key==0x61) && (State==1) ) // End
  237.     if ( (Key==0x23) && (State==1) ) // End
  238.     {
  239.         CaretPos=len(TextStr);
  240.         bAllSelected=false;
  241.         return true;
  242.     }
  243.  
  244.     return false;
  245. }
  246.  
  247. // converts space-characters and chars not in the allowed char array
  248. // ensure string stays within max bounds
  249. function string ConvertIllegal(string inputstr)
  250. {
  251.     local int i, max;
  252.     local string retval;
  253.     local string c;
  254.  
  255.     i = 0;
  256.     max = Len(inputstr);
  257.     while ( i < max )
  258.     {
  259.         c = Mid(inputstr,i,1);
  260.         if ( AllowedCharSet != "" && InStr(AllowedCharSet,c) < 0 )
  261.         {
  262.             c = "";
  263.         }
  264.         if ( bConvertSpaces &&
  265.             ((c == " ") || (c =="?") || (c=="\\") ))
  266.         {
  267.             c = "_";
  268.         }
  269.         retval = retval $ c;
  270.         i++;
  271.     }
  272.  
  273.     if (MaxWidth > 0)
  274.         return Left(retval,MaxWidth);
  275.     else
  276.         return retval;
  277. }
  278.  
  279. function string LoadINI()
  280. {
  281.     local string s;
  282.  
  283.     s = Super.LoadINI();
  284.  
  285.     if (S!="")
  286.         SetText(s);
  287.  
  288.     return s;
  289. }
  290.  
  291. function SaveINI(string Value)
  292. {
  293.     Super.SaveINI(TextStr);
  294. }
  295.  
  296. function string GetText()
  297. {
  298.     return TextStr;
  299. }
  300.  
  301.  
  302. defaultproperties
  303. {
  304.     StyleName="SquareButton"
  305.     MaxWidth=0
  306.     TextCase=TXTC_None
  307.     LastCaret=-1
  308.     LastLength=-1
  309.     WinHeight=0.06
  310.     bCaptureMouse=False
  311.     OnClickSound=CS_Edit
  312. }