OSDN Git Service

More work on groups
authorLatif Khalifa <latifer@streamgrid.net>
Wed, 1 Jul 2009 13:11:00 +0000 (13:11 +0000)
committerLatif Khalifa <latifer@streamgrid.net>
Wed, 1 Jul 2009 13:11:00 +0000 (13:11 +0000)
git-svn-id: https://radegast.googlecode.com/svn/trunk@85 f7a694da-4d33-11de-9ad6-1127a62b9fcd

12 files changed:
Radegast/Core/RadegastInstance.cs
Radegast/GUI/Consoles/ChatConsole.cs
Radegast/GUI/Consoles/GroupDetails.Designer.cs
Radegast/GUI/Consoles/GroupDetails.cs
Radegast/GUI/Consoles/TabsConsole.cs
Radegast/GUI/Dialogs/GroupsDialog.cs
Radegast/GUI/Dialogs/MainForm.Designer.cs
Radegast/GUI/Dialogs/MainForm.cs
Radegast/GUI/Dialogs/MainForm.resx
Radegast/GUI/Dialogs/Objects.cs
Radegast/GUI/Dialogs/Pay.cs
Radegast/Radegast.csproj.user

index cedb1a1..b6e92be 100644 (file)
@@ -87,11 +87,13 @@ namespace Radegast
         private bool monoRuntime;\r
         public bool MonoRuntime { get { return monoRuntime; } }\r
 \r
-        public Dictionary<UUID, Group> groups;\r
-        public Dictionary<UUID, string> nameCache = new Dictionary<UUID,string>();\r
+        private Dictionary<UUID, Group> groups;\r
+        public Dictionary<UUID, Group> Groups { get { return groups; } }\r
+\r
+        public delegate void AvatarNameCallback(UUID agentID, string agentName);\r
+        public event AvatarNameCallback OnAvatarName;\r
 \r
-        public delegate void OnAvatarNameCallBack(UUID agentID, string agentName);\r
-        public event OnAvatarNameCallBack OnAvatarName;\r
+        public Dictionary<UUID, string> nameCache = new Dictionary<UUID,string>();\r
 \r
         public readonly bool advancedDebugging = false;\r
 \r
@@ -140,7 +142,6 @@ namespace Radegast
             client.Groups.OnGroupLeft += new GroupManager.GroupLeftCallback(Groups_OnGroupLeft);\r
             client.Groups.OnGroupDropped += new GroupManager.GroupDroppedCallback(Groups_OnGroupDropped);\r
             client.Groups.OnGroupJoined += new GroupManager.GroupJoinedCallback(Groups_OnGroupJoined);\r
-            client.Groups.OnGroupProfile += new GroupManager.GroupProfileCallback(Groups_OnGroupProfile);\r
             client.Avatars.OnAvatarNames += new AvatarManager.AvatarNamesCallback(Avatars_OnAvatarNames);\r
             client.Network.OnLogin += new NetworkManager.LoginCallback(Network_OnLogin);\r
             client.Network.OnDisconnected += new NetworkManager.DisconnectedCallback(Network_OnDisconnected);\r
@@ -154,7 +155,6 @@ namespace Radegast
                 client.Groups.OnGroupLeft -= new GroupManager.GroupLeftCallback(Groups_OnGroupLeft);\r
                 client.Groups.OnGroupDropped -= new GroupManager.GroupDroppedCallback(Groups_OnGroupDropped);\r
                 client.Groups.OnGroupJoined -= new GroupManager.GroupJoinedCallback(Groups_OnGroupJoined);\r
-                client.Groups.OnGroupProfile -= new GroupManager.GroupProfileCallback(Groups_OnGroupProfile);\r
                 client.Avatars.OnAvatarNames -= new AvatarManager.AvatarNamesCallback(Avatars_OnAvatarNames);\r
                 client.Network.OnLogin -= new NetworkManager.LoginCallback(Network_OnLogin);\r
                 client.Network.OnDisconnected -= new NetworkManager.DisconnectedCallback(Network_OnDisconnected);\r
