UWindow
Class UWindowURLTextArea

source: e:\games\UnrealTournament\UWindow\Classes\UWindowURLTextArea.uc
Core.Object
   |
   +--UWindow.UWindowBase
      |
      +--UWindow.UWindowWindow
         |
         +--UWindow.UWindowDialogControl
            |
            +--UWindow.UWindowDynamicTextArea
               |
               +--UWindow.UWindowURLTextArea
Direct Known Subclasses:UBrowserIRCTextArea

class UWindowURLTextArea
extends UWindow.UWindowDynamicTextArea


Variables
 bool bReleased


Function Summary
 void BeforePaint(Canvas C, float X, float Y)
 void Click(float X, float Y)
 void LaunchUnrealURL(string URL)
 void Paint(Canvas C, float X, float Y)
 void ProcessText(Canvas C, out string, out string, out float, out float, out byte)
 void TextAreaClipText(Canvas C, float DrawX, float DrawY, string S, optional bool)



Source Code


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	}

End Source Code