Files
libremetaverse/Programs/examples/groupmanager/frmGroupInfo.cs
Jim Radford 14869cab48 LIBOMV-505 Merge in jradford-texturepipeline branch
This changes the way texture requests are handled, the AssetManager
RequestImage method signatures have been changed and are now expecting
the callback with the request.
Progressive requests for textures are supported for rendering viewers
Tuning parameters have been moved to Settings


git-svn-id: http://libopenmetaverse.googlecode.com/svn/libopenmetaverse/trunk@2699 52acb1d6-8a22-11de-b505-999d5b087335
2009-05-07 16:10:52 +00:00

280 lines
9.3 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using OpenMetaverse;
using OpenMetaverse.Imaging;
namespace groupmanager
{
public partial class frmGroupInfo : Form
{
Group Group;
GridClient Client;
Group Profile = new Group();
Dictionary<UUID, GroupMember> Members = new Dictionary<UUID,GroupMember>();
Dictionary<UUID, GroupTitle> Titles = new Dictionary<UUID,GroupTitle>();
Dictionary<UUID, GroupMemberData> MemberData = new Dictionary<UUID, GroupMemberData>();
Dictionary<UUID, string> Names = new Dictionary<UUID, string>();
GroupManager.GroupProfileCallback GroupProfileCallback;
GroupManager.GroupMembersCallback GroupMembersCallback;
GroupManager.GroupTitlesCallback GroupTitlesCallback;
AvatarManager.AvatarNamesCallback AvatarNamesCallback;
public frmGroupInfo(Group group, GridClient client)
{
InitializeComponent();
while (!IsHandleCreated)
{
// Force handle creation
IntPtr temp = Handle;
}
GroupProfileCallback = new GroupManager.GroupProfileCallback(GroupProfileHandler);
GroupMembersCallback = new GroupManager.GroupMembersCallback(GroupMembersHandler);
GroupTitlesCallback = new GroupManager.GroupTitlesCallback(GroupTitlesHandler);
AvatarNamesCallback = new AvatarManager.AvatarNamesCallback(AvatarNamesHandler);
Group = group;
Client = client;
// Register the callbacks for this form
Client.Groups.OnGroupProfile += GroupProfileCallback;
Client.Groups.OnGroupMembers += GroupMembersCallback;
Client.Groups.OnGroupTitles += GroupTitlesCallback;
Client.Avatars.OnAvatarNames += AvatarNamesCallback;
// Request the group information
Client.Groups.RequestGroupProfile(Group.ID);
Client.Groups.RequestGroupMembers(Group.ID);
Client.Groups.RequestGroupTitles(Group.ID);
}
~frmGroupInfo()
{
// Unregister the callbacks for this form
Client.Groups.OnGroupProfile -= GroupProfileCallback;
Client.Groups.OnGroupMembers -= GroupMembersCallback;
Client.Groups.OnGroupTitles -= GroupTitlesCallback;
Client.Avatars.OnAvatarNames -= AvatarNamesCallback;
}
private void GroupProfileHandler(Group profile)
{
Profile = profile;
if (Group.InsigniaID != UUID.Zero)
Client.Assets.RequestImage(Group.InsigniaID, ImageType.Normal,
delegate(TextureRequestState state, AssetTexture assetTexture)
{
ManagedImage imgData;
Image bitmap;
if (state == TextureRequestState.Finished)
{
OpenJPEG.DecodeToImage(assetTexture.AssetData, out imgData, out bitmap);
picInsignia.Image = bitmap;
}
});
if (this.InvokeRequired)
this.BeginInvoke(new MethodInvoker(UpdateProfile));
}
private void UpdateProfile()
{
lblGroupName.Text = Profile.Name;
txtCharter.Text = Profile.Charter;
chkShow.Checked = Profile.ShowInList;
chkPublish.Checked = Profile.AllowPublish;
chkOpenEnrollment.Checked = Profile.OpenEnrollment;
chkFee.Checked = (Profile.MembershipFee != 0);
numFee.Value = Profile.MembershipFee;
chkMature.Checked = Profile.MaturePublish;
Client.Avatars.RequestAvatarName(Profile.FounderID);
}
private void AvatarNamesHandler(Dictionary<UUID, string> names)
{
lock (Names)
{
foreach (KeyValuePair<UUID, string> agent in names)
{
Names[agent.Key] = agent.Value;
}
}
UpdateNames();
}
private void UpdateNames()
{
if (this.InvokeRequired)
{
Invoke(new MethodInvoker(UpdateNames));
}
else
{
lock (Names)
{
if (Profile.FounderID != UUID.Zero && Names.ContainsKey(Profile.FounderID))
{
lblFoundedBy.Text = "Founded by " + Names[Profile.FounderID];
}
lock (MemberData)
{
foreach (KeyValuePair<UUID, string> name in Names)
{
if (!MemberData.ContainsKey(name.Key))
{
MemberData[name.Key] = new GroupMemberData();
}
MemberData[name.Key].Name = name.Value;
}
}
}
UpdateMemberList();
}
}
private void UpdateMemberList()
{
// General tab list
lock (lstMembers)
{
lstMembers.Items.Clear();
foreach (GroupMemberData entry in MemberData.Values)
{
ListViewItem lvi = new ListViewItem();
lvi.Text = entry.Name;
ListViewItem.ListViewSubItem lvsi = new ListViewItem.ListViewSubItem();
lvsi.Text = entry.Title;
lvi.SubItems.Add(lvsi);
lvsi = new ListViewItem.ListViewSubItem();
lvsi.Text = entry.LastOnline;
lvi.SubItems.Add(lvsi);
lstMembers.Items.Add(lvi);
}
}
// Members tab list
lock (lstMembers2)
{
lstMembers2.Items.Clear();
foreach (GroupMemberData entry in MemberData.Values)
{
ListViewItem lvi = new ListViewItem();
lvi.Text = entry.Name;
ListViewItem.ListViewSubItem lvsi = new ListViewItem.ListViewSubItem();
lvsi.Text = entry.Contribution.ToString();
lvi.SubItems.Add(lvsi);
lvsi = new ListViewItem.ListViewSubItem();
lvsi.Text = entry.LastOnline;
lvi.SubItems.Add(lvsi);
lstMembers2.Items.Add(lvi);
}
}
}
private void GroupMembersHandler(Dictionary<UUID, GroupMember> members)
{
Members = members;
UpdateMembers();
}
private void UpdateMembers()
{
if (this.InvokeRequired)
{
Invoke(new MethodInvoker(UpdateMembers));
}
else
{
List<UUID> requestids = new List<UUID>();
lock (Members)
{
lock (MemberData)
{
foreach (GroupMember member in Members.Values)
{
GroupMemberData memberData = new GroupMemberData();
memberData.ID = member.ID;
memberData.IsOwner = member.IsOwner;
memberData.LastOnline = member.OnlineStatus;
memberData.Powers = (ulong)member.Powers;
memberData.Title = member.Title;
memberData.Contribution = member.Contribution;
MemberData[member.ID] = memberData;
// Add this ID to the name request batch
requestids.Add(member.ID);
}
}
}
Client.Avatars.RequestAvatarNames(requestids);
}
}
private void GroupTitlesHandler(Dictionary<UUID, GroupTitle> titles)
{
Titles = titles;
UpdateTitles();
}
private void UpdateTitles()
{
if (this.InvokeRequired)
{
Invoke(new MethodInvoker(UpdateTitles));
}
else
{
lock (Titles)
{
foreach (KeyValuePair<UUID, GroupTitle> kvp in Titles)
{
Console.Write("Title: " + kvp.Value.Title + " = " + kvp.Key.ToString());
if (kvp.Value.Selected)
Console.WriteLine(" (Selected)");
else
Console.WriteLine();
}
}
}
}
}
public class GroupMemberData
{
public UUID ID;
public string Name;
public string Title;
public string LastOnline;
public ulong Powers;
public bool IsOwner;
public int Contribution;
}
}