@@ -186,48 +186,63 @@ namespace Radegast
 \r
         public string getAvatarName(UUID key)\r
         {\r
-            if (nameCache.ContainsKey(key))\r
+            lock (nameCache)\r
             {\r
-                return nameCache[key];\r
+                if (nameCache.ContainsKey(key))\r
+                {\r
+                    return nameCache[key];\r
+                }\r
+                else\r
+                {\r
+                    client.Avatars.RequestAvatarName(key);\r
+                    return "Loading...";\r
+                }\r
             }\r
-            else\r
+        }\r
+\r
+        public void getAvatarNames(List<UUID> keys)\r
+        {\r
+            lock (nameCache)\r
             {\r
-                client.Avatars.RequestAvatarName(key);\r
-                return "Loading...";\r
+                List<UUID> newNames = new List<UUID>();\r
+                foreach (UUID key in keys)\r
+                {\r
+                    if (!nameCache.ContainsKey(key))\r
+                    {\r
+                        newNames.Add(key);\r
+                    }\r
+                }\r
+                if (newNames.Count > 0)\r
+                {\r
+                    client.Avatars.RequestAvatarNames(newNames);\r
+                }\r
             }\r
         }\r
 \r
-        void Groups_OnGroupProfile(Group group)\r
+        public bool haveAvatarName(UUID key)\r
         {\r
-            if (groups.ContainsKey(group.ID))\r
+            lock (nameCache)\r
             {\r
-                groups[group.ID] = group;\r
+                if (nameCache.ContainsKey(key))\r
+                    return true;\r
+                else\r
+                    return false;\r
             }\r
         }\r
 \r
         void Groups_OnGroupJoined(UUID groupID, bool success)\r
         {\r
-            if (success && !groups.ContainsKey(groupID))\r
-            {\r
-                groups.Add(groupID, new Group());\r
-                client.Groups.RequestGroupProfile(groupID);\r
-            }\r
+            client.Groups.RequestCurrentGroups();\r
         }\r
 \r
         void Groups_OnGroupLeft(UUID groupID, bool success)\r
         {\r
-            if (groups.ContainsKey(groupID))\r
-            {\r
-                groups.Remove(groupID);\r
-            }\r
+            client.Groups.RequestCurrentGroups();\r
         }\r
 \r
         void Groups_OnGroupDropped(UUID groupID)\r
         {\r
-            if (groups.ContainsKey(groupID))\r
-            {\r
-                groups.Remove(groupID);\r
-            }\r
+            client.Groups.RequestCurrentGroups();\r
         }\r
 \r
         void Network_OnDisconnected(NetworkManager.DisconnectType reason, string message)\r
