Core.Object | +--UWindow.UWindowBase | +--UWindow.UWindowWindow | +--UWindow.UWindowDialogControl | +--UWindow.UWindowDynamicTextArea | +--UWindow.UWindowURLTextArea
bool
bReleased
void
BeforePaint(Canvas C, float X, float Y)
Click(float X, float Y)
LaunchUnrealURL(string URL)
Paint(Canvas C, float X, float Y)
ProcessText(Canvas C, out string, out string, out float, out float, out byte)
TextAreaClipText(Canvas C, float DrawX, float DrawY, string S, optional bool)
00001 class UWindowURLTextArea expands UWindowDynamicTextArea; 00002 00003 var bool bReleased; 00004 00005 function BeforePaint(Canvas C, float X, float Y) 00006 { 00007 Super.BeforePaint(C, X, Y); 00008 Cursor = Root.NormalCursor; 00009 } 00010 00011 function Paint(Canvas C, float X, float Y) 00012 { 00013 Super.Paint(C, X, Y); 00014 bReleased = False; 00015 } 00016 00017 function TextAreaClipText(Canvas C, float DrawX, float DrawY, coerce string S, optional bool bCheckHotkey) 00018 { 00019 local float X, Y, W, H; 00020 local float ClickX, ClickY; 00021 local string Text, NextBlock; 00022 local byte bLink; 00023 local bool bOverLink; 00024 00025 Text = S; 00026 X = DrawX; 00027 Y = DrawY; 00028 while(Text != "") 00029 { 00030 ProcessText(C, Text, NextBlock, W, H, bLink); 00031 if(bLink != 0) 00032 { 00033 C.DrawColor.R = 0; 00034 C.DrawColor.G = 0; 00035 C.DrawColor.B = 255; 00036 } 00037 else 00038 { 00039 C.DrawColor.R = 255; 00040 C.DrawColor.G = 255; 00041 C.DrawColor.B = 255; 00042 } 00043 00044 GetMouseXY(ClickX, ClickY); 00045 bOverLink = bLink != 0 && DrawX < ClickX && DrawX + W > ClickX && DrawY < ClickY && DrawY + H > ClickY; 00046 00047 if(bOverLink) 00048 Cursor = Root.HandCursor; 00049 00050 if(bOverLink && (bMouseDown || bReleased)) 00051 { 00052 if(bReleased) 00053 { 00054 Log("Clicked URL: >>"$NextBlock$"<<"); 00055 if( Left(NextBlock, 7) ~= "http://" ) 00056 GetPlayerOwner().ConsoleCommand("start "$NextBlock); 00057 if( Left(NextBlock, 6) ~= "ftp://" ) 00058 GetPlayerOwner().ConsoleCommand("start "$NextBlock); 00059 if( Left(NextBlock, 9) ~= "telnet://" ) 00060 GetPlayerOwner().ConsoleCommand("start "$NextBlock); 00061 if( Left(NextBlock, 9) ~= "gopher://" ) 00062 GetPlayerOwner().ConsoleCommand("start "$NextBlock); 00063 if( Left(NextBlock, 4) ~= "www." ) 00064 GetPlayerOwner().ConsoleCommand("start http://"$NextBlock); 00065 if( Left(NextBlock, 4) ~= "ftp." ) 00066 GetPlayerOwner().ConsoleCommand("start ftp://"$NextBlock); 00067 else 00068 if( Left(NextBlock, 9) ~= "unreal://" ) 00069 LaunchUnrealURL(NextBlock); 00070 } 00071 else 00072 { 00073 C.DrawColor.R = 255; 00074 C.DrawColor.G = 0; 00075 C.DrawColor.B = 0; 00076 } 00077 if(bReleased) 00078 bReleased = False; 00079 } 00080 00081 if(bLink != 0) 00082 DrawStretchedTexture(C, DrawX, DrawY+H-1, W, 1, Texture'WhiteTexture'); 00083 ClipText(C, DrawX, DrawY, NextBlock); 00084 DrawX += W; 00085 } 00086 } 00087 00088 function LaunchUnrealURL(string URL) 00089 { 00090 GetPlayerOwner().ClientTravel(URL, TRAVEL_Absolute, false); 00091 } 00092 00093 function Click(float X, float Y) 00094 { 00095 Super.Click(X, Y); 00096 bReleased = True; 00097 } 00098 00099 function ProcessText(Canvas C, out string Text, out string NextBlock, out float W, out float H, out byte bLink) 00100 { 00101 local int i, j; 00102 local string Temp; 00103 00104 i = InStr(Text, "http://"); 00105 00106 j = InStr(Text, "www."); 00107 if(i == -1 || j == -1) 00108 i = Max(i, j); 00109 else 00110 i = Min(i, j); 00111 00112 j = InStr(Text, "unreal://"); 00113 if(i == -1 || j == -1) 00114 i = Max(i, j); 00115 else 00116 i = Min(i, j); 00117 00118 j = InStr(Text, "ftp://"); 00119 if(i == -1 || j == -1) 00120 i = Max(i, j); 00121 else 00122 i = Min(i, j); 00123 00124 j = InStr(Text, "ftp."); 00125 if(i == -1 || j == -1) 00126 i = Max(i, j); 00127 else 00128 i = Min(i, j); 00129 00130 j = InStr(Text, "telnet://"); 00131 if(i == -1 || j == -1) 00132 i = Max(i, j); 00133 else 00134 i = Min(i, j); 00135 00136 j = InStr(Text, "gopher://"); 00137 if(i == -1 || j == -1) 00138 i = Max(i, j); 00139 else 00140 i = Min(i, j); 00141 00142 bLink = 0; 00143 00144 if(i == -1) 00145 { 00146 NextBlock = Text; 00147 Text = ""; 00148 } 00149 else 00150 if(i == 0) 00151 { 00152 bLink = 1; 00153 00154 i = InStr(Text, " "); 00155 if(i == -1) 00156 { 00157 NextBlock = Text; 00158 Text = ""; 00159 } 00160 else 00161 { 00162 NextBlock = Left(Text, i); 00163 Text = Mid(Text, i); 00164 } 00165 } 00166 else 00167 { 00168 NextBlock = Left(Text, i); 00169 Text = Mid(Text, i); 00170 } 00171 00172 TextAreaTextSize(C, NextBlock, W, H); 00173 } 00174 00175 defaultproperties 00176 { 00177 bIgnoreLDoubleClick=True 00178 }