EndProject\r
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RadegastNetcom", "RadegastNetcom\RadegastNetcom.csproj", "{8EE25E10-46BC-486E-87B5-5E49B879E0D1}"\r
EndProject\r
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenMetaverse", "libopenmetaverse\OpenMetaverse\OpenMetaverse.csproj", "{235DD548-2A5B-4E41-BACC-AF9378CC729F}"\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenMetaverse", "libopenmetaverse\OpenMetaverse\OpenMetaverse.csproj", "{1133A791-5AB5-4F2B-80A2-7496237BB61F}"\r
EndProject\r
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenMetaverseTypes", "libopenmetaverse\OpenMetaverseTypes\OpenMetaverseTypes.csproj", "{6E362F7C-F6B0-4F42-B678-5E7F9D0C22F4}"\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenMetaverseTypes", "libopenmetaverse\OpenMetaverseTypes\OpenMetaverseTypes.csproj", "{6E88BCFB-E68B-4B6D-BC57-888CB7640217}"\r
EndProject\r
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenMetaverse.StructuredData", "libopenmetaverse\OpenMetaverse.StructuredData\OpenMetaverse.StructuredData.csproj", "{A65C6BF0-4D18-4F20-AE4C-92003ED4A7FD}"\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenMetaverse.StructuredData", "libopenmetaverse\OpenMetaverse.StructuredData\OpenMetaverse.StructuredData.csproj", "{5D27958B-E8F7-4FD3-9CBB-B7A5148F983E}"\r
EndProject\r
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenMetaverse.Http", "libopenmetaverse\OpenMetaverse.Http\OpenMetaverse.Http.csproj", "{09C8AD9A-2B63-45F0-B857-6873687301DA}"\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenMetaverse.Http", "libopenmetaverse\OpenMetaverse.Http\OpenMetaverse.Http.csproj", "{8D83ECB2-355F-43AA-A6FB-1655C41F6974}"\r
EndProject\r
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HttpServer", "libopenmetaverse\HttpServer\HttpServer.csproj", "{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}"\r
EndProject\r
{8EE25E10-46BC-486E-87B5-5E49B879E0D1}.Release|Any CPU.Build.0 = Release|Any CPU\r
{8EE25E10-46BC-486E-87B5-5E49B879E0D1}.Release|x86.ActiveCfg = Release|x86\r
{8EE25E10-46BC-486E-87B5-5E49B879E0D1}.Release|x86.Build.0 = Release|x86\r
- {235DD548-2A5B-4E41-BACC-AF9378CC729F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
- {235DD548-2A5B-4E41-BACC-AF9378CC729F}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
- {235DD548-2A5B-4E41-BACC-AF9378CC729F}.Debug|x86.ActiveCfg = Debug|x86\r
- {235DD548-2A5B-4E41-BACC-AF9378CC729F}.Debug|x86.Build.0 = Debug|x86\r
- {235DD548-2A5B-4E41-BACC-AF9378CC729F}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
- {235DD548-2A5B-4E41-BACC-AF9378CC729F}.Release|Any CPU.Build.0 = Release|Any CPU\r
- {235DD548-2A5B-4E41-BACC-AF9378CC729F}.Release|x86.ActiveCfg = Release|x86\r
- {235DD548-2A5B-4E41-BACC-AF9378CC729F}.Release|x86.Build.0 = Release|x86\r
- {6E362F7C-F6B0-4F42-B678-5E7F9D0C22F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
- {6E362F7C-F6B0-4F42-B678-5E7F9D0C22F4}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
- {6E362F7C-F6B0-4F42-B678-5E7F9D0C22F4}.Debug|x86.ActiveCfg = Debug|x86\r
- {6E362F7C-F6B0-4F42-B678-5E7F9D0C22F4}.Debug|x86.Build.0 = Debug|x86\r
- {6E362F7C-F6B0-4F42-B678-5E7F9D0C22F4}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
- {6E362F7C-F6B0-4F42-B678-5E7F9D0C22F4}.Release|Any CPU.Build.0 = Release|Any CPU\r
- {6E362F7C-F6B0-4F42-B678-5E7F9D0C22F4}.Release|x86.ActiveCfg = Release|x86\r
- {6E362F7C-F6B0-4F42-B678-5E7F9D0C22F4}.Release|x86.Build.0 = Release|x86\r
- {A65C6BF0-4D18-4F20-AE4C-92003ED4A7FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
- {A65C6BF0-4D18-4F20-AE4C-92003ED4A7FD}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
- {A65C6BF0-4D18-4F20-AE4C-92003ED4A7FD}.Debug|x86.ActiveCfg = Debug|x86\r
- {A65C6BF0-4D18-4F20-AE4C-92003ED4A7FD}.Debug|x86.Build.0 = Debug|x86\r
- {A65C6BF0-4D18-4F20-AE4C-92003ED4A7FD}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
- {A65C6BF0-4D18-4F20-AE4C-92003ED4A7FD}.Release|Any CPU.Build.0 = Release|Any CPU\r
- {A65C6BF0-4D18-4F20-AE4C-92003ED4A7FD}.Release|x86.ActiveCfg = Release|x86\r
- {A65C6BF0-4D18-4F20-AE4C-92003ED4A7FD}.Release|x86.Build.0 = Release|x86\r
- {09C8AD9A-2B63-45F0-B857-6873687301DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
- {09C8AD9A-2B63-45F0-B857-6873687301DA}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
- {09C8AD9A-2B63-45F0-B857-6873687301DA}.Debug|x86.ActiveCfg = Debug|x86\r
- {09C8AD9A-2B63-45F0-B857-6873687301DA}.Debug|x86.Build.0 = Debug|x86\r
- {09C8AD9A-2B63-45F0-B857-6873687301DA}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
- {09C8AD9A-2B63-45F0-B857-6873687301DA}.Release|Any CPU.Build.0 = Release|Any CPU\r
- {09C8AD9A-2B63-45F0-B857-6873687301DA}.Release|x86.ActiveCfg = Release|x86\r
- {09C8AD9A-2B63-45F0-B857-6873687301DA}.Release|x86.Build.0 = Release|x86\r
+ {1133A791-5AB5-4F2B-80A2-7496237BB61F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+ {1133A791-5AB5-4F2B-80A2-7496237BB61F}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+ {1133A791-5AB5-4F2B-80A2-7496237BB61F}.Debug|x86.ActiveCfg = Debug|x86\r
+ {1133A791-5AB5-4F2B-80A2-7496237BB61F}.Debug|x86.Build.0 = Debug|x86\r
+ {1133A791-5AB5-4F2B-80A2-7496237BB61F}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+ {1133A791-5AB5-4F2B-80A2-7496237BB61F}.Release|Any CPU.Build.0 = Release|Any CPU\r
+ {1133A791-5AB5-4F2B-80A2-7496237BB61F}.Release|x86.ActiveCfg = Release|x86\r
+ {1133A791-5AB5-4F2B-80A2-7496237BB61F}.Release|x86.Build.0 = Release|x86\r
+ {6E88BCFB-E68B-4B6D-BC57-888CB7640217}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+ {6E88BCFB-E68B-4B6D-BC57-888CB7640217}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+ {6E88BCFB-E68B-4B6D-BC57-888CB7640217}.Debug|x86.ActiveCfg = Debug|x86\r
+ {6E88BCFB-E68B-4B6D-BC57-888CB7640217}.Debug|x86.Build.0 = Debug|x86\r
+ {6E88BCFB-E68B-4B6D-BC57-888CB7640217}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+ {6E88BCFB-E68B-4B6D-BC57-888CB7640217}.Release|Any CPU.Build.0 = Release|Any CPU\r
+ {6E88BCFB-E68B-4B6D-BC57-888CB7640217}.Release|x86.ActiveCfg = Release|x86\r
+ {6E88BCFB-E68B-4B6D-BC57-888CB7640217}.Release|x86.Build.0 = Release|x86\r
+ {5D27958B-E8F7-4FD3-9CBB-B7A5148F983E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+ {5D27958B-E8F7-4FD3-9CBB-B7A5148F983E}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+ {5D27958B-E8F7-4FD3-9CBB-B7A5148F983E}.Debug|x86.ActiveCfg = Debug|x86\r
+ {5D27958B-E8F7-4FD3-9CBB-B7A5148F983E}.Debug|x86.Build.0 = Debug|x86\r
+ {5D27958B-E8F7-4FD3-9CBB-B7A5148F983E}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+ {5D27958B-E8F7-4FD3-9CBB-B7A5148F983E}.Release|Any CPU.Build.0 = Release|Any CPU\r
+ {5D27958B-E8F7-4FD3-9CBB-B7A5148F983E}.Release|x86.ActiveCfg = Release|x86\r
+ {5D27958B-E8F7-4FD3-9CBB-B7A5148F983E}.Release|x86.Build.0 = Release|x86\r
+ {8D83ECB2-355F-43AA-A6FB-1655C41F6974}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+ {8D83ECB2-355F-43AA-A6FB-1655C41F6974}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+ {8D83ECB2-355F-43AA-A6FB-1655C41F6974}.Debug|x86.ActiveCfg = Debug|x86\r
+ {8D83ECB2-355F-43AA-A6FB-1655C41F6974}.Debug|x86.Build.0 = Debug|x86\r
+ {8D83ECB2-355F-43AA-A6FB-1655C41F6974}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+ {8D83ECB2-355F-43AA-A6FB-1655C41F6974}.Release|Any CPU.Build.0 = Release|Any CPU\r
+ {8D83ECB2-355F-43AA-A6FB-1655C41F6974}.Release|x86.ActiveCfg = Release|x86\r
+ {8D83ECB2-355F-43AA-A6FB-1655C41F6974}.Release|x86.Build.0 = Release|x86\r
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Debug|x86.ActiveCfg = Debug|x86\r
+++ /dev/null
-using System;\r
-using System.Collections.Generic;\r
-using System.Text;\r
-using System.Windows.Forms;\r
-using OpenMetaverse;\r
-\r
-namespace Radegast\r
-{\r
- public class ObjectsListItem\r
- {\r
- private Primitive prim;\r
- private GridClient client;\r
- private ListBox listBox;\r
- private bool gotProperties = false;\r
- private bool gettingProperties = false;\r
-\r
- public ObjectsListItem(Primitive prim, GridClient client, ListBox listBox)\r
- {\r
- this.prim = prim;\r
- this.client = client;\r
- this.listBox = listBox;\r
- }\r
-\r
- public void RequestProperties()\r
- {\r
- if (prim.Properties == null)\r
- {\r
- gettingProperties = true;\r
- client.Objects.OnObjectPropertiesFamily += new ObjectManager.ObjectPropertiesFamilyCallback(Objects_OnObjectPropertiesFamily);\r
- client.Objects.RequestObjectPropertiesFamily(client.Network.CurrentSim, prim.ID);\r
- }\r
- else\r
- {\r
- gotProperties = true;\r
- OnPropertiesReceived(EventArgs.Empty);\r
- }\r
- }\r
-\r
- void Objects_OnObjectPropertiesFamily(Simulator simulator, Primitive.ObjectProperties props, ReportType type)\r
- {\r
- if (props.ObjectID != prim.ID) return;\r
- gettingProperties = false;\r
- gotProperties = true;\r
- prim.Properties = props;\r
- listBox.BeginInvoke(\r
- new OnPropReceivedRaise(OnPropertiesReceived),\r
- new object[] { EventArgs.Empty });\r
- }\r
-\r
- public override string ToString()\r
- {\r
- return (String.IsNullOrEmpty(prim.Properties.Name) ? "..." : prim.Properties.Name);\r
- }\r
-\r
- public event EventHandler PropertiesReceived;\r
- private delegate void OnPropReceivedRaise(EventArgs e);\r
- protected virtual void OnPropertiesReceived(EventArgs e)\r
- {\r
- if (PropertiesReceived != null) PropertiesReceived(this, e);\r
- }\r
-\r
- public Primitive Prim\r
- {\r
- get { return prim; }\r
- }\r
-\r
- public bool GotProperties\r
- {\r
- get { return gotProperties; }\r
- }\r
-\r
- public bool GettingProperties\r
- {\r
- get { return gettingProperties; }\r
- }\r
- }\r
-}\r
public Dictionary<UUID, Group> groups;\r
public Dictionary<UUID, string> nameCache = new Dictionary<UUID,string>();\r
\r
+ public delegate void OnAvatarNameCallBack(UUID agentID, string agentName);\r
+ public event OnAvatarNameCallBack OnAvatarName;\r
+\r
public readonly bool advancedDebugging = false;\r
\r
public RadegastInstance()\r
client.Settings.OBJECT_TRACKING = true;\r
client.Settings.ENABLE_SIMSTATS = true;\r
client.Settings.FETCH_MISSING_INVENTORY = true;\r
- client.Settings.MULTIPLE_SIMS = false;\r
+ client.Settings.MULTIPLE_SIMS = true;\r
client.Settings.SEND_AGENT_THROTTLE = true;\r
client.Settings.SEND_AGENT_UPDATES = true;\r
\r
{\r
foreach (KeyValuePair<UUID, string> av in names)\r
{\r
+ if (OnAvatarName != null) try { OnAvatarName(av.Key, av.Value); }\r
+ catch (Exception) { };\r
+\r
if (!nameCache.ContainsKey(av.Key))\r
{\r
nameCache.Add(av.Key, av.Value);\r
\r
void Grid_OnCoarseLocationUpdate(Simulator sim, List<UUID> newEntries, List<UUID> removedEntries)\r
{\r
- if (client.Network.CurrentSim.ID != sim.ID)\r
+ if (client.Network.CurrentSim.ID != sim.ID || !sim.AvatarPositions.ContainsKey(client.Self.AgentID))\r
{\r
return;\r
}\r
this.btnProfile = new System.Windows.Forms.Button();\r
this.tabControl1 = new System.Windows.Forms.TabControl();\r
this.tpgPeople = new System.Windows.Forms.TabPage();\r
- this.btnLocate = new System.Windows.Forms.Button();\r
this.btnLink = new System.Windows.Forms.Button();\r
this.tabControl1.SuspendLayout();\r
this.tpgPeople.SuspendLayout();\r
// tpgPeople\r
// \r
this.tpgPeople.Controls.Add(this.btnLink);\r
- this.tpgPeople.Controls.Add(this.btnLocate);\r
this.tpgPeople.Controls.Add(this.label1);\r
this.tpgPeople.Controls.Add(this.btnProfile);\r
this.tpgPeople.Controls.Add(this.pnlFindPeople);\r
this.tpgPeople.Text = "People";\r
this.tpgPeople.UseVisualStyleBackColor = true;\r
// \r
- // btnLocate\r
- // \r
- this.btnLocate.Enabled = false;\r
- this.btnLocate.Location = new System.Drawing.Point(6, 91);\r
- this.btnLocate.Name = "btnLocate";\r
- this.btnLocate.Size = new System.Drawing.Size(78, 23);\r
- this.btnLocate.TabIndex = 9;\r
- this.btnLocate.Text = "Locate";\r
- this.btnLocate.UseVisualStyleBackColor = true;\r
- this.btnLocate.Click += new System.EventHandler(this.btnLocate_Click);\r
- // \r
// btnLink\r
// \r
this.btnLink.Location = new System.Drawing.Point(93, 33);\r
private System.Windows.Forms.Button btnProfile;\r
private System.Windows.Forms.TabControl tabControl1;\r
private System.Windows.Forms.TabPage tpgPeople;\r
- private System.Windows.Forms.Button btnLocate;\r
private System.Windows.Forms.Button btnLink;\r
}\r
}\r
console = new FindPeopleConsole(instance, UUID.Random());\r
console.Dock = DockStyle.Fill;\r
console.SelectedIndexChanged += new EventHandler(console_SelectedIndexChanged);\r
- client.Self.OnInstantMessage += new AgentManager.InstantMessageCallback(Self_OnInstantMessage);\r
pnlFindPeople.Controls.Add(console);\r
}\r
\r
private void console_SelectedIndexChanged(object sender, EventArgs e)\r
{\r
- btnNewIM.Enabled = btnProfile.Enabled = btnLocate.Enabled = (console.SelectedName != null);\r
+ btnNewIM.Enabled = btnProfile.Enabled = (console.SelectedName != null);\r
}\r
\r
private void AddClientEvents()\r
btnFind.Enabled = (txtPersonName.Text.Trim().Length > 2);\r
}\r
\r
- private void btnLocate_Click(object sender, EventArgs e)\r
- {\r
- client.Inventory.GiveItem(UUID.Zero, "", AssetType.Unknown, console.SelectedAgentUUID, false);\r
- }\r
-\r
- private string getHttp(string url)\r
- {\r
- // used to build entire input\r
- StringBuilder sb = new StringBuilder();\r
-\r
- // used on each read operation\r
- byte[] buf = new byte[8192];\r
-\r
- // prepare the web page we will be asking for\r
- HttpWebRequest request = (HttpWebRequest)\r
- WebRequest.Create(url);\r
-\r
- // execute the request\r
- HttpWebResponse response = (HttpWebResponse)\r
- request.GetResponse();\r
-\r
- // we will read data via the response stream\r
- Stream resStream = response.GetResponseStream();\r
-\r
- string tempString = null;\r
- int count = 0;\r
-\r
- do {\r
- // fill the buffer with data\r
- count = resStream.Read(buf, 0, buf.Length);\r
-\r
- // make sure we read some data\r
- if (count != 0) {\r
- // translate from bytes to ASCII text\r
- tempString = Encoding.UTF8.GetString(buf, 0, count);\r
-\r
- // continue building the string\r
- sb.Append(tempString);\r
- }\r
- }\r
- while (count > 0); // any more data to read?\r
- return sb.ToString();\r
- }\r
-\r
- /// <summary>\r
- /// Blocking <:O\r
- /// </summary>\r
- /// <param name="regionId"></param>\r
- /// <returns></returns>\r
- public string GetRegionName(UUID regionId)\r
- {\r
- RegionHandleRequestPacket handleRequest = new RegionHandleRequestPacket();\r
- handleRequest.Header.Reliable = true;\r
- handleRequest.RequestBlock = new RegionHandleRequestPacket.RequestBlockBlock();\r
- handleRequest.RequestBlock.RegionID = regionId;\r
-\r
- ulong handle = 0;\r
- ManualResetEvent evt = new ManualResetEvent(false);\r
-\r
- NetworkManager.PacketCallback handleReplyCallback = delegate(Packet packet, Simulator sender)\r
- {\r
- RegionIDAndHandleReplyPacket handleReply = (RegionIDAndHandleReplyPacket)packet;\r
- if (handleReply.ReplyBlock.RegionID == regionId) {\r
- handle = handleReply.ReplyBlock.RegionHandle;\r
- evt.Set();\r
- }\r
- };\r
-\r
- client.Network.RegisterCallback(PacketType.RegionIDAndHandleReply, handleReplyCallback);\r
- client.Network.SendPacket(handleRequest);\r
-\r
- bool ok = evt.WaitOne(10000, false);\r
- client.Network.UnregisterCallback(PacketType.RegionIDAndHandleReply, handleReplyCallback);\r
- if (!ok)\r
- return null;\r
-\r
- ushort X = (ushort)(handle >> 40);\r
- ushort Y = (ushort)((handle & 0xFFFFFFFF) >> 8);\r
-\r
- MapBlockRequestPacket mapRequest = new MapBlockRequestPacket();\r
- mapRequest.Header.Reliable = true;\r
- mapRequest.AgentData = new MapBlockRequestPacket.AgentDataBlock();\r
- mapRequest.AgentData.AgentID = client.Self.AgentID;\r
- mapRequest.AgentData.SessionID = client.Self.SessionID;\r
- mapRequest.AgentData.Flags = 0;\r
- mapRequest.AgentData.Godlike = false;\r
- mapRequest.PositionData = new MapBlockRequestPacket.PositionDataBlock();\r
- mapRequest.PositionData.MinX = X;\r
- mapRequest.PositionData.MaxX = X;\r
- mapRequest.PositionData.MinY = Y;\r
- mapRequest.PositionData.MaxY = Y;\r
-\r
- string name = null;\r
- evt.Reset();\r
-\r
- NetworkManager.PacketCallback mapReplyCallback = delegate(Packet packet, Simulator sender)\r
- {\r
- MapBlockReplyPacket mapReply = (MapBlockReplyPacket)packet;\r
- foreach (MapBlockReplyPacket.DataBlock block in mapReply.Data) {\r
- if ((block.X == X) && (block.Y == Y)) {\r
- name = Utils.BytesToString(block.Name);\r
- evt.Set();\r
- }\r
- }\r
- };\r
-\r
- client.Network.RegisterCallback(PacketType.MapBlockReply, mapReplyCallback);\r
- client.Network.SendPacket(mapRequest);\r
-\r
- ok = evt.WaitOne(10000, false);\r
- client.Network.UnregisterCallback(PacketType.MapBlockReply, mapReplyCallback);\r
- if (!ok)\r
- return null;\r
-\r
- return name;\r
- }\r
-\r
- void Self_OnInstantMessage(InstantMessage im, Simulator simulator)\r
- {\r
- if (InvokeRequired) {\r
- Invoke(new MethodInvoker(delegate()\r
- {\r
- Self_OnInstantMessage(im, simulator);\r
- }));\r
- }\r
-\r
- if (im.Dialog == InstantMessageDialog.InventoryDeclined) {\r
- try {\r
- /*\r
- string reginfo = "";\r
- reginfo = getHttp("http://world.GridClient.com/region/" + im.RegionID);\r
- Regex r = new Regex("GridClient:///app/teleport/([^/]*)");\r
- Match m = r.Match(reginfo);\r
- */\r
- string url = "GridClient:///" + GetRegionName(im.RegionID) + "/" + ((int)im.Position.X) + "/" + ((int)im.Position.Y) + "/" + ((int)im.Position.Z);\r
- btnLink.Text = im.FromAgentName + " is at " + url;\r
- btnLink.Tag = url;\r
- btnLink.Visible = true;\r
- } catch (Exception ex) {\r
- System.Console.WriteLine(ex.Message);\r
- }\r
- \r
-\r
- }\r
- }\r
-\r
private void btnNewIM_Click(object sender, EventArgs e)\r
{\r
if (tabConsole.TabExists((client.Self.AgentID ^ console.SelectedAgentUUID).ToString()))\r
this.tlblParcel = new System.Windows.Forms.ToolStripStatusLabel();\r
this.toolStripContainer1 = new System.Windows.Forms.ToolStripContainer();\r
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);\r
+ this.standToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
+ this.groundSitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
this.toolStrip1.SuspendLayout();\r
this.statusStrip1.SuspendLayout();\r
this.toolStripContainer1.TopToolStripPanel.SuspendLayout();\r
this.tbtnControl.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;\r
this.tbtnControl.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\r
this.tmnuControlFly,\r
- this.tmnuControlAlwaysRun});\r
+ this.tmnuControlAlwaysRun,\r
+ this.groundSitToolStripMenuItem,\r
+ this.standToolStripMenuItem});\r
this.tbtnControl.Enabled = false;\r
this.tbtnControl.Image = ((System.Drawing.Image)(resources.GetObject("tbtnControl.Image")));\r
this.tbtnControl.ImageTransparentColor = System.Drawing.Color.Magenta;\r
this.toolTip1.ToolTipIcon = System.Windows.Forms.ToolTipIcon.Info;\r
this.toolTip1.ToolTipTitle = "Detailed Info";\r
// \r
+ // standToolStripMenuItem\r
+ // \r
+ this.standToolStripMenuItem.Name = "standToolStripMenuItem";\r
+ this.standToolStripMenuItem.Size = new System.Drawing.Size(152, 22);\r
+ this.standToolStripMenuItem.Text = "Stand";\r
+ this.standToolStripMenuItem.Click += new System.EventHandler(this.standToolStripMenuItem_Click);\r
+ // \r
+ // groundSitToolStripMenuItem\r
+ // \r
+ this.groundSitToolStripMenuItem.Name = "groundSitToolStripMenuItem";\r
+ this.groundSitToolStripMenuItem.Size = new System.Drawing.Size(152, 22);\r
+ this.groundSitToolStripMenuItem.Text = "Sit on ground";\r
+ this.groundSitToolStripMenuItem.Click += new System.EventHandler(this.groundSitToolStripMenuItem_Click);\r
+ // \r
// frmMain\r
// \r
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r
private System.Windows.Forms.ToolStripMenuItem rebakeTexturesToolStripMenuItem;\r
private System.Windows.Forms.ToolStripMenuItem mapToolStripMenuItem;\r
private System.Windows.Forms.ToolStripMenuItem groupsToolStripMenuItem;\r
+ private System.Windows.Forms.ToolStripMenuItem standToolStripMenuItem;\r
+ private System.Windows.Forms.ToolStripMenuItem groundSitToolStripMenuItem;\r
}\r
}\r
\r
worldMap.Focus();\r
}\r
}\r
+\r
+ private void standToolStripMenuItem_Click(object sender, EventArgs e)\r
+ {\r
+ client.Self.Stand();\r
+ }\r
+\r
+ private void groundSitToolStripMenuItem_Click(object sender, EventArgs e)\r
+ {\r
+ client.Self.SitOnGround();\r
+ }\r
}\r
}
\ No newline at end of file
#region JavascriptHooks\r
void focusMap(int regX, int regY, int zoom)\r
{\r
+ if (!Visible) return;\r
+\r
object[] parms = new object[3];\r
parms[0] = regX;\r
parms[1] = regY;\r
\r
void gotoRegion(string regionName)\r
{\r
+ if (!Visible) return;\r
+\r
object[] param = new object[1];\r
param[0] = regionName;\r
\r
map.Document.InvokeScript("gotoRegion", param);\r
}\r
\r
- void closeInfoWindow()\r
- {\r
- map.Document.InvokeScript("closeInfoWindow");\r
- }\r
-\r
public void doNavigate(string region, string strx, string stry)\r
{\r
txtRegion.Text = region;\r
/// </summary>\r
private void InitializeComponent()\r
{\r
- this.components = new System.ComponentModel.Container();\r
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmObjects));\r
- this.lbxPrims = new System.Windows.Forms.ListBox();\r
this.gbxInworld = new System.Windows.Forms.GroupBox();\r
this.btnTouch = new System.Windows.Forms.Button();\r
this.btnSitOn = new System.Windows.Forms.Button();\r
this.btnPointAt = new System.Windows.Forms.Button();\r
this.txtSearch = new System.Windows.Forms.TextBox();\r
- this.timer1 = new System.Windows.Forms.Timer(this.components);\r
- this.lblStatus = new System.Windows.Forms.Label();\r
this.label1 = new System.Windows.Forms.Label();\r
this.btnClear = new System.Windows.Forms.Button();\r
this.btnClose = new System.Windows.Forms.Button();\r
+ this.lstPrims = new System.Windows.Forms.ListView();\r
+ this.columnHeader1 = new System.Windows.Forms.ColumnHeader();\r
+ this.btnRefresh = new System.Windows.Forms.Button();\r
this.gbxInworld.SuspendLayout();\r
this.SuspendLayout();\r
// \r
- // lbxPrims\r
- // \r
- this.lbxPrims.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)\r
- | System.Windows.Forms.AnchorStyles.Left)\r
- | System.Windows.Forms.AnchorStyles.Right)));\r
- this.lbxPrims.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;\r
- this.lbxPrims.FormattingEnabled = true;\r
- this.lbxPrims.IntegralHeight = false;\r
- this.lbxPrims.ItemHeight = 18;\r
- this.lbxPrims.Location = new System.Drawing.Point(12, 39);\r
- this.lbxPrims.Name = "lbxPrims";\r
- this.lbxPrims.Size = new System.Drawing.Size(362, 375);\r
- this.lbxPrims.Sorted = true;\r
- this.lbxPrims.TabIndex = 0;\r
- this.lbxPrims.Visible = false;\r
- this.lbxPrims.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.lbxPrims_DrawItem);\r
- this.lbxPrims.SelectedIndexChanged += new System.EventHandler(this.lbxPrims_SelectedIndexChanged);\r
- // \r
// gbxInworld\r
// \r
this.gbxInworld.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\r
// \r
this.txtSearch.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)\r
| System.Windows.Forms.AnchorStyles.Right)));\r
- this.txtSearch.Enabled = false;\r
this.txtSearch.Location = new System.Drawing.Point(62, 12);\r
this.txtSearch.Name = "txtSearch";\r
this.txtSearch.Size = new System.Drawing.Size(246, 21);\r
this.txtSearch.TabIndex = 4;\r
this.txtSearch.TextChanged += new System.EventHandler(this.txtSearch_TextChanged);\r
// \r
- // timer1\r
- // \r
- this.timer1.Enabled = true;\r
- this.timer1.Interval = 1500;\r
- this.timer1.Tick += new System.EventHandler(this.timer1_Tick);\r
- // \r
- // lblStatus\r
- // \r
- this.lblStatus.AutoSize = true;\r
- this.lblStatus.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r
- this.lblStatus.Location = new System.Drawing.Point(12, 36);\r
- this.lblStatus.Name = "lblStatus";\r
- this.lblStatus.Size = new System.Drawing.Size(103, 13);\r
- this.lblStatus.TabIndex = 6;\r
- this.lblStatus.Text = "Getting objects...";\r
- // \r
// label1\r
// \r
this.label1.AutoSize = true;\r
this.btnClose.UseVisualStyleBackColor = true;\r
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);\r
// \r
+ // lstPrims\r
+ // \r
+ this.lstPrims.AutoArrange = false;\r
+ this.lstPrims.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\r
+ this.columnHeader1});\r
+ this.lstPrims.FullRowSelect = true;\r
+ this.lstPrims.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;\r
+ this.lstPrims.LabelWrap = false;\r
+ this.lstPrims.Location = new System.Drawing.Point(12, 39);\r
+ this.lstPrims.MultiSelect = false;\r
+ this.lstPrims.Name = "lstPrims";\r
+ this.lstPrims.ShowGroups = false;\r
+ this.lstPrims.Size = new System.Drawing.Size(361, 375);\r
+ this.lstPrims.TabIndex = 10;\r
+ this.lstPrims.UseCompatibleStateImageBehavior = false;\r
+ this.lstPrims.View = System.Windows.Forms.View.Details;\r
+ this.lstPrims.SelectedIndexChanged += new System.EventHandler(this.lstPrims_SelectedIndexChanged);\r
+ // \r
+ // columnHeader1\r
+ // \r
+ this.columnHeader1.Width = 340;\r
+ // \r
+ // btnRefresh\r
+ // \r
+ this.btnRefresh.Location = new System.Drawing.Point(380, 362);\r
+ this.btnRefresh.Name = "btnRefresh";\r
+ this.btnRefresh.Size = new System.Drawing.Size(100, 23);\r
+ this.btnRefresh.TabIndex = 11;\r
+ this.btnRefresh.Text = "Refresh";\r
+ this.btnRefresh.UseVisualStyleBackColor = true;\r
+ this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click);\r
+ // \r
// frmObjects\r
// \r
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r
this.ClientSize = new System.Drawing.Size(492, 426);\r
+ this.Controls.Add(this.btnRefresh);\r
+ this.Controls.Add(this.lstPrims);\r
this.Controls.Add(this.btnClose);\r
this.Controls.Add(this.btnClear);\r
this.Controls.Add(this.label1);\r
- this.Controls.Add(this.lblStatus);\r
this.Controls.Add(this.txtSearch);\r
this.Controls.Add(this.gbxInworld);\r
- this.Controls.Add(this.lbxPrims);\r
this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));\r
this.Name = "frmObjects";\r
this.Text = "Objects - SLeek";\r
this.Load += new System.EventHandler(this.frmObjects_Load);\r
- this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.frmObjects_FormClosing);\r
this.gbxInworld.ResumeLayout(false);\r
this.ResumeLayout(false);\r
this.PerformLayout();\r
\r
#endregion\r
\r
- private System.Windows.Forms.ListBox lbxPrims;\r
private System.Windows.Forms.GroupBox gbxInworld;\r
private System.Windows.Forms.Button btnSitOn;\r
private System.Windows.Forms.Button btnPointAt;\r
private System.Windows.Forms.Button btnTouch;\r
private System.Windows.Forms.TextBox txtSearch;\r
- private System.Windows.Forms.Timer timer1;\r
- private System.Windows.Forms.Label lblStatus;\r
private System.Windows.Forms.Label label1;\r
private System.Windows.Forms.Button btnClear;\r
private System.Windows.Forms.Button btnClose;\r
+ private System.Windows.Forms.ListView lstPrims;\r
+ private System.Windows.Forms.ColumnHeader columnHeader1;\r
+ private System.Windows.Forms.Button btnRefresh;\r
}\r
}
\ No newline at end of file
using System;\r
+using System.Collections;\r
using System.Collections.Generic;\r
using System.ComponentModel;\r
using System.Data;\r
using System.Drawing;\r
using System.Text;\r
+using System.Text.RegularExpressions;\r
using System.Windows.Forms;\r
using OpenMetaverse;\r
\r
public partial class frmObjects : Form\r
{\r
private RadegastInstance instance;\r
- private GridClient client;\r
+ private GridClient client { get { return instance.Client;} }\r
+ private Primitive currentPrim;\r
private float searchRadius = 35.0f;\r
\r
- private Dictionary<uint, ObjectsListItem> listItems = new Dictionary<uint,ObjectsListItem>();\r
-\r
public frmObjects(RadegastInstance instance)\r
{\r
InitializeComponent();\r
\r
this.instance = instance;\r
- client = this.instance.Client;\r
\r
- client.Network.OnDisconnected += new NetworkManager.DisconnectedCallback(Network_OnDisconnected);\r
-\r
btnPointAt.Text = (this.instance.State.IsPointing ? "Unpoint" : "Point At");\r
btnSitOn.Text = (this.instance.State.IsSitting ? "Stand Up" : "Sit On");\r
- SorterClass sc = new SorterClass();\r
\r
- }\r
+ lstPrims.ListViewItemSorter = new ObjectSorter(client.Self);\r
\r
- private void AddObjectEvents()\r
- {\r
+ client.Network.OnDisconnected += new NetworkManager.DisconnectedCallback(Network_OnDisconnected);\r
client.Objects.OnNewPrim += new ObjectManager.NewPrimCallback(Objects_OnNewPrim);\r
client.Objects.OnObjectKilled += new ObjectManager.KillObjectCallback(Objects_OnObjectKilled);\r
+ client.Objects.OnObjectPropertiesFamily += new ObjectManager.ObjectPropertiesFamilyCallback(Objects_OnObjectPropertiesFamily);\r
+ instance.OnAvatarName += new RadegastInstance.OnAvatarNameCallBack(instance_OnAvatarName);\r
}\r
\r
- private void RemoveObjectEvents()\r
+ void instance_OnAvatarName(UUID agentID, string agentName)\r
{\r
- client.Objects.OnNewPrim -= new ObjectManager.NewPrimCallback(Objects_OnNewPrim);\r
- client.Objects.OnObjectKilled -= new ObjectManager.KillObjectCallback(Objects_OnObjectKilled);\r
- }\r
+ if (InvokeRequired)\r
+ {\r
+ BeginInvoke(new MethodInvoker(delegate()\r
+ {\r
+ instance_OnAvatarName(agentID, agentName);\r
+ }));\r
+ return;\r
+ }\r
\r
- private void Network_OnDisconnected(NetworkManager.DisconnectType reason, string message)\r
- {\r
- this.Close();\r
+ foreach (ListViewItem item in lstPrims.Items)\r
+ {\r
+ Primitive prim = item.Tag as Primitive;\r
+ if (prim.Properties != null && prim.Properties.OwnerID == agentID)\r
+ {\r
+ item.Text = GetObjectName(prim);\r
+ }\r
+ }\r
+ \r
}\r
\r
- private void lbxPrims_DrawItem(object sender, DrawItemEventArgs e)\r
+ void Objects_OnObjectPropertiesFamily(Simulator simulator, Primitive.ObjectProperties props, ReportType type)\r
{\r
- e.DrawBackground();\r
-\r
- if (e.Index < 0) return;\r
-\r
- ObjectsListItem itemToDraw = (ObjectsListItem)lbxPrims.Items[e.Index];\r
- Brush textBrush = null;\r
- Font boldFont = new Font(e.Font, FontStyle.Bold);\r
- Font regularFont = new Font(e.Font, FontStyle.Regular);\r
-\r
- if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)\r
+ if (simulator.Handle != client.Network.CurrentSim.Handle) return;\r
+ if (InvokeRequired)\r
{\r
- textBrush = new SolidBrush(Color.FromKnownColor(KnownColor.HighlightText));\r
+ BeginInvoke(new MethodInvoker(delegate()\r
+ {\r
+ Objects_OnObjectPropertiesFamily(simulator, props, type);\r
+ }));\r
+ return;\r
}\r
- else\r
+ foreach (ListViewItem item in lstPrims.Items)\r
{\r
- textBrush = new SolidBrush(Color.FromKnownColor(KnownColor.ControlText));\r
+ Primitive prim = item.Tag as Primitive;\r
+ if (prim.ID == props.ObjectID)\r
+ {\r
+ item.Text = GetObjectName(prim);\r
+ break;\r
+ }\r
}\r
+ }\r
\r
- string name;\r
- string description;\r
- int distance = (int)Vector3.Distance(itemToDraw.Prim.Position, client.Self.SimPosition);\r
+ private void Network_OnDisconnected(NetworkManager.DisconnectType reason, string message)\r
+ {\r
+ this.Close();\r
+ }\r
+\r
+ private string GetObjectName(Primitive prim, int distance)\r
+ {\r
+ string name = "Loading...";\r
+ string ownerName = "Loading...";\r
\r
- if (string.IsNullOrEmpty(itemToDraw.Prim.Properties.Name))\r
+ if (prim.Properties == null)\r
{\r
- name = "... (" + distance.ToString() + "m)";\r
- description = "...";\r
+ client.Objects.RequestObjectPropertiesFamily(client.Network.CurrentSim, prim.ID);\r
}\r
else\r
{\r
- name = itemToDraw.Prim.Properties.Name + " (" + distance.ToString() + "m)";\r
- description = itemToDraw.Prim.Properties.Description;\r
+ name = prim.Properties.Name;\r
+ ownerName = instance.getAvatarName(prim.Properties.OwnerID);\r
}\r
+ return String.Format("{0} ({1}m) owned by {2}", name, distance, ownerName);\r
\r
- SizeF nameSize = e.Graphics.MeasureString(name, boldFont);\r
- float nameX = e.Bounds.Left + 4;\r
- float nameY = e.Bounds.Top + 2;\r
-\r
- e.Graphics.DrawString(name, boldFont, textBrush, nameX, nameY);\r
- e.Graphics.DrawString(description, regularFont, textBrush, nameX + nameSize.Width + 8, nameY);\r
-\r
- e.DrawFocusRectangle();\r
-\r
- boldFont.Dispose();\r
- regularFont.Dispose();\r
- textBrush.Dispose();\r
- boldFont = null;\r
- regularFont = null;\r
- textBrush = null;\r
}\r
\r
- private void AddAllObjects()\r
+ private string GetObjectName(Primitive prim)\r
{\r
- Vector3 location = client.Self.SimPosition;\r
+ int distance = (int)Vector3.Distance(client.Self.SimPosition, prim.Position);\r
+ return GetObjectName(prim, distance);\r
+ }\r
\r
- client.Network.CurrentSim.ObjectsPrimitives.ForEach(\r
- new Action<Primitive>(\r
- delegate(Primitive prim)\r
- {\r
- Vector3 pos = prim.Position;\r
- \r
- if (prim.ParentID == 0 && (pos != Vector3.Zero) && (Vector3.Distance(pos, location) < searchRadius)) //root prims only\r
+ private void AddPrim(Primitive prim)\r
+ {\r
+ if (InvokeRequired)\r
+ {\r
+ BeginInvoke(new MethodInvoker(delegate()\r
{\r
- ObjectsListItem item = new ObjectsListItem(prim, client, lbxPrims);\r
- try {\r
- listItems.Add(prim.LocalID, item);\r
- item.PropertiesReceived += new EventHandler(item_PropertiesReceived);\r
- item.RequestProperties();\r
- } catch {\r
- }\r
+ AddPrim(prim);\r
}\r
- }\r
));\r
- }\r
+ return;\r
+ }\r
\r
- private void item_PropertiesReceived(object sender, EventArgs e)\r
- {\r
- lbxPrims.Items.Add(sender);\r
- }\r
+ ListViewItem item = null;\r
\r
- private void ResetObjects()\r
- {\r
- lbxPrims.Items.Clear();\r
- listItems.Clear();\r
- AddAllObjects();\r
+ foreach (ListViewItem sitem in lstPrims.Items)\r
+ {\r
+ if (((Primitive)sitem.Tag).LocalID == prim.LocalID)\r
+ {\r
+ item = sitem;\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (item == null)\r
+ {\r
+ item = new ListViewItem(prim.LocalID.ToString());\r
+ item.Text = GetObjectName(prim);\r
+ item.Tag = prim;\r
+ if (txtSearch.Text.Length == 0 || item.Text.ToLower().Contains(txtSearch.Text.ToLower()))\r
+ {\r
+ lstPrims.Items.Add(item);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ item.Text = GetObjectName(prim);\r
+ }\r
}\r
\r
- private void frmObjects_Load(object sender, EventArgs e)\r
+ private void Objects_OnNewPrim(Simulator simulator, Primitive prim, ulong regionHandle, ushort timeDilation)\r
{\r
- lbxPrims.BeginUpdate();\r
-\r
- AddAllObjects();\r
- AddObjectEvents();\r
+ if (regionHandle != client.Network.CurrentSim.Handle || prim.Position == Vector3.Zero) return;\r
+ int distance = (int)Vector3.Distance(client.Self.SimPosition, prim.Position);\r
+ if (distance < searchRadius)\r
+ {\r
+ AddPrim(prim);\r
+ }\r
}\r
\r
- //Separate thread\r
- private void Objects_OnNewPrim(Simulator simulator, Primitive prim, ulong regionHandle, ushort timeDilation)\r
+ private void Objects_OnObjectKilled(Simulator simulator, uint objectID)\r
{\r
- if (prim.ParentID != 0 || Vector3.Distance(client.Self.SimPosition, prim.Position) > searchRadius) {\r
+ if (simulator.Handle != client.Network.CurrentSim.Handle) return;\r
+ \r
+ if (InvokeRequired)\r
+ {\r
+ BeginInvoke(new MethodInvoker(delegate()\r
+ {\r
+ Objects_OnObjectKilled(simulator, objectID);\r
+ }\r
+ ));\r
return;\r
}\r
\r
- lock (listItems)\r
- {\r
- if (listItems.ContainsKey(prim.LocalID)) return;\r
+ ListViewItem item = null;\r
\r
- BeginInvoke(new MethodInvoker(delegate()\r
+ foreach (ListViewItem sitem in lstPrims.Items)\r
+ {\r
+ if (((Primitive)sitem.Tag).LocalID == objectID)\r
{\r
- ObjectsListItem item = new ObjectsListItem(prim, client, lbxPrims);\r
- try {\r
- listItems.Add(prim.LocalID, item);\r
- item.PropertiesReceived += new EventHandler(item_PropertiesReceived);\r
- item.RequestProperties();\r
- } catch {\r
- }\r
+ item = sitem;\r
+ break;\r
+ }\r
+ }\r
\r
- }));\r
+ if (item != null)\r
+ {\r
+ lstPrims.Items.Remove(item);\r
}\r
+\r
}\r
\r
- //Separate thread\r
- private void Objects_OnObjectKilled(Simulator simulator, uint objectID)\r
+\r
+ private void AddAllObjects()\r
{\r
- lock (listItems)\r
- {\r
- if (!listItems.ContainsKey(objectID)) return;\r
+ Vector3 location = client.Self.SimPosition;\r
\r
- BeginInvoke(new MethodInvoker(delegate()\r
+ client.Network.CurrentSim.ObjectsPrimitives.ForEach(\r
+ new Action<Primitive>(\r
+ delegate(Primitive prim)\r
{\r
- ObjectsListItem item = listItems[objectID];\r
- lbxPrims.Items.Remove(item);\r
- listItems.Remove(objectID);\r
- }));\r
- }\r
+ int distance = (int)Vector3.Distance(prim.Position, location);\r
+ if (prim.ParentID == 0 && (prim.Position != Vector3.Zero) && (distance < searchRadius)) //root prims only\r
+ {\r
+ AddPrim(prim);\r
+ }\r
+ }\r
+ ));\r
}\r
\r
- private void lbxPrims_SelectedIndexChanged(object sender, EventArgs e)\r
+ private void frmObjects_Load(object sender, EventArgs e)\r
{\r
- gbxInworld.Enabled = (lbxPrims.SelectedItem != null);\r
+ AddAllObjects();\r
}\r
\r
+\r
private void btnPointAt_Click(object sender, EventArgs e)\r
{\r
- ObjectsListItem item = lbxPrims.SelectedItem as ObjectsListItem;\r
- if (item == null) return;\r
-\r
if (btnPointAt.Text == "Point At")\r
{\r
- instance.State.SetPointing(true, item.Prim.ID);\r
+ instance.State.SetPointing(true, currentPrim.ID);\r
btnPointAt.Text = "Unpoint";\r
}\r
else if (btnPointAt.Text == "Unpoint")\r
{\r
- instance.State.SetPointing(false, item.Prim.ID);\r
+ instance.State.SetPointing(false, currentPrim.ID);\r
btnPointAt.Text = "Point At";\r
}\r
}\r
\r
private void btnSitOn_Click(object sender, EventArgs e)\r
{\r
- ObjectsListItem item = lbxPrims.SelectedItem as ObjectsListItem;\r
- if (item == null) return;\r
-\r
if (btnSitOn.Text == "Sit On")\r
{\r
- instance.State.SetSitting(true, item.Prim.ID);\r
+ instance.State.SetSitting(true, currentPrim.ID);\r
btnSitOn.Text = "Stand Up";\r
}\r
else if (btnSitOn.Text == "Stand Up")\r
{\r
- instance.State.SetSitting(false, item.Prim.ID);\r
+ instance.State.SetSitting(false, currentPrim.ID);\r
btnSitOn.Text = "Sit On";\r
}\r
}\r
\r
private void btnTouch_Click(object sender, EventArgs e)\r
{\r
- ObjectsListItem item = lbxPrims.SelectedItem as ObjectsListItem;\r
- if (item == null) return;\r
-\r
- client.Self.Touch(item.Prim.LocalID);\r
- }\r
-\r
- private void frmObjects_FormClosing(object sender, FormClosingEventArgs e)\r
- {\r
- RemoveObjectEvents();\r
+ client.Self.Touch(currentPrim.LocalID);\r
}\r
\r
private void txtSearch_TextChanged(object sender, EventArgs e)\r
{\r
- string query = txtSearch.Text.Trim();\r
-\r
- if (query.Length == 0)\r
- {\r
- lbxPrims.BeginUpdate();\r
-\r
- RemoveObjectEvents();\r
- ResetObjects();\r
- AddObjectEvents();\r
-\r
- lbxPrims.EndUpdate();\r
- }\r
- else\r
- {\r
- SearchFor(query);\r
- }\r
+ ApplySearch();\r
}\r
\r
- private void SearchFor(string text)\r
+ private void ApplySearch()\r
{\r
- RemoveObjectEvents();\r
-\r
- lbxPrims.BeginUpdate();\r
- lbxPrims.Items.Clear();\r
- listItems.Clear();\r
-\r
- string query = text.ToLower();\r
-\r
- List<Primitive> results =\r
- client.Network.CurrentSim.ObjectsPrimitives.FindAll(\r
- new Predicate<Primitive>(delegate(Primitive prim)\r
- {\r
- //evil comparison of death!\r
- return (prim.Properties != null && prim.ParentID == 0 && prim.Properties.Name != null) &&\r
- (prim.Properties.Name.ToLower().Contains(query) ||\r
- prim.Properties.Description.ToLower().Contains(query));\r
- }));\r
-\r
- lock (listItems)\r
+ List<ListViewItem> toRemove = new List<ListViewItem>();\r
+ foreach (ListViewItem item in lstPrims.Items)\r
{\r
- foreach (Primitive prim in results)\r
+ if (!item.Text.ToLower().Contains(txtSearch.Text.ToLower()))\r
{\r
- ObjectsListItem item = new ObjectsListItem(prim, client, lbxPrims);\r
- listItems.Add(prim.LocalID, item);\r
- lbxPrims.Items.Add(item);\r
+ toRemove.Add(item);\r
}\r
}\r
+ foreach (ListViewItem item in toRemove)\r
+ {\r
+ lstPrims.Items.Remove(item);\r
+ }\r
+ AddAllObjects();\r
\r
- lbxPrims.EndUpdate();\r
- }\r
-\r
- private void timer1_Tick(object sender, EventArgs e)\r
- {\r
- timer1.Enabled = false;\r
-\r
- lblStatus.Visible = false;\r
- lbxPrims.EndUpdate();\r
- lbxPrims.Visible = true;\r
- txtSearch.Enabled = true;\r
}\r
\r
private void btnClear_Click(object sender, EventArgs e)\r
{\r
txtSearch.Clear();\r
txtSearch.Select();\r
+ ApplySearch();\r
}\r
\r
private void btnClose_Click(object sender, EventArgs e)\r
\r
private void btnRefresh_Click(object sender, EventArgs e)\r
{\r
+ lstPrims.Items.Clear();\r
AddAllObjects();\r
}\r
\r
+ private void lstPrims_SelectedIndexChanged(object sender, EventArgs e)\r
+ {\r
+ if (lstPrims.SelectedItems.Count == 1)\r
+ {\r
+ gbxInworld.Enabled = true;\r
+ currentPrim = lstPrims.SelectedItems[0].Tag as Primitive;\r
+ }\r
+ else\r
+ {\r
+ gbxInworld.Enabled = false;\r
+ }\r
+\r
+ }\r
+ }\r
+\r
+ public class ObjectSorter : IComparer\r
+ {\r
+ private AgentManager me;\r
+\r
+ public ObjectSorter(AgentManager me)\r
+ {\r
+ this.me = me;\r
+ }\r
+\r
+ //this routine should return -1 if xy and 0 if x==y.\r
+ // for our sample we'll just use string comparison\r
+ public int Compare(object x, object y)\r
+ {\r
+\r
+ ListViewItem item1 = (ListViewItem)x;\r
+ ListViewItem item2 = (ListViewItem)y;\r
+ float dist1 = Vector3.Distance(me.SimPosition, ((Primitive)item1.Tag).Position);\r
+ float dist2 = Vector3.Distance(me.SimPosition, ((Primitive)item2.Tag).Position);\r
+\r
+ if (dist1 == dist2)\r
+ {\r
+ return String.Compare(item1.Text, item2.Text);\r
+ }\r
+ else\r
+ {\r
+ if (dist1 < dist2)\r
+ {\r
+ return -1;\r
+ }\r
+ return 1;\r
+ }\r
+ }\r
}\r
}
\ No newline at end of file
<resheader name="writer">\r
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
</resheader>\r
- <metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
- <value>17, 17</value>\r
- </metadata>\r
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />\r
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
<value>\r
}\r
\r
/// <summary>\r
- /// Looks up a localized string similar to Radegast 1.0.\r
+ /// Looks up a localized string similar to Radegast 1.1.\r
/// </summary>\r
public static string RadegastTitle {\r
get {\r
<value>..\Resources\arrow-forward_16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
</data>\r
<data name="RadegastTitle" xml:space="preserve">\r
- <value>Radegast 1.0</value>\r
+ <value>Radegast 1.1</value>\r
</data>\r
<data name="lsl_scripts_16" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
<value>..\Resources\lsl_scripts_16.PNG;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
<Compile Include="Core\ListItems\FriendsListItem.cs" />\r
<Compile Include="Core\ImageCache.cs" />\r
<Compile Include="Core\ImageHelper.cs" />\r
- <Compile Include="Core\ListItems\ObjectsListItem.cs" />\r
<Compile Include="Core\ListItems\RegionSearchResultItem.cs" />\r
<Compile Include="Core\PrimDeserializer.cs" />\r
<Compile Include="Core\PrimSerializer.cs" />\r