index 1f73a39..d866e97 100644 (file)
@@ -234,7 +234,7 @@ namespace Radegast
             if (e.IM.Dialog == InstantMessageDialog.MessageFromAgent \r
                 && Alice.isAcceptingUserInput\r
                 && instance.Config.CurrentConfig.UseAlice\r
-                && !instance.groups.ContainsKey(e.IM.IMSessionID)\r
+                && !instance.Groups.ContainsKey(e.IM.IMSessionID)\r
                 && e.IM.BinaryBucket.Length < 2\r
                 && e.IM.FromAgentName != "Second Life") \r
             {\r
index deff127..09e7b25 100644 (file)
@@ -68,7 +68,7 @@ namespace Radegast
             this.tbxCharter = new System.Windows.Forms.TextBox();\r
             this.lblCharter = new System.Windows.Forms.Label();\r
             this.gbPreferences = new System.Windows.Forms.GroupBox();\r
-            this.cbxShowGroupInList = new System.Windows.Forms.CheckBox();\r
+            this.cbxListInProfile = new System.Windows.Forms.CheckBox();\r
             this.cbxReceiveNotices = new System.Windows.Forms.CheckBox();\r
             this.cbxActiveTitle = new System.Windows.Forms.ComboBox();\r
             this.lblActiveTitle = new System.Windows.Forms.Label();\r
@@ -193,7 +193,7 @@ namespace Radegast
             // \r
             // gbPreferences\r
             // \r
-            this.gbPreferences.Controls.Add(this.cbxShowGroupInList);\r
+            this.gbPreferences.Controls.Add(this.cbxListInProfile);\r
             this.gbPreferences.Controls.Add(this.cbxReceiveNotices);\r
             this.gbPreferences.Controls.Add(this.cbxActiveTitle);\r
             this.gbPreferences.Controls.Add(this.lblActiveTitle);\r
@@ -210,15 +210,15 @@ namespace Radegast
             this.gbPreferences.TabStop = false;\r
             this.gbPreferences.Text = "Group Preferences";\r
             // \r
-            // cbxShowGroupInList\r
+            // cbxListInProfile\r
             // \r
-            this.cbxShowGroupInList.AutoSize = true;\r
-            this.cbxShowGroupInList.Location = new System.Drawing.Point(211, 82);\r
-            this.cbxShowGroupInList.Name = "cbxShowGroupInList";\r
-            this.cbxShowGroupInList.Size = new System.Drawing.Size(130, 17);\r
-            this.cbxShowGroupInList.TabIndex = 8;\r
-            this.cbxShowGroupInList.Text = "List group in my profile";\r
-            this.cbxShowGroupInList.UseVisualStyleBackColor = true;\r
+            this.cbxListInProfile.AutoSize = true;\r
+            this.cbxListInProfile.Location = new System.Drawing.Point(211, 82);\r
+            this.cbxListInProfile.Name = "cbxListInProfile";\r
+            this.cbxListInProfile.Size = new System.Drawing.Size(130, 17);\r
+            this.cbxListInProfile.TabIndex = 8;\r
+            this.cbxListInProfile.Text = "List group in my profile";\r
+            this.cbxListInProfile.UseVisualStyleBackColor = true;\r
             // \r
             // cbxReceiveNotices\r
             // \r
@@ -445,7 +445,7 @@ namespace Radegast
         private System.Windows.Forms.ComboBox cbxActiveTitle;\r
         private System.Windows.Forms.Label lblActiveTitle;\r
         private System.Windows.Forms.NumericUpDown nudEnrollmentFee;\r
-        private System.Windows.Forms.CheckBox cbxShowGroupInList;\r
+        private System.Windows.Forms.CheckBox cbxListInProfile;\r
         private System.Windows.Forms.CheckBox cbxReceiveNotices;\r
         private System.Windows.Forms.Label lblCharter;\r
         private System.Windows.Forms.ListView lvwGeneralMembers;\r
index e0d1521..a181b18 100644 (file)
@@ -43,9 +43,11 @@ namespace Radegast
 {\r
     public partial class GroupDetails : UserControl\r
     {\r
-        private Group group;\r
         private RadegastInstance instance;\r
         private GridClient client { get { return instance.Client; } }\r
+        private Group group;\r
+        private Dictionary<UUID, GroupTitle> titles;\r
+        private Dictionary<UUID, Group> myGroups { get { return instance.Groups; } }\r
 \r
         private UUID groupTitlesRequest;\r
         private UUID groupMembersRequest;\r
@@ -72,8 +74,10 @@ namespace Radegast
             client.Groups.OnGroupTitles += new GroupManager.GroupTitlesCallback(Groups_OnGroupTitles);\r
             client.Groups.OnGroupMembers += new GroupManager.GroupMembersCallback(Groups_OnGroupMembers);\r
             client.Groups.OnGroupProfile += new GroupManager.GroupProfileCallback(Groups_OnGroupProfile);\r
+            client.Groups.OnCurrentGroups += new GroupManager.CurrentGroupsCallback(Groups_OnCurrentGroups);\r
             client.Avatars.OnAvatarNames += new AvatarManager.AvatarNamesCallback(Avatars_OnAvatarNames);\r
 \r
+            RefreshControlsAvailability();\r
             RefreshGroupInfo();\r
         }\r
 \r
@@ -82,21 +86,16 @@ namespace Radegast
             client.Groups.OnGroupTitles -= new GroupManager.GroupTitlesCallback(Groups_OnGroupTitles);\r
             client.Groups.OnGroupMembers -= new GroupManager.GroupMembersCallback(Groups_OnGroupMembers);\r
             client.Groups.OnGroupProfile -= new GroupManager.GroupProfileCallback(Groups_OnGroupProfile);\r
+            client.Groups.OnCurrentGroups -= new GroupManager.CurrentGroupsCallback(Groups_OnCurrentGroups);\r
             client.Avatars.OnAvatarNames -= new AvatarManager.AvatarNamesCallback(Avatars_OnAvatarNames);\r
         }\r
 \r
-        private void RefreshGroupInfo()\r
+        #region Network callbacks\r
+        void Groups_OnCurrentGroups(Dictionary<UUID, Group> groups)\r
         {\r
-            lvwGeneralMembers.Items.Clear();\r
-            cbxActiveTitle.Items.Clear();\r
-\r
-            // Request group info\r
-            client.Groups.RequestGroupProfile(group.ID);\r
-            groupTitlesRequest = client.Groups.RequestGroupTitles(group.ID);\r
-            groupMembersRequest = client.Groups.RequestGroupMembers(group.ID);\r
+            BeginInvoke(new MethodInvoker(RefreshControlsAvailability));\r
         }\r
 \r
-        #region Network callbacks\r
         void Groups_OnGroupProfile(Group group)\r
         {\r
             if (group.ID != this.group.ID) return;\r
@@ -115,6 +114,36 @@ namespace Radegast
 \r
             tbxCharter.Text = group.Charter;\r
             lblFounded.Text = "Founded by: " + instance.getAvatarName(group.FounderID);\r
+            cbxShowInSearch.Checked = group.ShowInList;\r
+            cbxOpenEnrollment.Checked = group.OpenEnrollment;\r
+\r
+            if (group.MembershipFee > 0)\r
+            {\r
+                cbxEnrollmentFee.Checked = true;\r
+                nudEnrollmentFee.Value = group.MembershipFee;\r
+            }\r
+            else\r
+            {\r
+                cbxEnrollmentFee.Checked = false;\r
+                nudEnrollmentFee.Value = 0;\r
+            }\r
+\r
+            if (group.MaturePublish)\r
+            {\r
+                cbxMaturity.SelectedIndex = 1;\r
+            }\r
+            else\r
+            {\r
+                cbxMaturity.SelectedIndex = 0;\r
+            }\r
+\r
+            if (myGroups.ContainsKey(group.ID))\r
+            {\r
+                cbxReceiveNotices.Checked = myGroups[group.ID].AcceptNotices;\r
+                cbxListInProfile.Checked = myGroups[group.ID].ListInProfile;\r
+                cbxReceiveNotices.CheckedChanged += new EventHandler(cbxListInProfile_CheckedChanged);\r
+                cbxListInProfile.CheckedChanged += new EventHandler(cbxListInProfile_CheckedChanged);\r
+            }\r
         }\r
 \r
         void Avatars_OnAvatarNames(Dictionary<UUID, string> names)\r
@@ -152,7 +181,29 @@ namespace Radegast
         void Groups_OnGroupTitles(UUID requestID, UUID groupID, Dictionary<UUID, GroupTitle> titles)\r
         {\r
             if (groupTitlesRequest != requestID) return;\r
-            Dictionary<UUID, GroupTitle> t = titles;\r
+\r
+            if (InvokeRequired)\r
+            {\r
+                BeginInvoke(new MethodInvoker(delegate()\r
+                    {\r
+                        Groups_OnGroupTitles(requestID, groupID, titles);\r
+                    }\r
+                ));\r
+                return;\r
+            }\r
+\r
+            this.titles = titles;\r
+\r
+            foreach (GroupTitle title in titles.Values)\r
+            {\r
+                cbxActiveTitle.Items.Add(title);\r
+                if (title.Selected)\r
+                {\r
+                    cbxActiveTitle.SelectedItem = title;\r
+                }\r
+            }\r
+\r
+            cbxActiveTitle.SelectedIndexChanged += cbxActiveTitle_SelectedIndexChanged;\r
         }\r
 \r
         void Groups_OnGroupMembers(UUID requestID, UUID groupID, Dictionary<UUID, GroupMember> members)\r
@@ -173,25 +224,26 @@ namespace Radegast
             List<ListViewItem> newItems = new List<ListViewItem>();\r
             List<UUID> unknownNames = new List<UUID>();\r
 \r
-            foreach (GroupMember member in members.Values)\r
+            foreach (GroupMember baseMember in members.Values)\r
             {\r
+                EnhancedGroupMember member = new EnhancedGroupMember(baseMember);\r
                 string name;\r
                 \r
-                if (instance.haveAvatarName(member.ID))\r
+                if (instance.haveAvatarName(member.Base.ID))\r
                 {\r
-                    name = instance.getAvatarName(member.ID);\r
+                    name = instance.getAvatarName(member.Base.ID);\r
                 }\r
                 else\r
                 {\r
                     name = "Loading...";\r
-                    unknownNames.Add(member.ID);\r
+                    unknownNames.Add(member.Base.ID);\r
                 }\r
 \r
                 ListViewItem item = new ListViewItem(name);\r
                 item.Tag = member;\r
-                item.Name = member.ID.ToString();\r
-                item.SubItems.Add(new ListViewItem.ListViewSubItem(item, member.Title));\r
-                item.SubItems.Add(new ListViewItem.ListViewSubItem(item, member.OnlineStatus));\r
+                item.Name = member.Base.ID.ToString();\r
+                item.SubItems.Add(new ListViewItem.ListViewSubItem(item, member.Base.Title));\r
+                item.SubItems.Add(new ListViewItem.ListViewSubItem(item, member.Base.OnlineStatus));\r
 \r
                 newItems.Add(item);\r
             }\r
@@ -207,10 +259,78 @@ namespace Radegast
         }\r
         #endregion\r
 \r
