--- /dev/null
+// \r
+// Radegast Metaverse Client\r
+// Copyright (c) 2009, Radegast Development Team\r
+// All rights reserved.\r
+// \r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are met:\r
+// \r
+// * Redistributions of source code must retain the above copyright notice,\r
+// this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the distribution.\r
+// * Neither the name of the application "Radegast", nor the names of its\r
+// contributors may be used to endorse or promote products derived from\r
+// this software without specific prior written permission.\r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+//\r
+// $Id$\r
+//\r
+\r
+namespace Radegast\r
+{\r
+ partial class AvatarPicker\r
+ {\r
+ /// <summary> \r
+ /// Required designer variable.\r
+ /// </summary>\r
+ private System.ComponentModel.IContainer components = null;\r
+\r
+ /// <summary> \r
+ /// Clean up any resources being used.\r
+ /// </summary>\r
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>\r
+ protected override void Dispose(bool disposing)\r
+ {\r
+ if (disposing && (components != null))\r
+ {\r
+ components.Dispose();\r
+ }\r
+ base.Dispose(disposing);\r
+ }\r
+\r
+ #region Component Designer generated code\r
+\r
+ /// <summary> \r
+ /// Required method for Designer support - do not modify \r
+ /// the contents of this method with the code editor.\r
+ /// </summary>\r
+ private void InitializeComponent()\r
+ {\r
+ this.tcPicker = new System.Windows.Forms.TabControl();\r
+ this.tpSearch = new System.Windows.Forms.TabPage();\r
+ this.lvwSearch = new System.Windows.Forms.ListView();\r
+ this.pnlSearch = new System.Windows.Forms.Panel();\r
+ this.label1 = new System.Windows.Forms.Label();\r
+ this.btnSearch = new System.Windows.Forms.Button();\r
+ this.txtSearch = new System.Windows.Forms.TextBox();\r
+ this.tpNear = new System.Windows.Forms.TabPage();\r
+ this.lvwNear = new System.Windows.Forms.ListView();\r
+ this.columnHeader1 = new System.Windows.Forms.ColumnHeader();\r
+ this.columnHeader2 = new System.Windows.Forms.ColumnHeader();\r
+ this.tcPicker.SuspendLayout();\r
+ this.tpSearch.SuspendLayout();\r
+ this.pnlSearch.SuspendLayout();\r
+ this.tpNear.SuspendLayout();\r
+ this.SuspendLayout();\r
+ // \r
+ // tcPicker\r
+ // \r
+ this.tcPicker.Controls.Add(this.tpSearch);\r
+ this.tcPicker.Controls.Add(this.tpNear);\r
+ this.tcPicker.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.tcPicker.Location = new System.Drawing.Point(0, 0);\r
+ this.tcPicker.Name = "tcPicker";\r
+ this.tcPicker.SelectedIndex = 0;\r
+ this.tcPicker.Size = new System.Drawing.Size(259, 296);\r
+ this.tcPicker.TabIndex = 0;\r
+ // \r
+ // tpSearch\r
+ // \r
+ this.tpSearch.Controls.Add(this.lvwSearch);\r
+ this.tpSearch.Controls.Add(this.pnlSearch);\r
+ this.tpSearch.Location = new System.Drawing.Point(4, 22);\r
+ this.tpSearch.Name = "tpSearch";\r
+ this.tpSearch.Padding = new System.Windows.Forms.Padding(3);\r
+ this.tpSearch.Size = new System.Drawing.Size(251, 270);\r
+ this.tpSearch.TabIndex = 0;\r
+ this.tpSearch.Text = "Search";\r
+ this.tpSearch.UseVisualStyleBackColor = true;\r
+ // \r
+ // lvwSearch\r
+ // \r
+ this.lvwSearch.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\r
+ this.columnHeader1});\r
+ this.lvwSearch.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.lvwSearch.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;\r
+ this.lvwSearch.HideSelection = false;\r
+ this.lvwSearch.Location = new System.Drawing.Point(3, 57);\r
+ this.lvwSearch.Name = "lvwSearch";\r
+ this.lvwSearch.Size = new System.Drawing.Size(245, 210);\r
+ this.lvwSearch.TabIndex = 2;\r
+ this.lvwSearch.UseCompatibleStateImageBehavior = false;\r
+ this.lvwSearch.View = System.Windows.Forms.View.Details;\r
+ this.lvwSearch.SelectedIndexChanged += new System.EventHandler(this.lvwSearch_SelectedIndexChanged);\r
+ this.lvwSearch.SizeChanged += new System.EventHandler(this.lvwSearch_SizeChanged);\r
+ // \r
+ // pnlSearch\r
+ // \r
+ this.pnlSearch.Controls.Add(this.label1);\r
+ this.pnlSearch.Controls.Add(this.btnSearch);\r
+ this.pnlSearch.Controls.Add(this.txtSearch);\r
+ this.pnlSearch.Dock = System.Windows.Forms.DockStyle.Top;\r
+ this.pnlSearch.Location = new System.Drawing.Point(3, 3);\r
+ this.pnlSearch.Name = "pnlSearch";\r
+ this.pnlSearch.Size = new System.Drawing.Size(245, 54);\r
+ this.pnlSearch.TabIndex = 0;\r
+ // \r
+ // label1\r
+ // \r
+ this.label1.AutoSize = true;\r
+ this.label1.Location = new System.Drawing.Point(3, 6);\r
+ this.label1.Name = "label1";\r
+ this.label1.Size = new System.Drawing.Size(141, 13);\r
+ this.label1.TabIndex = 2;\r
+ this.label1.Text = "Type part of residents name:";\r
+ // \r
+ // btnSearch\r
+ // \r
+ this.btnSearch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\r
+ this.btnSearch.Enabled = false;\r
+ this.btnSearch.Location = new System.Drawing.Point(167, 25);\r
+ this.btnSearch.Name = "btnSearch";\r
+ this.btnSearch.Size = new System.Drawing.Size(75, 23);\r
+ this.btnSearch.TabIndex = 1;\r
+ this.btnSearch.Text = "&Search";\r
+ this.btnSearch.UseVisualStyleBackColor = true;\r
+ this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click);\r
+ // \r
+ // txtSearch\r
+ // \r
+ this.txtSearch.AccessibleName = "Search";\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.Location = new System.Drawing.Point(3, 25);\r
+ this.txtSearch.Name = "txtSearch";\r
+ this.txtSearch.Size = new System.Drawing.Size(143, 20);\r
+ this.txtSearch.TabIndex = 0;\r
+ this.txtSearch.TextChanged += new System.EventHandler(this.txtSearch_TextChanged);\r
+ this.txtSearch.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtSearch_KeyDown);\r
+ // \r
+ // tpNear\r
+ // \r
+ this.tpNear.Controls.Add(this.lvwNear);\r
+ this.tpNear.Location = new System.Drawing.Point(4, 22);\r
+ this.tpNear.Name = "tpNear";\r
+ this.tpNear.Padding = new System.Windows.Forms.Padding(3);\r
+ this.tpNear.Size = new System.Drawing.Size(251, 270);\r
+ this.tpNear.TabIndex = 1;\r
+ this.tpNear.Text = "Near Me";\r
+ this.tpNear.UseVisualStyleBackColor = true;\r
+ // \r
+ // lvwNear\r
+ // \r
+ this.lvwNear.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\r
+ this.columnHeader2});\r
+ this.lvwNear.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.lvwNear.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;\r
+ this.lvwNear.HideSelection = false;\r
+ this.lvwNear.Location = new System.Drawing.Point(3, 3);\r
+ this.lvwNear.Name = "lvwNear";\r
+ this.lvwNear.Size = new System.Drawing.Size(245, 264);\r
+ this.lvwNear.TabIndex = 1;\r
+ this.lvwNear.UseCompatibleStateImageBehavior = false;\r
+ this.lvwNear.View = System.Windows.Forms.View.Details;\r
+ this.lvwNear.SelectedIndexChanged += new System.EventHandler(this.lvwNear_SelectedIndexChanged);\r
+ this.lvwNear.SizeChanged += new System.EventHandler(this.lvwSearch_SizeChanged);\r
+ // \r
+ // AvatarPicker\r
+ // \r
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r
+ this.Controls.Add(this.tcPicker);\r
+ this.Name = "AvatarPicker";\r
+ this.Size = new System.Drawing.Size(259, 296);\r
+ this.tcPicker.ResumeLayout(false);\r
+ this.tpSearch.ResumeLayout(false);\r
+ this.pnlSearch.ResumeLayout(false);\r
+ this.pnlSearch.PerformLayout();\r
+ this.tpNear.ResumeLayout(false);\r
+ this.ResumeLayout(false);\r
+\r
+ }\r
+\r
+ #endregion\r
+\r
+ public System.Windows.Forms.TabControl tcPicker;\r
+ public System.Windows.Forms.TabPage tpSearch;\r
+ public System.Windows.Forms.TabPage tpNear;\r
+ public System.Windows.Forms.ListView lvwSearch;\r
+ public System.Windows.Forms.ListView lvwNear;\r
+ public System.Windows.Forms.Panel pnlSearch;\r
+ public System.Windows.Forms.Label label1;\r
+ public System.Windows.Forms.Button btnSearch;\r
+ public System.Windows.Forms.TextBox txtSearch;\r
+ private System.Windows.Forms.ColumnHeader columnHeader1;\r
+ private System.Windows.Forms.ColumnHeader columnHeader2;\r
+\r
+ }\r
+}\r
--- /dev/null
+// \r
+// Radegast Metaverse Client\r
+// Copyright (c) 2009, Radegast Development Team\r
+// All rights reserved.\r
+// \r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are met:\r
+// \r
+// * Redistributions of source code must retain the above copyright notice,\r
+// this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the distribution.\r
+// * Neither the name of the application "Radegast", nor the names of its\r
+// contributors may be used to endorse or promote products derived from\r
+// this software without specific prior written permission.\r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+//\r
+// $Id$\r
+//\r
+\r
+using System;\r
+using System.Collections.Generic;\r
+using System.ComponentModel;\r
+using System.Drawing;\r
+using System.Data;\r
+using System.Linq;\r
+using System.Text;\r
+using System.Windows.Forms;\r
+using OpenMetaverse;\r
+\r
+namespace Radegast\r
+{\r
+ public partial class AvatarPicker : UserControl\r
+ {\r
+ RadegastInstance instance;\r
+ GridClient client { get { return instance.Client; } }\r
+ UUID searchID;\r
+ public ListView currentList;\r
+\r
+ [Browsable(true)]\r
+ public event EventHandler SelectionChaged;\r
+\r
+ [Browsable(false)]\r
+ public Dictionary<UUID, string> SelectedAvatars\r
+ {\r
+ get\r
+ {\r
+ Dictionary<UUID, string> res = new Dictionary<UUID,string>();\r
+ if (currentList != null)\r
+ {\r
+ foreach (ListViewItem item in currentList.SelectedItems)\r
+ {\r
+ res.Add((UUID)item.Tag, item.Text);\r
+ }\r
+ }\r
+ return res;\r
+ }\r
+ }\r
+\r
+ public AvatarPicker() { }\r
+\r
+ public AvatarPicker(RadegastInstance instance)\r
+ {\r
+ InitializeComponent();\r
+ Disposed += new EventHandler(AvatarPicker_Disposed);\r
+ \r
+ this.instance = instance;\r
+\r
+ // events\r
+ client.Avatars.AvatarPickerReply += new EventHandler<AvatarPickerReplyEventArgs>(Avatars_AvatarPickerReply);\r
+ }\r
+\r
+ void AvatarPicker_Disposed(object sender, EventArgs e)\r
+ {\r
+ client.Avatars.AvatarPickerReply -= new EventHandler<AvatarPickerReplyEventArgs>(Avatars_AvatarPickerReply);\r
+ }\r
+\r
+ void Avatars_AvatarPickerReply(object sender, AvatarPickerReplyEventArgs e)\r
+ {\r
+ if (searchID == e.QueryID && e.Avatars.Count > 0)\r
+ {\r
+ BeginInvoke(new MethodInvoker(() =>\r
+ {\r
+ foreach (KeyValuePair<UUID, string> kvp in e.Avatars)\r
+ {\r
+ lvwSearch.Items.Add(new ListViewItem(kvp.Value) { Text = kvp.Value, Tag = kvp.Key });\r
+ }\r
+ }));\r
+ }\r
+ }\r
+\r
+ private void btnSearch_Click(object sender, EventArgs e)\r
+ {\r
+ if (txtSearch.Text.Length > 2)\r
+ {\r
+ searchID = UUID.Random();\r
+ lvwSearch.Items.Clear();\r
+ client.Avatars.RequestAvatarNameSearch(txtSearch.Text, searchID);\r
+ }\r
+ }\r
+\r
+ private void txtSearch_TextChanged(object sender, EventArgs e)\r
+ {\r
+ btnSearch.Enabled = txtSearch.Text.Length > 2;\r
+ }\r
+\r
+ private void lvwNear_SelectedIndexChanged(object sender, EventArgs e)\r
+ {\r
+ currentList = lvwNear;\r
+ if (SelectionChaged != null)\r
+ SelectionChaged(this, EventArgs.Empty);\r
+ }\r
+\r
+ private void lvwSearch_SelectedIndexChanged(object sender, EventArgs e)\r
+ {\r
+ currentList = lvwSearch;\r
+ if (SelectionChaged != null)\r
+ SelectionChaged(this, EventArgs.Empty);\r
+ }\r
+\r
+ private void lvwSearch_SizeChanged(object sender, EventArgs e)\r
+ {\r
+ ListView view = (ListView)sender;\r
+ view.Columns[0].Width = view.Width - 30;\r
+ }\r
+\r
+ private void txtSearch_KeyDown(object sender, KeyEventArgs e)\r
+ {\r
+ if (e.KeyCode == Keys.Enter)\r
+ {\r
+ e.SuppressKeyPress = e.Handled = true;\r
+ if (btnSearch.Enabled)\r
+ btnSearch.PerformClick();\r
+ }\r
+ }\r
+\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" use="required" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+</root>
\ No newline at end of file
this.btnInviteNewMember.TabIndex = 11;\r
this.btnInviteNewMember.Text = "Invite New Member...";\r
this.btnInviteNewMember.UseVisualStyleBackColor = true;\r
+ this.btnInviteNewMember.Click += new System.EventHandler(this.btnInviteNewMember_Click);\r
// \r
// btnEjectMember\r
// \r
break;\r
}\r
}\r
+\r
+ private void btnInviteNewMember_Click(object sender, EventArgs e)\r
+ {\r
+ (new GroupInvite(instance, group, roles)).Show();\r
+ }\r
}\r
\r
public class EnhancedGroupMember\r
{\r
((Radegast.Netcom.RadegastNetcom)sender).ClientDisconnected -= new System.EventHandler<DisconnectedEventArgs>(Netcom_ClientDisconnected);\r
\r
- BeginInvoke(new MethodInvoker(() =>\r
- {\r
- GroupDetails.Dispose();\r
- Close();\r
- }\r
- ));\r
+ if (IsHandleCreated)\r
+ BeginInvoke(new MethodInvoker(() =>\r
+ {\r
+ GroupDetails.Dispose();\r
+ Close();\r
+ }\r
+ ));\r
}\r
}\r
}\r
--- /dev/null
+// \r
+// Radegast Metaverse Client\r
+// Copyright (c) 2009, Radegast Development Team\r
+// All rights reserved.\r
+// \r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are met:\r
+// \r
+// * Redistributions of source code must retain the above copyright notice,\r
+// this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the distribution.\r
+// * Neither the name of the application "Radegast", nor the names of its\r
+// contributors may be used to endorse or promote products derived from\r
+// this software without specific prior written permission.\r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+//\r
+// $Id$\r
+//\r
+namespace Radegast\r
+{\r
+ partial class GroupInvite\r
+ {\r
+ /// <summary>\r
+ /// Required designer variable.\r
+ /// </summary>\r
+ private System.ComponentModel.IContainer components = null;\r
+\r
+ /// <summary>\r
+ /// Clean up any resources being used.\r
+ /// </summary>\r
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>\r
+ protected override void Dispose(bool disposing)\r
+ {\r
+ if (disposing && (components != null))\r
+ {\r
+ components.Dispose();\r
+ }\r
+ base.Dispose(disposing);\r
+ }\r
+\r
+ #region Windows Form Designer generated code\r
+\r
+ /// <summary>\r
+ /// Required method for Designer support - do not modify\r
+ /// the contents of this method with the code editor.\r
+ /// </summary>\r
+ private void InitializeComponent()\r
+ {\r
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GroupInvite));\r
+ this.pnlInvite = new System.Windows.Forms.Panel();\r
+ this.cmbRoles = new System.Windows.Forms.ComboBox();\r
+ this.btnIvite = new System.Windows.Forms.Button();\r
+ this.pnlInvite.SuspendLayout();\r
+ this.SuspendLayout();\r
+ // \r
+ // pnlInvite\r
+ // \r
+ this.pnlInvite.Controls.Add(this.btnIvite);\r
+ this.pnlInvite.Controls.Add(this.cmbRoles);\r
+ this.pnlInvite.Dock = System.Windows.Forms.DockStyle.Bottom;\r
+ this.pnlInvite.Location = new System.Drawing.Point(0, 338);\r
+ this.pnlInvite.Name = "pnlInvite";\r
+ this.pnlInvite.Size = new System.Drawing.Size(330, 31);\r
+ this.pnlInvite.TabIndex = 0;\r
+ // \r
+ // cmbRoles\r
+ // \r
+ this.cmbRoles.AccessibleName = "Roles";\r
+ this.cmbRoles.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)\r
+ | System.Windows.Forms.AnchorStyles.Right)));\r
+ this.cmbRoles.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\r
+ this.cmbRoles.FormattingEnabled = true;\r
+ this.cmbRoles.Location = new System.Drawing.Point(12, 5);\r
+ this.cmbRoles.Name = "cmbRoles";\r
+ this.cmbRoles.Size = new System.Drawing.Size(165, 21);\r
+ this.cmbRoles.TabIndex = 0;\r
+ // \r
+ // btnIvite\r
+ // \r
+ this.btnIvite.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\r
+ this.btnIvite.Enabled = false;\r
+ this.btnIvite.Location = new System.Drawing.Point(201, 5);\r
+ this.btnIvite.Name = "btnIvite";\r
+ this.btnIvite.Size = new System.Drawing.Size(117, 23);\r
+ this.btnIvite.TabIndex = 1;\r
+ this.btnIvite.Text = "Send invtitations";\r
+ this.btnIvite.UseVisualStyleBackColor = true;\r
+ this.btnIvite.Click += new System.EventHandler(this.btnIvite_Click);\r
+ // \r
+ // GroupInvite\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(330, 369);\r
+ this.Controls.Add(this.pnlInvite);\r
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));\r
+ this.MaximizeBox = false;\r
+ this.MinimizeBox = false;\r
+ this.Name = "GroupInvite";\r
+ this.Text = "Select resident";\r
+ this.Load += new System.EventHandler(this.GroupInvite_Load);\r
+ this.pnlInvite.ResumeLayout(false);\r
+ this.ResumeLayout(false);\r
+\r
+ }\r
+\r
+ #endregion\r
+\r
+ private System.Windows.Forms.Panel pnlInvite;\r
+ private System.Windows.Forms.Button btnIvite;\r
+ private System.Windows.Forms.ComboBox cmbRoles;\r
+\r
+\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+// \r
+// Radegast Metaverse Client\r
+// Copyright (c) 2009, Radegast Development Team\r
+// All rights reserved.\r
+// \r
+// Redistribution and use in source and binary forms, with or without\r
+// modification, are permitted provided that the following conditions are met:\r
+// \r
+// * Redistributions of source code must retain the above copyright notice,\r
+// this list of conditions and the following disclaimer.\r
+// * Redistributions in binary form must reproduce the above copyright\r
+// notice, this list of conditions and the following disclaimer in the\r
+// documentation and/or other materials provided with the distribution.\r
+// * Neither the name of the application "Radegast", nor the names of its\r
+// contributors may be used to endorse or promote products derived from\r
+// this software without specific prior written permission.\r
+// \r
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+//\r
+// $Id$\r
+//\r
+using System;\r
+using System.Collections.Generic;\r
+using System.ComponentModel;\r
+using System.Data;\r
+using System.Drawing;\r
+using System.Linq;\r
+using System.Text;\r
+using System.Windows.Forms;\r
+using OpenMetaverse;\r
+\r
+namespace Radegast\r
+{\r
+ public partial class GroupInvite : RadegastForm\r
+ {\r
+ AvatarPicker picker;\r
+ RadegastInstance instance;\r
+ Netcom.RadegastNetcom netcom;\r
+\r
+ Group group;\r
+ Dictionary<UUID, GroupRole> roles;\r
+\r
+ public GroupInvite(RadegastInstance instance, Group group, Dictionary<UUID, GroupRole> roles)\r
+ :base(instance)\r
+ {\r
+ InitializeComponent();\r
+ Disposed += new EventHandler(GroupInvite_Disposed);\r
+ AutoSavePosition = true;\r
+\r
+ this.instance = instance;\r
+ this.roles = roles;\r
+ this.group = group;\r
+ this.netcom = instance.Netcom;\r
+\r
+ picker = new AvatarPicker(instance) { Dock = DockStyle.Fill };\r
+ Controls.Add(picker);\r
+ picker.SelectionChaged += new EventHandler(picker_SelectionChaged);\r
+ picker.BringToFront();\r
+ \r
+ netcom.ClientDisconnected += new EventHandler<DisconnectedEventArgs>(Netcom_ClientDisconnected);\r
+\r
+ cmbRoles.Items.Add(roles[UUID.Zero]);\r
+ cmbRoles.SelectedIndex = 0;\r
+\r
+ foreach (KeyValuePair<UUID, GroupRole> role in roles)\r
+ if (role.Key != UUID.Zero)\r
+ cmbRoles.Items.Add(role.Value);\r
+ }\r
+\r
+ void picker_SelectionChaged(object sender, EventArgs e)\r
+ {\r
+ btnIvite.Enabled = picker.SelectedAvatars.Count > 0;\r
+ }\r
+\r
+ void GroupInvite_Disposed(object sender, EventArgs e)\r
+ {\r
+ netcom.ClientDisconnected -= new EventHandler<DisconnectedEventArgs>(Netcom_ClientDisconnected);\r
+ netcom = null;\r
+ instance = null;\r
+ picker.Dispose();\r
+ Logger.DebugLog("Group picker disposed");\r
+ }\r
+\r
+ void Netcom_ClientDisconnected(object sender, OpenMetaverse.DisconnectedEventArgs e)\r
+ {\r
+ ((Radegast.Netcom.RadegastNetcom)sender).ClientDisconnected -= new EventHandler<DisconnectedEventArgs>(Netcom_ClientDisconnected);\r
+\r
+ if (IsHandleCreated)\r
+ BeginInvoke(new MethodInvoker(() =>\r
+ {\r
+ Close();\r
+ }\r
+ ));\r
+ }\r
+\r
+\r
+ private void GroupInvite_Load(object sender, EventArgs e)\r
+ {\r
+ picker.txtSearch.Focus();\r
+ }\r
+\r
+ private void btnIvite_Click(object sender, EventArgs e)\r
+ {\r
+ List<UUID> roleID = new List<UUID>();\r
+ roleID.Add(((GroupRole)cmbRoles.SelectedItem).ID);\r
+\r
+ foreach (UUID key in picker.SelectedAvatars.Keys)\r
+ {\r
+ instance.Client.Groups.Invite(group.ID, roleID, key);\r
+ }\r
+ Close();\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" use="required" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\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
+ AAABAAEAEBAAAAAAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAA\r
+ AAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA\r
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA\r
+ AAEAAAABAAAAAQAAAAHCmW8HPUFD/ygrKwcAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAB/ceQ+f/I\r
+ kf89QUP9AAAAAQAAAAHuu4dX/8iR/z1BQ/89QUP/PUFD/z1BQ/84PD1BAAAAAeu5hkn/yJH//8iR///I\r
+ kf//yJH/PUFD/z1BQ/86PkCB/8iR///Ikf89QUP/PUFD/z1BQ/89QUP/PUFD/0VGRv//yJH//8iR///I\r
+ kf//yJH//8iR/z1BQ/89QUP/PUFD///Ikf//yJH/PUFD/z1BQ/89QUP/PUFD/z1BQ/9FRkb//8iR///I\r
+ kf//yJH//8iR///Ikf89QUP/PUFD/z1BQ///yJH//8iR/z1BQ/89QUP/PUFD/z1BQ/89QUP/RUZG///I\r
+ kf//yJH//8iR///Ikf//yJH/PUFD/z1BQ/89QUP//8iR///Ikf89QUP/PUFD/z1BQ/89QUP/PUFD/0VG\r
+ Rv//yJH//8iR///Ikf//yJH//8iR/z1BQ/89QUP/PUFD///Ikf//yJH/PUFD/z1BQ/89QUP/PUFD/z1B\r
+ Q/9FRkb//8iR///Ikf//yJH//8iR///Ikf89QUP/PUFD/z1BQ//3woyR98KMkTs/QZE7P0GROz9BkZF8\r
+ Zf+RfGX/knxl/6qNb/+qjW//qo1v//fCjJH3woyROz9BkTs/QZE7P0GRAAAAAQAAAAEAAAABAAAAAQAA\r
+ AAH/yJH//8iR//fCjv89QUP/PUFD/z1BQ/8AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA\r
+ AAEAAAAB/8iR///Ikf/3wo7/PUFD/z1BQ/89QUP/AAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA\r
+ AAEAAAABAAAAAf/Ikf//yJH/98KO/z1BQ/89QUP/PUFD/wAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA\r
+ AAEAAAABAAAAAQAAAAH/yJH//8iR//fCjv89QUP/PUFD/z1BQ/8AAAABAAAAAQAAAAEAAAABAAAAAQAA\r
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAf/Ikf/3wo7/PUFD/zs/Qa8AAAABAAAAAQAAAAEAAAABAAAAAQAA\r
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA\r
+ AAEAAAABAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA\r
+ //8AAP//AAD//w==\r
+</value>\r
+ </data>\r
+</root>
\ No newline at end of file
<Compile Include="GUI\Consoles\AttachmentTab.Designer.cs">\r
<DependentUpon>AttachmentTab.cs</DependentUpon>\r
</Compile>\r
+ <Compile Include="GUI\Consoles\AvatarPicker.cs">\r
+ <SubType>UserControl</SubType>\r
+ </Compile>\r
+ <Compile Include="GUI\Consoles\AvatarPicker.Designer.cs">\r
+ <DependentUpon>AvatarPicker.cs</DependentUpon>\r
+ </Compile>\r
<Compile Include="GUI\Consoles\ConferenceIMTabWindow.cs">\r
<SubType>UserControl</SubType>\r
</Compile>\r
<Compile Include="GUI\Dialogs\GroupInfo.Designer.cs">\r
<DependentUpon>GroupInfo.cs</DependentUpon>\r
</Compile>\r
+ <Compile Include="GUI\Dialogs\GroupInvite.cs">\r
+ <SubType>Form</SubType>\r
+ </Compile>\r
+ <Compile Include="GUI\Dialogs\GroupInvite.Designer.cs">\r
+ <DependentUpon>GroupInvite.cs</DependentUpon>\r
+ </Compile>\r
<Compile Include="GUI\Dialogs\KeyboardShortcuts.cs">\r
<SubType>Form</SubType>\r
</Compile>\r
<SubType>Designer</SubType>\r
<DependentUpon>AttachmentTab.cs</DependentUpon>\r
</EmbeddedResource>\r
+ <EmbeddedResource Include="GUI\Consoles\AvatarPicker.resx">\r
+ <DependentUpon>AvatarPicker.cs</DependentUpon>\r
+ </EmbeddedResource>\r
<EmbeddedResource Include="GUI\Consoles\ChatConsole.resx">\r
<SubType>Designer</SubType>\r
<DependentUpon>ChatConsole.cs</DependentUpon>\r
<DependentUpon>GroupInfo.cs</DependentUpon>\r
<SubType>Designer</SubType>\r
</EmbeddedResource>\r
+ <EmbeddedResource Include="GUI\Dialogs\GroupInvite.resx">\r
+ <DependentUpon>GroupInvite.cs</DependentUpon>\r
+ </EmbeddedResource>\r
<EmbeddedResource Include="GUI\Dialogs\KeyboardShortcuts.resx">\r
<DependentUpon>KeyboardShortcuts.cs</DependentUpon>\r
</EmbeddedResource>\r