corrade-vassal – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 vero 1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Data;
5 using System.Drawing;
6 using System.Text;
7 using System.Windows.Forms;
8 using System.IO;
9 using OpenMetaverse;
10 using OpenMetaverse.Imaging;
11 using OpenMetaverse.Assets;
12  
13 namespace groupmanager
14 {
15 public partial class frmGroupInfo : Form
16 {
17 Group Group;
18 GridClient Client;
19 Group Profile = new Group();
20 Dictionary<UUID, GroupMember> Members = new Dictionary<UUID,GroupMember>();
21 Dictionary<UUID, GroupTitle> Titles = new Dictionary<UUID,GroupTitle>();
22 Dictionary<UUID, GroupMemberData> MemberData = new Dictionary<UUID, GroupMemberData>();
23 Dictionary<UUID, string> Names = new Dictionary<UUID, string>();
24 EventHandler<GroupProfileEventArgs> GroupProfileCallback;
25 EventHandler<GroupMembersReplyEventArgs> GroupMembersCallback;
26 EventHandler<GroupTitlesReplyEventArgs> GroupTitlesCallback;
27 EventHandler<UUIDNameReplyEventArgs> AvatarNamesCallback;
28  
29 public frmGroupInfo(Group group, GridClient client)
30 {
31 InitializeComponent();
32  
33 while (!IsHandleCreated)
34 {
35 // Force handle creation
36 // warning CS0219: The variable `temp' is assigned but its value is never used
37 IntPtr temp = Handle;
38 }
39  
40 GroupMembersCallback = new EventHandler<GroupMembersReplyEventArgs>(GroupMembersHandler);
41 GroupProfileCallback = new EventHandler<GroupProfileEventArgs>(GroupProfileHandler);
42 GroupTitlesCallback = new EventHandler<GroupTitlesReplyEventArgs>(GroupTitlesHandler);
43 AvatarNamesCallback = new EventHandler<UUIDNameReplyEventArgs>(AvatarNamesHandler);
44  
45 Group = group;
46 Client = client;
47  
48 // Register the callbacks for this form
49 Client.Groups.GroupProfile += GroupProfileCallback;
50 Client.Groups.GroupMembersReply += GroupMembersCallback;
51 Client.Groups.GroupTitlesReply += GroupTitlesCallback;
52 Client.Avatars.UUIDNameReply += AvatarNamesCallback;
53  
54 // Request the group information
55 Client.Groups.RequestGroupProfile(Group.ID);
56 Client.Groups.RequestGroupMembers(Group.ID);
57 Client.Groups.RequestGroupTitles(Group.ID);
58 }
59  
60 ~frmGroupInfo()
61 {
62 // Unregister the callbacks for this form
63 Client.Groups.GroupProfile -= GroupProfileCallback;
64 Client.Groups.GroupMembersReply -= GroupMembersCallback;
65 Client.Groups.GroupTitlesReply -= GroupTitlesCallback;
66 Client.Avatars.UUIDNameReply -= AvatarNamesCallback;
67 }
68  
69 private void GroupProfileHandler(object sender, GroupProfileEventArgs e)
70 {
71 Profile = e.Group;
72  
73 if (Group.InsigniaID != UUID.Zero)
74 Client.Assets.RequestImage(Group.InsigniaID, ImageType.Normal,
75 delegate(TextureRequestState state, AssetTexture assetTexture)
76 {
77 ManagedImage imgData;
78 Image bitmap;
79  
80 if (state != TextureRequestState.Timeout || state != TextureRequestState.NotFound)
81 {
82 OpenJPEG.DecodeToImage(assetTexture.AssetData, out imgData, out bitmap);
83 picInsignia.Image = bitmap;
84 UpdateInsigniaProgressText("Progress...");
85 }
86 if (state == TextureRequestState.Finished)
87 {
88 UpdateInsigniaProgressText("");
89 }
90 }, true);
91  
92 if (this.InvokeRequired)
93 this.BeginInvoke(new MethodInvoker(UpdateProfile));
94 }
95  
96 private void UpdateInsigniaProgressText(string resultText)
97 {
98 if (this.InvokeRequired)
99 {
100 this.BeginInvoke(new MethodInvoker(delegate()
101 {
102 UpdateInsigniaProgressText(resultText);
103 }));
104 }
105 else
106 labelInsigniaProgress.Text = resultText;
107 }
108  
109 private void UpdateProfile()
110 {
111 lblGroupName.Text = Profile.Name;
112 txtCharter.Text = Profile.Charter;
113 chkShow.Checked = Profile.ShowInList;
114 chkPublish.Checked = Profile.AllowPublish;
115 chkOpenEnrollment.Checked = Profile.OpenEnrollment;
116 chkFee.Checked = (Profile.MembershipFee != 0);
117 numFee.Value = Profile.MembershipFee;
118 chkMature.Checked = Profile.MaturePublish;
119  
120 Client.Avatars.RequestAvatarName(Profile.FounderID);
121 }
122  
123 private void AvatarNamesHandler(object sender, UUIDNameReplyEventArgs e)
124 {
125 lock (Names)
126 {
127 foreach (KeyValuePair<UUID, string> agent in e.Names)
128 {
129 Names[agent.Key] = agent.Value;
130 }
131 }
132  
133 UpdateNames();
134 }
135  
136 private void UpdateNames()
137 {
138 if (this.InvokeRequired)
139 {
140 Invoke(new MethodInvoker(UpdateNames));
141 }
142 else
143 {
144 lock (Names)
145 {
146 if (Profile.FounderID != UUID.Zero && Names.ContainsKey(Profile.FounderID))
147 {
148 lblFoundedBy.Text = "Founded by " + Names[Profile.FounderID];
149 }
150  
151 lock (MemberData)
152 {
153 foreach (KeyValuePair<UUID, string> name in Names)
154 {
155 if (!MemberData.ContainsKey(name.Key))
156 {
157 MemberData[name.Key] = new GroupMemberData();
158 }
159  
160 MemberData[name.Key].Name = name.Value;
161 }
162 }
163 }
164  
165 UpdateMemberList();
166 }
167 }
168  
169 private void UpdateMemberList()
170 {
171 // General tab list
172 lock (lstMembers)
173 {
174 lstMembers.Items.Clear();
175  
176 foreach (GroupMemberData entry in MemberData.Values)
177 {
178 ListViewItem lvi = new ListViewItem();
179 lvi.Text = entry.Name;
180  
181 ListViewItem.ListViewSubItem lvsi = new ListViewItem.ListViewSubItem();
182 lvsi.Text = entry.Title;
183 lvi.SubItems.Add(lvsi);
184  
185 lvsi = new ListViewItem.ListViewSubItem();
186 lvsi.Text = entry.LastOnline;
187 lvi.SubItems.Add(lvsi);
188  
189 lstMembers.Items.Add(lvi);
190 }
191 }
192  
193 // Members tab list
194 lock (lstMembers2)
195 {
196 lstMembers2.Items.Clear();
197  
198 foreach (GroupMemberData entry in MemberData.Values)
199 {
200 ListViewItem lvi = new ListViewItem();
201 lvi.Text = entry.Name;
202  
203 ListViewItem.ListViewSubItem lvsi = new ListViewItem.ListViewSubItem();
204 lvsi.Text = entry.Contribution.ToString();
205 lvi.SubItems.Add(lvsi);
206  
207 lvsi = new ListViewItem.ListViewSubItem();
208 lvsi.Text = entry.LastOnline;
209 lvi.SubItems.Add(lvsi);
210  
211 lstMembers2.Items.Add(lvi);
212 }
213 }
214 }
215  
216 private void GroupMembersHandler(object sender, GroupMembersReplyEventArgs e)
217 {
218 Members = e.Members;
219  
220 UpdateMembers();
221 }
222  
223 private void UpdateMembers()
224 {
225 if (this.InvokeRequired)
226 {
227 Invoke(new MethodInvoker(UpdateMembers));
228 }
229 else
230 {
231 List<UUID> requestids = new List<UUID>();
232  
233 lock (Members)
234 {
235 lock (MemberData)
236 {
237 foreach (GroupMember member in Members.Values)
238 {
239 GroupMemberData memberData = new GroupMemberData();
240 memberData.ID = member.ID;
241 memberData.IsOwner = member.IsOwner;
242 memberData.LastOnline = member.OnlineStatus;
243 memberData.Powers = (ulong)member.Powers;
244 memberData.Title = member.Title;
245 memberData.Contribution = member.Contribution;
246  
247 MemberData[member.ID] = memberData;
248  
249 // Add this ID to the name request batch
250 requestids.Add(member.ID);
251 }
252 }
253 }
254  
255 Client.Avatars.RequestAvatarNames(requestids);
256 }
257 }
258  
259 private void GroupTitlesHandler(object sender, GroupTitlesReplyEventArgs e)
260 {
261 Titles = e.Titles;
262  
263 UpdateTitles();
264 }
265  
266 private void UpdateTitles()
267 {
268 if (this.InvokeRequired)
269 {
270 Invoke(new MethodInvoker(UpdateTitles));
271 }
272 else
273 {
274 lock (Titles)
275 {
276 foreach (KeyValuePair<UUID, GroupTitle> kvp in Titles)
277 {
278 Console.Write("Title: " + kvp.Value.Title + " = " + kvp.Key.ToString());
279 if (kvp.Value.Selected)
280 Console.WriteLine(" (Selected)");
281 else
282 Console.WriteLine();
283 }
284 }
285 }
286 }
287 }
288  
289 public class GroupMemberData
290 {
291 public UUID ID;
292 public string Name;
293 public string Title;
294 public string LastOnline;
295 public ulong Powers;
296 public bool IsOwner;
297 public int Contribution;
298 }
299 }