+        #region Privatate methods\r
+        private bool HasPower(GroupPowers power)\r
+        {\r
+            if (!instance.Groups.ContainsKey(group.ID))\r
+                return false;\r
+\r
+            return (instance.Groups[group.ID].Powers & power) != 0;\r
+        }\r
+\r
+        private void RefreshControlsAvailability()\r
+        {\r
+            if (!HasPower(GroupPowers.ChangeOptions))\r
+            {\r
+                nudEnrollmentFee.ReadOnly = true;\r
+                cbxEnrollmentFee.Enabled = false;\r
+                cbxOpenEnrollment.Enabled = false;\r
+            }\r
+\r
+            if (!HasPower(GroupPowers.ChangeIdentity))\r
+            {\r
+                tbxCharter.ReadOnly = true;\r
+                cbxShowInSearch.Enabled = false;\r
+                cbxMaturity.Enabled = false;\r
+            }\r
+\r
+            if (!myGroups.ContainsKey(group.ID))\r
+            {\r
+                cbxReceiveNotices.Enabled = false;\r
+                cbxListInProfile.Enabled = false;\r
+            }\r
+        }\r
+        \r
+        private void RefreshGroupInfo()\r
+        {\r
+            lvwGeneralMembers.Items.Clear();\r
+            cbxActiveTitle.SelectedIndexChanged -= cbxActiveTitle_SelectedIndexChanged;\r
+            cbxReceiveNotices.CheckedChanged -= new EventHandler(cbxListInProfile_CheckedChanged);\r
+            cbxListInProfile.CheckedChanged -= new EventHandler(cbxListInProfile_CheckedChanged);\r
+\r
+            cbxActiveTitle.Items.Clear();\r
+\r
+            // Request group info\r
+            client.Groups.RequestGroupProfile(group.ID);\r
+            groupTitlesRequest = client.Groups.RequestGroupTitles(group.ID);\r
+            groupMembersRequest = client.Groups.RequestGroupMembers(group.ID);\r
+        }\r
+        #endregion\r
+\r
+        #region Controls change handlers\r
+        void cbxListInProfile_CheckedChanged(object sender, EventArgs e)\r
+        {\r
+            if (myGroups.ContainsKey(group.ID))\r
+            {\r
+                Group g = myGroups[group.ID];\r
+                // g.AcceptNotices = cbxReceiveNotices.Checked;\r
+                // g.ListInProfile = cbxListInProfile.Checked;\r
+                client.Groups.SetGroupAcceptNotices(g.ID, cbxReceiveNotices.Checked, cbxListInProfile.Checked);\r
+                client.Groups.RequestCurrentGroups();\r
+            }\r
+        }\r
+\r
+        private void cbxActiveTitle_SelectedIndexChanged(object sender, EventArgs e)\r
+        {\r
+            GroupTitle title = (GroupTitle)cbxActiveTitle.SelectedItem;\r
+            client.Groups.ActivateTitle(title.GroupID, title.RoleID);\r
+        }\r
+\r
         private void btnRefresh_Click(object sender, EventArgs e)\r
         {\r
             RefreshGroupInfo();\r
         }\r
