OSDN Git Service

* Rewrote Tools -> Nearby objects (should be much faster and more stable)
authorLatif Khalifa <latifer@streamgrid.net>
Sun, 31 May 2009 14:09:45 +0000 (14:09 +0000)
committerLatif Khalifa <latifer@streamgrid.net>
Sun, 31 May 2009 14:09:45 +0000 (14:09 +0000)
* Added Movement -> Stand
* Added Movement -> Sit on ground
* Removed some legacy code on search for people page
* Fixed object touching

git-svn-id: https://radegast.googlecode.com/svn/trunk@8 f7a694da-4d33-11de-9ad6-1127a62b9fcd

15 files changed:
Radegast.sln
Radegast/Core/ListItems/ObjectsListItem.cs [deleted file]
Radegast/Core/RadegastInstance.cs
Radegast/GUI/Consoles/ChatConsole.cs
Radegast/GUI/Consoles/SearchConsole.Designer.cs
Radegast/GUI/Consoles/SearchConsole.cs
Radegast/GUI/Dialogs/MainForm.Designer.cs
Radegast/GUI/Dialogs/MainForm.cs
Radegast/GUI/Dialogs/Map.cs
Radegast/GUI/Dialogs/Objects.Designer.cs
Radegast/GUI/Dialogs/Objects.cs
Radegast/GUI/Dialogs/Objects.resx
Radegast/Properties/Resources.Designer.cs
Radegast/Properties/Resources.resx
Radegast/Radegast.csproj

index f62cc68..12c0c11 100644 (file)
@@ -5,13 +5,13 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Radegast", "Radegast\Radega
 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
@@ -39,38 +39,38 @@ Global
                {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
diff --git a/Radegast/Core/ListItems/ObjectsListItem.cs b/Radegast/Core/ListItems/ObjectsListItem.cs
deleted file mode 100644 (file)
index 37cf552..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-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
index 827f0b8..93d947d 100644 (file)
@@ -26,6 +26,9 @@ namespace Radegast
         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
@@ -52,7 +55,7 @@ namespace Radegast
             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
@@ -90,6 +93,9 @@ namespace Radegast
             {\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
index 02f4980..8eff002 100644 (file)
@@ -105,7 +105,7 @@ namespace Radegast
 \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
index b2d022d..44c4bd1 100644 (file)
@@ -39,7 +39,6 @@ namespace Radegast
             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
@@ -157,7 +156,6 @@ namespace Radegast
             // 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
@@ -175,17 +173,6 @@ namespace Radegast
             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
@@ -224,7 +211,6 @@ namespace Radegast
         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
index 0be1424..f01f0d2 100644 (file)
@@ -44,13 +44,12 @@ namespace Radegast
             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
@@ -84,152 +83,6 @@ namespace Radegast
             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
index 4730eb4..eb55790 100644 (file)
@@ -72,6 +72,8 @@ namespace Radegast
             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
@@ -208,7 +210,9 @@ namespace Radegast
             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
@@ -421,6 +425,20 @@ namespace Radegast
             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
@@ -487,6 +505,8 @@ namespace Radegast
         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
index db0d57f..d397802 100644 (file)
@@ -449,5 +449,15 @@ namespace Radegast
                 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
index bc090cf..7f2902f 100644 (file)
@@ -178,6 +178,8 @@ namespace Radegast
         #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
@@ -188,17 +190,14 @@ namespace Radegast
 \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
index 72b50c6..b217000 100644 (file)
@@ -28,40 +28,21 @@ namespace Radegast
         /// </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
@@ -110,29 +91,12 @@ namespace Radegast
             // \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
@@ -164,24 +128,55 @@ namespace Radegast
             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
@@ -190,16 +185,16 @@ namespace Radegast
 \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
index cf05a0d..da2cb0b 100644 (file)
@@ -1,9 +1,11 @@
 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
@@ -12,299 +14,267 @@ namespace Radegast
     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
@@ -314,8 +284,56 @@ namespace Radegast
 \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
index 7411718..a04a5dd 100644 (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
index 0a297e9..dec1027 100644 (file)
@@ -511,7 +511,7 @@ namespace Radegast.Properties {
         }\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
index d78cf49..fe455d1 100644 (file)
     <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
index 4ed630d..0426b95 100644 (file)
@@ -98,7 +98,6 @@
     <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