diff --git a/Programs/examples/Dashboard/Dashboard.Designer.cs b/Programs/examples/Dashboard/Dashboard.Designer.cs
new file mode 100644
index 00000000..57180bcd
--- /dev/null
+++ b/Programs/examples/Dashboard/Dashboard.Designer.cs
@@ -0,0 +1,270 @@
+namespace Dashboard
+{
+ partial class Dashboard
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+ this.localChat1 = new OpenMetaverse.GUI.LocalChat();
+ this.splitContainer2 = new System.Windows.Forms.SplitContainer();
+ this.tabControl1 = new System.Windows.Forms.TabControl();
+ this.tabPage1 = new System.Windows.Forms.TabPage();
+ this.avatarList1 = new OpenMetaverse.GUI.AvatarList();
+ this.tabPage2 = new System.Windows.Forms.TabPage();
+ this.friendsList1 = new OpenMetaverse.GUI.FriendList();
+ this.tabPage3 = new System.Windows.Forms.TabPage();
+ this.groupList1 = new OpenMetaverse.GUI.GroupList();
+ this.tabPage4 = new System.Windows.Forms.TabPage();
+ this.inventoryTree1 = new OpenMetaverse.GUI.InventoryTree();
+ this.miniMap1 = new OpenMetaverse.GUI.MiniMap();
+ this.txtStatus = new System.Windows.Forms.Label();
+ this.splitContainer1.Panel1.SuspendLayout();
+ this.splitContainer1.Panel2.SuspendLayout();
+ this.splitContainer1.SuspendLayout();
+ this.splitContainer2.Panel1.SuspendLayout();
+ this.splitContainer2.Panel2.SuspendLayout();
+ this.splitContainer2.SuspendLayout();
+ this.tabControl1.SuspendLayout();
+ this.tabPage1.SuspendLayout();
+ this.tabPage2.SuspendLayout();
+ this.tabPage3.SuspendLayout();
+ this.tabPage4.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.miniMap1)).BeginInit();
+ this.SuspendLayout();
+ //
+ // splitContainer1
+ //
+ this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.splitContainer1.Location = new System.Drawing.Point(2, 3);
+ this.splitContainer1.Name = "splitContainer1";
+ //
+ // splitContainer1.Panel1
+ //
+ this.splitContainer1.Panel1.Controls.Add(this.localChat1);
+ //
+ // splitContainer1.Panel2
+ //
+ this.splitContainer1.Panel2.Controls.Add(this.splitContainer2);
+ this.splitContainer1.Size = new System.Drawing.Size(627, 419);
+ this.splitContainer1.SplitterDistance = 415;
+ this.splitContainer1.TabIndex = 4;
+ //
+ // localChat1
+ //
+ this.localChat1.Client = null;
+ this.localChat1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.localChat1.Location = new System.Drawing.Point(0, 0);
+ this.localChat1.Name = "localChat1";
+ this.localChat1.Size = new System.Drawing.Size(415, 419);
+ this.localChat1.TabIndex = 4;
+ //
+ // splitContainer2
+ //
+ this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.splitContainer2.Location = new System.Drawing.Point(0, 0);
+ this.splitContainer2.Name = "splitContainer2";
+ this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;
+ //
+ // splitContainer2.Panel1
+ //
+ this.splitContainer2.Panel1.Controls.Add(this.tabControl1);
+ //
+ // splitContainer2.Panel2
+ //
+ this.splitContainer2.Panel2.Controls.Add(this.miniMap1);
+ this.splitContainer2.Size = new System.Drawing.Size(208, 419);
+ this.splitContainer2.SplitterDistance = 209;
+ this.splitContainer2.TabIndex = 9;
+ //
+ // tabControl1
+ //
+ this.tabControl1.Controls.Add(this.tabPage1);
+ this.tabControl1.Controls.Add(this.tabPage2);
+ this.tabControl1.Controls.Add(this.tabPage3);
+ this.tabControl1.Controls.Add(this.tabPage4);
+ this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tabControl1.Location = new System.Drawing.Point(0, 0);
+ this.tabControl1.Name = "tabControl1";
+ this.tabControl1.SelectedIndex = 0;
+ this.tabControl1.Size = new System.Drawing.Size(208, 209);
+ this.tabControl1.TabIndex = 9;
+ //
+ // tabPage1
+ //
+ this.tabPage1.Controls.Add(this.avatarList1);
+ this.tabPage1.Location = new System.Drawing.Point(4, 22);
+ this.tabPage1.Name = "tabPage1";
+ this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPage1.Size = new System.Drawing.Size(200, 183);
+ this.tabPage1.TabIndex = 0;
+ this.tabPage1.Text = "Nearby";
+ this.tabPage1.UseVisualStyleBackColor = true;
+ //
+ // avatarList1
+ //
+ this.avatarList1.Client = null;
+ this.avatarList1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.avatarList1.Location = new System.Drawing.Point(3, 3);
+ this.avatarList1.Name = "avatarList1";
+ this.avatarList1.Size = new System.Drawing.Size(194, 177);
+ this.avatarList1.TabIndex = 3;
+ this.avatarList1.UseCompatibleStateImageBehavior = false;
+ this.avatarList1.View = System.Windows.Forms.View.Details;
+ //
+ // tabPage2
+ //
+ this.tabPage2.Controls.Add(this.friendsList1);
+ this.tabPage2.Location = new System.Drawing.Point(4, 22);
+ this.tabPage2.Name = "tabPage2";
+ this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPage2.Size = new System.Drawing.Size(200, 221);
+ this.tabPage2.TabIndex = 1;
+ this.tabPage2.Text = "Friends";
+ this.tabPage2.UseVisualStyleBackColor = true;
+ //
+ // friendsList1
+ //
+ this.friendsList1.Client = null;
+ this.friendsList1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.friendsList1.Location = new System.Drawing.Point(3, 3);
+ this.friendsList1.Name = "friendsList1";
+ this.friendsList1.Size = new System.Drawing.Size(194, 215);
+ this.friendsList1.TabIndex = 5;
+ this.friendsList1.UseCompatibleStateImageBehavior = false;
+ this.friendsList1.View = System.Windows.Forms.View.Details;
+ //
+ // tabPage3
+ //
+ this.tabPage3.Controls.Add(this.groupList1);
+ this.tabPage3.Location = new System.Drawing.Point(4, 22);
+ this.tabPage3.Name = "tabPage3";
+ this.tabPage3.Size = new System.Drawing.Size(200, 221);
+ this.tabPage3.TabIndex = 2;
+ this.tabPage3.Text = "Groups";
+ this.tabPage3.UseVisualStyleBackColor = true;
+ //
+ // groupList1
+ //
+ this.groupList1.Client = null;
+ this.groupList1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.groupList1.Location = new System.Drawing.Point(0, 0);
+ this.groupList1.Name = "groupList1";
+ this.groupList1.Size = new System.Drawing.Size(200, 221);
+ this.groupList1.TabIndex = 7;
+ this.groupList1.UseCompatibleStateImageBehavior = false;
+ this.groupList1.View = System.Windows.Forms.View.Details;
+ //
+ // tabPage4
+ //
+ this.tabPage4.Controls.Add(this.inventoryTree1);
+ this.tabPage4.Location = new System.Drawing.Point(4, 22);
+ this.tabPage4.Name = "tabPage4";
+ this.tabPage4.Size = new System.Drawing.Size(200, 221);
+ this.tabPage4.TabIndex = 3;
+ this.tabPage4.Text = "Inventory";
+ this.tabPage4.UseVisualStyleBackColor = true;
+ //
+ // inventoryTree1
+ //
+ this.inventoryTree1.Client = null;
+ this.inventoryTree1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.inventoryTree1.Location = new System.Drawing.Point(0, 0);
+ this.inventoryTree1.Name = "inventoryTree1";
+ this.inventoryTree1.Size = new System.Drawing.Size(200, 221);
+ this.inventoryTree1.TabIndex = 1;
+ //
+ // miniMap1
+ //
+ this.miniMap1.BackColor = System.Drawing.SystemColors.Control;
+ this.miniMap1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+ this.miniMap1.Client = null;
+ this.miniMap1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.miniMap1.Location = new System.Drawing.Point(0, 0);
+ this.miniMap1.Name = "miniMap1";
+ this.miniMap1.Size = new System.Drawing.Size(208, 206);
+ this.miniMap1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
+ this.miniMap1.TabIndex = 11;
+ this.miniMap1.TabStop = false;
+ //
+ // txtStatus
+ //
+ this.txtStatus.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtStatus.AutoEllipsis = true;
+ this.txtStatus.Location = new System.Drawing.Point(10, 426);
+ this.txtStatus.Name = "txtStatus";
+ this.txtStatus.Size = new System.Drawing.Size(611, 13);
+ this.txtStatus.TabIndex = 5;
+ this.txtStatus.TextAlign = System.Drawing.ContentAlignment.TopCenter;
+ //
+ // Dashboard
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(632, 443);
+ this.Controls.Add(this.txtStatus);
+ this.Controls.Add(this.splitContainer1);
+ this.Name = "Dashboard";
+ this.Text = "Dashboard";
+ this.splitContainer1.Panel1.ResumeLayout(false);
+ this.splitContainer1.Panel2.ResumeLayout(false);
+ this.splitContainer1.ResumeLayout(false);
+ this.splitContainer2.Panel1.ResumeLayout(false);
+ this.splitContainer2.Panel2.ResumeLayout(false);
+ this.splitContainer2.ResumeLayout(false);
+ this.tabControl1.ResumeLayout(false);
+ this.tabPage1.ResumeLayout(false);
+ this.tabPage2.ResumeLayout(false);
+ this.tabPage3.ResumeLayout(false);
+ this.tabPage4.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.miniMap1)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.SplitContainer splitContainer1;
+ private OpenMetaverse.GUI.LocalChat localChat1;
+ private System.Windows.Forms.SplitContainer splitContainer2;
+ private System.Windows.Forms.TabControl tabControl1;
+ private System.Windows.Forms.TabPage tabPage1;
+ private OpenMetaverse.GUI.AvatarList avatarList1;
+ private System.Windows.Forms.TabPage tabPage2;
+ private OpenMetaverse.GUI.FriendList friendsList1;
+ private System.Windows.Forms.TabPage tabPage3;
+ private OpenMetaverse.GUI.GroupList groupList1;
+ private System.Windows.Forms.TabPage tabPage4;
+ private OpenMetaverse.GUI.InventoryTree inventoryTree1;
+ private OpenMetaverse.GUI.MiniMap miniMap1;
+ private System.Windows.Forms.Label txtStatus;
+
+ }
+}
+
diff --git a/Programs/examples/Dashboard/Dashboard.cs b/Programs/examples/Dashboard/Dashboard.cs
new file mode 100644
index 00000000..528b28ae
--- /dev/null
+++ b/Programs/examples/Dashboard/Dashboard.cs
@@ -0,0 +1,86 @@
+using OpenMetaverse;
+using OpenMetaverse.GUI;
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Reflection;
+using System.Windows.Forms;
+
+namespace Dashboard
+{
+ public partial class Dashboard : Form
+ {
+
+ GridClient Client;
+
+ ///
+ /// Provides a full representation of OpenMetaverse.GUI
+ ///
+ ///
+ ///
+ ///
+ public Dashboard(string firstName, string lastName, string password)
+ {
+ InitializeComponent();
+
+ //force logout and exit when form is closed
+ this.FormClosing += new FormClosingEventHandler(Dashboard_FormClosing);
+
+ //initialize client object
+ Client = new GridClient();
+ Client.Network.OnLogin += new NetworkManager.LoginCallback(Network_OnLogin);
+ LoginParams ClientLogin = Client.Network.DefaultLoginParams(firstName, lastName, password, "OpenMetaverse Dashboard", Assembly.GetExecutingAssembly().GetName().Version.ToString());
+ ClientLogin.Start = "last";
+
+ //define the client object for each GUI element
+ avatarList1.Client = Client;
+ friendsList1.Client = Client;
+ groupList1.Client = Client;
+ inventoryTree1.Client = Client;
+ localChat1.Client = Client;
+ miniMap1.Client = Client;
+
+ //double-click events
+ avatarList1.OnAvatarDoubleClick += new AvatarList.AvatarDoubleClickCallback(avatarList1_OnAvatarDoubleClick);
+ friendsList1.OnFriendDoubleClick += new FriendList.FriendDoubleClickCallback(friendsList1_OnFriendDoubleClick);
+ groupList1.OnGroupDoubleClick += new GroupList.GroupDoubleClickCallback(groupList1_OnGroupDoubleClick);
+
+ //login
+ Client.Network.BeginLogin(ClientLogin);
+ }
+
+ private void SetLabelText(Label label, string text)
+ {
+ if (this.InvokeRequired) this.BeginInvoke((MethodInvoker)delegate { SetLabelText(label, text); });
+ else { label.Text = text; }
+ }
+
+ private void Dashboard_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ e.Cancel = true;
+ if (Client != null && Client.Network.Connected) Client.Network.Logout();
+ Environment.Exit(0);
+ }
+
+ private void Network_OnLogin(LoginStatus login, string message)
+ {
+ SetLabelText(txtStatus, message);
+ }
+
+ private void avatarList1_OnAvatarDoubleClick(Avatar avatar)
+ {
+ MessageBox.Show(avatar.Name + " = " + avatar.ID);
+ }
+
+ private void friendsList1_OnFriendDoubleClick(FriendInfo friend)
+ {
+ MessageBox.Show(friend.Name + " = " + friend.UUID);
+ }
+
+ private void groupList1_OnGroupDoubleClick(Group group)
+ {
+ MessageBox.Show(group.Name + " = " + group.ID);
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/Programs/examples/Dashboard/Dashboard.resx b/Programs/examples/Dashboard/Dashboard.resx
new file mode 100644
index 00000000..ff31a6db
--- /dev/null
+++ b/Programs/examples/Dashboard/Dashboard.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Programs/examples/Dashboard/Program.cs b/Programs/examples/Dashboard/Program.cs
new file mode 100644
index 00000000..7f679249
--- /dev/null
+++ b/Programs/examples/Dashboard/Program.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Windows.Forms;
+
+namespace Dashboard
+{
+ static class Program
+ {
+ [STAThread]
+ static void Main(string[] args)
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ if (args.Length > 2) Application.Run(new Dashboard(args[0], args[1], args[2]));
+ else MessageBox.Show("Usage: dashboard.exe ", "Dashboard", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
+ }
+ }
+}
\ No newline at end of file
diff --git a/prebuild.xml b/prebuild.xml
index 4599f709..5830ca20 100644
--- a/prebuild.xml
+++ b/prebuild.xml
@@ -290,6 +290,32 @@
+
+
+
+ ../../bin/
+
+
+
+
+ ../../bin/
+
+
+
+ ../../bin/
+
+
+
+
+
+
+
+
+
+
+
+
+