+        #endregion\r
 \r
         void lvwGeneralMembers_ColumnClick(object sender, ColumnClickEventArgs e)\r
         {\r
@@ -239,6 +359,26 @@ namespace Radegast
         }\r
     }\r
 \r
+    public class EnhancedGroupMember\r
+    {\r
+        public GroupMember Base;\r
+        public DateTime LastOnline;\r
+\r
+        public EnhancedGroupMember(GroupMember baseMember)\r
+        {\r
+            Base = baseMember;\r
+\r
+            if (baseMember.OnlineStatus == "Online")\r
+            {\r
+                LastOnline = DateTime.Now;\r
+            }\r
+            else\r
+            {\r
+                LastOnline = Convert.ToDateTime(baseMember.OnlineStatus, Utils.EnUsCulture);\r
+            }\r
+        }\r
+    }\r
+\r
     public class GroupMemberSorter : IComparer\r
     {\r
         public enum SortByColumn\r
@@ -257,16 +397,12 @@ namespace Radegast
         public SortOrder CurrentOrder = SortOrder.Ascending;\r
         public SortByColumn SortBy = SortByColumn.Name;\r
 \r
-        public GroupMemberSorter()\r
-        {\r
-        }\r
-\r
         public int Compare(object x, object y)\r
         {\r
             ListViewItem item1 = (ListViewItem)x;\r
             ListViewItem item2 = (ListViewItem)y;\r
-            GroupMember member1 = (GroupMember)item1.Tag;\r
-            GroupMember member2 = (GroupMember)item2.Tag;\r
+            EnhancedGroupMember member1 = (EnhancedGroupMember)item1.Tag;\r
+            EnhancedGroupMember member2 = (EnhancedGroupMember)item2.Tag;\r
 \r
             switch (SortBy)\r
             {\r
@@ -278,35 +414,15 @@ namespace Radegast
 \r
                 case SortByColumn.Title:\r
                     if (CurrentOrder == SortOrder.Ascending)\r
-                        return string.Compare(member1.Title, member2.Title);\r
+                        return string.Compare(member1.Base.Title, member2.Base.Title);\r
                     else\r
-                        return string.Compare(member2.Title, member1.Title);\r
+                        return string.Compare(member2.Base.Title, member1.Base.Title);\r
 \r
                 case SortByColumn.LastOnline:\r
-                    DateTime t1;\r
-                    if (member1.OnlineStatus == "Online")\r
-                    {\r
-                        t1 = DateTime.Now;\r
-                    }\r
-                    else\r
-                    {\r
-                        t1 = Convert.ToDateTime(member1.OnlineStatus, Utils.EnUsCulture);\r
-                    }\r
-\r
-                    DateTime t2;\r
-                    if (member2.OnlineStatus == "Online")\r
-                    {\r
-                        t2 = DateTime.Now;\r
-                    }\r
-                    else\r
-                    {\r
-                        t2 = Convert.ToDateTime(member2.OnlineStatus, Utils.EnUsCulture);\r
-                    }\r
-\r
                     if (CurrentOrder == SortOrder.Ascending)\r
-                        return DateTime.Compare(t1, t2);\r
+                        return DateTime.Compare(member1.LastOnline, member2.LastOnline);\r
                     else\r
-                        return DateTime.Compare(t2, t1);\r
+                        return DateTime.Compare(member2.LastOnline, member1.LastOnline);\r
             }\r
 \r
             return 0;\r
index 7b29282..99cf012 100644 (file)
@@ -197,7 +197,7 @@ namespace Radegast
             switch (e.IM.Dialog)\r
             {\r
                 case InstantMessageDialog.SessionSend:\r
-                    if (instance.groups.ContainsKey(e.IM.IMSessionID))\r
+                    if (instance.Groups.ContainsKey(e.IM.IMSessionID))\r
                     {\r
                         HandleGroupIM(e);\r
                     }\r
@@ -212,7 +212,7 @@ namespace Radegast
                     {\r
                         HandleIMFromObject(e);\r
                     }\r
-                    else if (e.IM.GroupIM || instance.groups.ContainsKey(e.IM.IMSessionID))\r
+                    else if (e.IM.GroupIM || instance.Groups.ContainsKey(e.IM.IMSessionID))\r
                     {\r
                         HandleGroupIM(e);\r
                     }\r
index 690f9fb..5d227d1 100644 (file)
@@ -43,20 +43,15 @@ namespace Radegast
     {\r
         GridClient client;\r
         RadegastInstance instance;\r
-        Dictionary<UUID, Group> groups = new Dictionary<UUID, Group>();\r
-\r
\r
         public GroupsDialog(RadegastInstance instance)\r
         {\r
             InitializeComponent();\r
             Disposed += new EventHandler(GroupsDialog_Disposed);\r
             this.client = instance.Client;\r
             this.instance = instance;\r
-\r
-            // Callbacks\r
             client.Groups.OnCurrentGroups += new GroupManager.CurrentGroupsCallback(Groups_OnCurrentGroups);\r
-\r
-            client.Groups.RequestCurrentGroups();\r
-\r
+            UpdateDisplay();\r
         }\r
 \r
         void GroupsDialog_Disposed(object sender, EventArgs e)\r
@@ -64,6 +59,11 @@ namespace Radegast
             client.Groups.OnCurrentGroups -= new GroupManager.CurrentGroupsCallback(Groups_OnCurrentGroups);\r
         }\r
 \r
+        void Groups_OnCurrentGroups(Dictionary<UUID, Group> groups)\r
+        {\r
+            BeginInvoke(new MethodInvoker(UpdateDisplay));\r
+        }\r
+\r
         public void UpdateDisplay()\r
         {\r
             Group none = new Group();\r
@@ -73,7 +73,7 @@ namespace Radegast
             listBox1.Items.Clear();\r
             listBox1.Items.Add(none);\r
 \r
-            foreach (Group g in groups.Values) {\r
+            foreach (Group g in instance.Groups.Values) {\r
                 listBox1.Items.Add(g);\r
             }\r
 \r
@@ -87,12 +87,6 @@ namespace Radegast
             }\r
         }\r
 \r
-        void Groups_OnCurrentGroups(Dictionary<UUID, Group> groups)\r
-        {\r
-            this.groups = groups;\r
-            this.Invoke(new MethodInvoker(UpdateDisplay));\r
-        }\r
-\r
         private void cancelBtn_Click(object sender, EventArgs e)\r
         {\r
             this.Close();\r
@@ -112,7 +106,6 @@ namespace Radegast
             if (g.ID == UUID.Zero) return;\r
 \r
             client.Groups.LeaveGroup(g.ID);\r
-            groups.Remove(g.ID);\r
             listBox1.Items.Remove(g);\r
         }\r
 \r
index 41cd385..ac4db53 100644 (file)
@@ -110,6 +110,7 @@ namespace Radegast
             this.tlblParcel = new System.Windows.Forms.ToolStripStatusLabel();\r
             this.toolStripContainer1 = new System.Windows.Forms.ToolStripContainer();\r
             this.pnlDialog = new System.Windows.Forms.Panel();\r
+            this.tbtnGroups = new System.Windows.Forms.ToolStripButton();\r
             this.toolStrip1.SuspendLayout();\r
             this.statusStrip1.SuspendLayout();\r
             this.toolStripContainer1.TopToolStripPanel.SuspendLayout();\r
@@ -128,7 +129,8 @@ namespace Radegast
             this.tbtnControl,\r
             this.toolStripSeparator2,\r
             this.tbnTeleprotMulti,\r
-            this.tbnObjects});\r
+            this.tbnObjects,\r
+            this.tbtnGroups});\r
             this.toolStrip1.Location = new System.Drawing.Point(0, 0);\r
             this.toolStrip1.Name = "toolStrip1";\r
             this.toolStrip1.Size = new System.Drawing.Size(738, 25);\r
@@ -567,6 +569,17 @@ namespace Radegast
             this.pnlDialog.Size = new System.Drawing.Size(198, 151);\r
             this.pnlDialog.TabIndex = 11;\r
             // \r
+            // tbtnGroups\r
+            // \r
+            this.tbtnGroups.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;\r
+            this.tbtnGroups.Enabled = false;\r
+            this.tbtnGroups.Image = ((System.Drawing.Image)(resources.GetObject("tbtnGroups.Image")));\r
+            this.tbtnGroups.ImageTransparentColor = System.Drawing.Color.Magenta;\r
+            this.tbtnGroups.Name = "tbtnGroups";\r
+            this.tbtnGroups.Size = new System.Drawing.Size(49, 22);\r
+            this.tbtnGroups.Text = "Groups";\r
+            this.tbtnGroups.Click += new System.EventHandler(this.tbtnGroups_Click);\r
+            // \r
             // frmMain\r
             // \r
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r
@@ -644,6 +657,7 @@ namespace Radegast
         private System.Windows.Forms.ToolStripStatusLabel icoNoScript;\r
         private System.Windows.Forms.ToolStripStatusLabel icoNoPush;\r
         private System.Windows.Forms.ToolStripStatusLabel icoNoVoice;\r
+        private System.Windows.Forms.ToolStripButton tbtnGroups;\r
     }\r
 }\r
 \r
index c4997fa..972f355 100644 (file)
@@ -169,14 +169,14 @@ namespace Radegast
         {\r
             if (e.Status != LoginStatus.Success) return;\r
 \r
-            tbnObjects.Enabled = tbtnStatus.Enabled = tbtnControl.Enabled = tbnTeleprotMulti.Enabled = tmnuImport.Enabled = true;\r
+            tbtnGroups.Enabled = tbnObjects.Enabled = tbtnStatus.Enabled = tbtnControl.Enabled = tbnTeleprotMulti.Enabled = tmnuImport.Enabled = true;\r
             statusTimer.Start();\r
             RefreshWindowTitle();\r
         }\r
 \r
         private void netcom_ClientLoggedOut(object sender, EventArgs e)\r
         {\r
-            tbnObjects.Enabled = tbtnStatus.Enabled = tbtnControl.Enabled = tbnTeleprotMulti.Enabled = tmnuImport.Enabled = false;\r
+            tbtnGroups.Enabled = tbnObjects.Enabled = tbtnStatus.Enabled = tbtnControl.Enabled = tbnTeleprotMulti.Enabled = tmnuImport.Enabled = false;\r
 \r
             statusTimer.Stop();\r
 \r
@@ -707,6 +707,11 @@ namespace Radegast
                 worldMap.Show();\r
             }\r
         }\r
+\r
+        private void tbtnGroups_Click(object sender, EventArgs e)\r
+        {\r
+            (new GroupsDialog(instance)).Show();\r
+        }\r
         #endregion\r
     }\r
 }
\ No newline at end of file
index 65c279a..610d44e 100644 (file)
         s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC\r
 </value>\r
   </data>\r
+  <data name="tbtnGroups.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+    <value>\r
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL\r
+        U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI\r
+        VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ\r
+        QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4\r
+        /g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9\r
+        cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j\r
+        3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR\r
+        dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb\r
+        NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE\r
+        s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC\r
+</value>\r
+  </data>\r
   <metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
     <value>116, 17</value>\r
   </metadata>\r
index b38c24a..c6a3b5c 100644 (file)
@@ -72,7 +72,7 @@ namespace Radegast
             client.Objects.OnObjectKilled += new ObjectManager.KillObjectCallback(Objects_OnObjectKilled);\r
             client.Objects.OnObjectPropertiesFamily += new ObjectManager.ObjectPropertiesFamilyCallback(Objects_OnObjectPropertiesFamily);\r
             client.Network.OnCurrentSimChanged += new NetworkManager.CurrentSimChangedCallback(Network_OnCurrentSimChanged);\r
-            instance.OnAvatarName += new RadegastInstance.OnAvatarNameCallBack(instance_OnAvatarName);\r
+            instance.OnAvatarName += new RadegastInstance.AvatarNameCallback(instance_OnAvatarName);\r
         }\r
 \r
         void frmObjects_Disposed(object sender, EventArgs e)\r
@@ -84,7 +84,7 @@ namespace Radegast
             client.Objects.OnObjectPropertiesFamily -= new ObjectManager.ObjectPropertiesFamilyCallback(Objects_OnObjectPropertiesFamily);\r
             client.Network.OnCurrentSimChanged -= new NetworkManager.CurrentSimChangedCallback(Network_OnCurrentSimChanged);\r
 \r
-            instance.OnAvatarName -= new RadegastInstance.OnAvatarNameCallBack(instance_OnAvatarName);\r
+            instance.OnAvatarName -= new RadegastInstance.AvatarNameCallback(instance_OnAvatarName);\r
         }\r
 \r
         void propRequester_OnTick(int remaining)\r
index b51b18f..c60df60 100644 (file)
@@ -72,7 +72,7 @@ namespace Radegast
             // Callbacks\r
             client.Objects.OnPayPriceReply += new ObjectManager.PayPriceReply(Objects_OnPayPriceReply);\r
             client.Objects.OnObjectPropertiesFamily += new ObjectManager.ObjectPropertiesFamilyCallback(Objects_OnObjectPropertiesFamily);\r
-            instance.OnAvatarName += new RadegastInstance.OnAvatarNameCallBack(instance_OnAvatarName);\r
+            instance.OnAvatarName += new RadegastInstance.AvatarNameCallback(instance_OnAvatarName);\r
 \r
             if (isObject)\r
             {\r
@@ -92,7 +92,7 @@ namespace Radegast
         {\r
             client.Objects.OnPayPriceReply -= new ObjectManager.PayPriceReply(Objects_OnPayPriceReply);\r
             client.Objects.OnObjectPropertiesFamily -= new ObjectManager.ObjectPropertiesFamilyCallback(Objects_OnObjectPropertiesFamily);\r
-            instance.OnAvatarName -= new RadegastInstance.OnAvatarNameCallBack(instance_OnAvatarName);\r
+            instance.OnAvatarName -= new RadegastInstance.AvatarNameCallback(instance_OnAvatarName);\r
         }\r
 \r
         void frmPay_Click(object sender, EventArgs e)\r
index e50fd5e..dbf2dff 100644 (file)
@@ -11,5 +11,6 @@
     </BootstrapperUrlHistory>\r
     <FallbackCulture>en-US</FallbackCulture>\r
     <VerifyUploadedFiles>false</VerifyUploadedFiles>\r
+    <ProjectView>ShowAllFiles</ProjectView>\r
   </PropertyGroup>\r
 </Project>
\ No newline at end of file