git-svn-id: http://libopenmetaverse.googlecode.com/svn/trunk@72 52acb1d6-8a22-11de-b505-999d5b087335
674 lines
26 KiB
C#
674 lines
26 KiB
C#
/*
|
|
* Created by SharpDevelop.
|
|
* User: Oz
|
|
* Date: 7/11/2006
|
|
* Time: 8:42 PM
|
|
*
|
|
* To change this template use Tools | Options | Coding | Edit Standard Headers.
|
|
*/
|
|
|
|
using System;
|
|
using System.Drawing;
|
|
using System.Collections;
|
|
using System.ComponentModel;
|
|
using System.Windows.Forms;
|
|
using System.Data;
|
|
using System.Xml;
|
|
using System.Xml.XPath;
|
|
using System.IO;
|
|
using System.Threading;
|
|
using libsecondlife;
|
|
using libsecondlife.InventorySystem;
|
|
|
|
namespace SLChat
|
|
{
|
|
/// <summary>
|
|
/// Description of ChatScreen.
|
|
/// Our chat screen shows all incoming chat, names of residents
|
|
/// around us, possibly IMs (ala XChat irc client), and is
|
|
/// our "main window" (although winLogin is this projects actual
|
|
/// main window).
|
|
/// </summary>
|
|
public class ChatScreen : System.Windows.Forms.Form
|
|
{
|
|
public static winLogin winLog; //Login Window.
|
|
public static NetCom net; //NetCom calls.
|
|
public static winInventory winInv; //Inventory window.
|
|
public static winAbout winAboot; //About window.
|
|
public static Thread loginthread;
|
|
public bool aboutVisible; //Is the about window visible?
|
|
public bool loginVisible; //Is the login window visible? Probably a better way of checking this.
|
|
public bool loggedin; //Are we logged in? false and true
|
|
public bool firstlog = true; //determines if we've started a login before or not
|
|
string newline = System.Environment.NewLine; //Used for chat.
|
|
string fname; //First Name
|
|
string lname; //Last Name
|
|
string pwrd; //Password
|
|
int ChatLeng; //Length of rChatHistory, used for buggy ChatEffects.
|
|
//Used to toggle auto-scrolling, making it easier to
|
|
//copy text and such from rChatHistory.
|
|
bool chatAutoScroll;
|
|
//Stores residents who have spoken Name and Key
|
|
//used for printing key to text (and later things).
|
|
Hashtable userHash = new Hashtable();
|
|
|
|
public ChatScreen(winLogin Load)
|
|
{
|
|
winLog = Load;
|
|
//
|
|
// The InitializeComponent() call is required for Windows Forms designer support.
|
|
//
|
|
InitializeComponent();
|
|
//
|
|
// TODO: Add constructor code after the InitializeComponent() call.
|
|
// TODO: Remove above TODO.
|
|
}
|
|
|
|
/// <summary>
|
|
/// Designer variable used to keep track of non-visual components.
|
|
/// </summary>
|
|
private System.ComponentModel.IContainer components = null;
|
|
|
|
/// <summary>
|
|
/// Disposes resources used by the form.
|
|
/// </summary>
|
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
if (disposing) {
|
|
if (components != null) {
|
|
components.Dispose();
|
|
}
|
|
}
|
|
base.Dispose(disposing);
|
|
}
|
|
|
|
/// <summary>
|
|
/// This method is required for Windows Forms designer support.
|
|
/// Do not change the method contents inside the source code editor. The Forms designer might
|
|
/// not be able to load this method if it was changed manually.
|
|
/// </summary>
|
|
private void InitializeComponent()
|
|
{
|
|
this.components = new System.ComponentModel.Container();
|
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ChatScreen));
|
|
this.rChatHistory = new System.Windows.Forms.RichTextBox();
|
|
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
|
|
this.listNames = new System.Windows.Forms.ListBox();
|
|
this.cntxListNames = new System.Windows.Forms.ContextMenuStrip(this.components);
|
|
this.keyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
|
|
this.removeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
|
|
this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
this.loginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
|
this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
this.btnSend = new System.Windows.Forms.Button();
|
|
this.toolStrip = new System.Windows.Forms.ToolStrip();
|
|
this.toolStripBtnIM = new System.Windows.Forms.ToolStripButton();
|
|
this.txtChatEntry = new System.Windows.Forms.TextBox();
|
|
this.splitContainer1.Panel1.SuspendLayout();
|
|
this.splitContainer1.Panel2.SuspendLayout();
|
|
this.splitContainer1.SuspendLayout();
|
|
this.cntxListNames.SuspendLayout();
|
|
this.menuStrip1.SuspendLayout();
|
|
this.toolStrip.SuspendLayout();
|
|
this.SuspendLayout();
|
|
//
|
|
// rChatHistory
|
|
//
|
|
this.rChatHistory.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.rChatHistory.AutoWordSelection = true;
|
|
this.rChatHistory.BackColor = System.Drawing.Color.White;
|
|
this.rChatHistory.Location = new System.Drawing.Point(3, 8);
|
|
this.rChatHistory.Name = "rChatHistory";
|
|
this.rChatHistory.ReadOnly = true;
|
|
this.rChatHistory.Size = new System.Drawing.Size(404, 274);
|
|
this.rChatHistory.TabIndex = 3;
|
|
this.rChatHistory.Text = "";
|
|
this.rChatHistory.LostFocus += new System.EventHandler(this.rChatHistory_LostFocus);
|
|
this.rChatHistory.GotFocus += new System.EventHandler(this.rChatHistory_Focused);
|
|
this.rChatHistory.TextChanged += new System.EventHandler(this.rChatHistory_TextChanged);
|
|
//
|
|
// 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(6, 52);
|
|
this.splitContainer1.Name = "splitContainer1";
|
|
//
|
|
// splitContainer1.Panel1
|
|
//
|
|
this.splitContainer1.Panel1.Controls.Add(this.rChatHistory);
|
|
//
|
|
// splitContainer1.Panel2
|
|
//
|
|
this.splitContainer1.Panel2.Controls.Add(this.listNames);
|
|
this.splitContainer1.Size = new System.Drawing.Size(564, 285);
|
|
this.splitContainer1.SplitterDistance = 410;
|
|
this.splitContainer1.TabIndex = 5;
|
|
//
|
|
// listNames
|
|
//
|
|
this.listNames.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.listNames.ContextMenuStrip = this.cntxListNames;
|
|
this.listNames.FormattingEnabled = true;
|
|
this.listNames.Location = new System.Drawing.Point(3, 8);
|
|
this.listNames.Name = "listNames";
|
|
this.listNames.Size = new System.Drawing.Size(144, 264);
|
|
this.listNames.TabIndex = 2;
|
|
//
|
|
// cntxListNames
|
|
//
|
|
this.cntxListNames.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
|
this.keyToolStripMenuItem,
|
|
this.toolStripSeparator2,
|
|
this.removeToolStripMenuItem});
|
|
this.cntxListNames.Name = "cntxListNames";
|
|
this.cntxListNames.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;
|
|
this.cntxListNames.ShowImageMargin = false;
|
|
this.cntxListNames.Size = new System.Drawing.Size(129, 54);
|
|
//
|
|
// keyToolStripMenuItem
|
|
//
|
|
this.keyToolStripMenuItem.Name = "keyToolStripMenuItem";
|
|
this.keyToolStripMenuItem.Size = new System.Drawing.Size(128, 22);
|
|
this.keyToolStripMenuItem.Text = "Print Key (UUID)";
|
|
this.keyToolStripMenuItem.Click += new System.EventHandler(this.KeyToolStripMenuItemClick);
|
|
//
|
|
// toolStripSeparator2
|
|
//
|
|
this.toolStripSeparator2.Name = "toolStripSeparator2";
|
|
this.toolStripSeparator2.Size = new System.Drawing.Size(125, 6);
|
|
//
|
|
// removeToolStripMenuItem
|
|
//
|
|
this.removeToolStripMenuItem.Name = "removeToolStripMenuItem";
|
|
this.removeToolStripMenuItem.Size = new System.Drawing.Size(128, 22);
|
|
this.removeToolStripMenuItem.Text = "Remove";
|
|
this.removeToolStripMenuItem.Click += new System.EventHandler(this.RemoveToolStripMenuItemClick);
|
|
//
|
|
// menuStrip1
|
|
//
|
|
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
|
this.fileToolStripMenuItem,
|
|
this.helpToolStripMenuItem});
|
|
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
|
|
this.menuStrip1.Name = "menuStrip1";
|
|
this.menuStrip1.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;
|
|
this.menuStrip1.Size = new System.Drawing.Size(579, 24);
|
|
this.menuStrip1.TabIndex = 4;
|
|
this.menuStrip1.Text = "menuStrip1";
|
|
//
|
|
// fileToolStripMenuItem
|
|
//
|
|
this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
|
this.loginToolStripMenuItem,
|
|
this.toolStripSeparator1,
|
|
this.exitToolStripMenuItem});
|
|
this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
|
|
this.fileToolStripMenuItem.Size = new System.Drawing.Size(35, 20);
|
|
this.fileToolStripMenuItem.Text = "&File";
|
|
//
|
|
// loginToolStripMenuItem
|
|
//
|
|
this.loginToolStripMenuItem.Name = "loginToolStripMenuItem";
|
|
this.loginToolStripMenuItem.Size = new System.Drawing.Size(111, 22);
|
|
this.loginToolStripMenuItem.Text = "&Login...";
|
|
this.loginToolStripMenuItem.Click += new System.EventHandler(this.LoginToolStripMenuItemClick);
|
|
//
|
|
// toolStripSeparator1
|
|
//
|
|
this.toolStripSeparator1.Name = "toolStripSeparator1";
|
|
this.toolStripSeparator1.Size = new System.Drawing.Size(108, 6);
|
|
//
|
|
// exitToolStripMenuItem
|
|
//
|
|
this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
|
|
this.exitToolStripMenuItem.Size = new System.Drawing.Size(111, 22);
|
|
this.exitToolStripMenuItem.Text = "E&xit";
|
|
this.exitToolStripMenuItem.Click += new System.EventHandler(this.ExitToolStripMenuItemClick);
|
|
//
|
|
// helpToolStripMenuItem
|
|
//
|
|
this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
|
this.aboutToolStripMenuItem});
|
|
this.helpToolStripMenuItem.Name = "helpToolStripMenuItem";
|
|
this.helpToolStripMenuItem.Size = new System.Drawing.Size(40, 20);
|
|
this.helpToolStripMenuItem.Text = "&Help";
|
|
//
|
|
// aboutToolStripMenuItem
|
|
//
|
|
this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
|
|
this.aboutToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
|
|
this.aboutToolStripMenuItem.Text = "&About";
|
|
this.aboutToolStripMenuItem.Click += new System.EventHandler(this.AboutToolStripMenuItemClick);
|
|
//
|
|
// btnSend
|
|
//
|
|
this.btnSend.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
|
this.btnSend.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
|
this.btnSend.Location = new System.Drawing.Point(491, 343);
|
|
this.btnSend.Name = "btnSend";
|
|
this.btnSend.Size = new System.Drawing.Size(73, 29);
|
|
this.btnSend.TabIndex = 1;
|
|
this.btnSend.Text = "Say";
|
|
this.btnSend.UseVisualStyleBackColor = true;
|
|
this.btnSend.Click += new System.EventHandler(this.BtnSendClick);
|
|
//
|
|
// toolStrip
|
|
//
|
|
this.toolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
|
|
this.toolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
|
this.toolStripBtnIM});
|
|
this.toolStrip.Location = new System.Drawing.Point(0, 24);
|
|
this.toolStrip.Name = "toolStrip";
|
|
this.toolStrip.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;
|
|
this.toolStrip.Size = new System.Drawing.Size(579, 25);
|
|
this.toolStrip.Stretch = true;
|
|
this.toolStrip.TabIndex = 6;
|
|
this.toolStrip.Text = "toolStrip";
|
|
//
|
|
// toolStripBtnIM
|
|
//
|
|
this.toolStripBtnIM.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
|
|
this.toolStripBtnIM.Image = ((System.Drawing.Image)(resources.GetObject("toolStripBtnIM.Image")));
|
|
this.toolStripBtnIM.ImageTransparentColor = System.Drawing.Color.Magenta;
|
|
this.toolStripBtnIM.Name = "toolStripBtnIM";
|
|
this.toolStripBtnIM.Size = new System.Drawing.Size(23, 22);
|
|
this.toolStripBtnIM.Text = "Instant Message";
|
|
this.toolStripBtnIM.Click += new System.EventHandler(this.ToolStripBtnIMClick);
|
|
//
|
|
// txtChatEntry
|
|
//
|
|
this.txtChatEntry.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
|
|
| System.Windows.Forms.AnchorStyles.Right)));
|
|
this.txtChatEntry.Location = new System.Drawing.Point(9, 343);
|
|
this.txtChatEntry.Name = "txtChatEntry";
|
|
this.txtChatEntry.Size = new System.Drawing.Size(479, 21);
|
|
this.txtChatEntry.TabIndex = 8;
|
|
this.txtChatEntry.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtChatEntry_KeyPress);
|
|
//
|
|
// ChatScreen
|
|
//
|
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
|
this.ClientSize = new System.Drawing.Size(579, 393);
|
|
this.Controls.Add(this.txtChatEntry);
|
|
this.Controls.Add(this.toolStrip);
|
|
this.Controls.Add(this.btnSend);
|
|
this.Controls.Add(this.splitContainer1);
|
|
this.Controls.Add(this.menuStrip1);
|
|
this.MainMenuStrip = this.menuStrip1;
|
|
this.MinimumSize = new System.Drawing.Size(400, 300);
|
|
this.Name = "ChatScreen";
|
|
this.Text = "Chat";
|
|
this.Closing += new System.ComponentModel.CancelEventHandler(this.ExitToolStripMenuItemClick);
|
|
this.splitContainer1.Panel1.ResumeLayout(false);
|
|
this.splitContainer1.Panel2.ResumeLayout(false);
|
|
this.splitContainer1.ResumeLayout(false);
|
|
this.cntxListNames.ResumeLayout(false);
|
|
this.menuStrip1.ResumeLayout(false);
|
|
this.menuStrip1.PerformLayout();
|
|
this.toolStrip.ResumeLayout(false);
|
|
this.toolStrip.PerformLayout();
|
|
this.ResumeLayout(false);
|
|
this.PerformLayout();
|
|
}
|
|
private System.Windows.Forms.ToolStripButton toolStripBtnIM;
|
|
private System.Windows.Forms.ToolStrip toolStrip;
|
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
|
|
private System.Windows.Forms.ToolStripMenuItem keyToolStripMenuItem;
|
|
private System.Windows.Forms.ToolStripMenuItem removeToolStripMenuItem;
|
|
private System.Windows.Forms.ContextMenuStrip cntxListNames;
|
|
private System.Windows.Forms.RichTextBox rChatHistory;
|
|
private System.Windows.Forms.TextBox txtChatEntry;
|
|
private System.Windows.Forms.Button btnSend;
|
|
private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem;
|
|
private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
|
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
|
private System.Windows.Forms.ToolStripMenuItem loginToolStripMenuItem;
|
|
private System.Windows.Forms.ListBox listNames;
|
|
private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem;
|
|
private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
|
|
private System.Windows.Forms.MenuStrip menuStrip1;
|
|
private System.Windows.Forms.SplitContainer splitContainer1;
|
|
|
|
public void callLogin(string firstname, string lastname, string password)
|
|
{
|
|
this.Text = "SLChat: "+firstname+" "+lastname;
|
|
fname = firstname;
|
|
lname = lastname;
|
|
pwrd = password;
|
|
//client = new SecondLife("keywords.txt", "protocol.txt");
|
|
rChatHistory.Text += newline + "Logging in..." + newline;
|
|
if(firstlog==true)
|
|
{
|
|
firstlog = false;
|
|
net = new NetCom(firstname, lastname, password, this);
|
|
loginthread = new Thread(new ThreadStart(net.Login));
|
|
loginthread.Start();
|
|
}else{
|
|
loginthread = new Thread(new ThreadStart(net.Login));
|
|
loginthread.Start();
|
|
}
|
|
}
|
|
|
|
private void rChatHistory_TextChanged(object sender, System.EventArgs e)
|
|
{
|
|
//TODO: Still some issues when new text is recieved. Fix.
|
|
|
|
//Make sure we automaticly skip down to the last line.
|
|
//But only if we're allowed to (i.e. chat history does
|
|
//not have focus)
|
|
if(chatAutoScroll==true)
|
|
{
|
|
rChatHistory.SelectionStart = rChatHistory.Text.Length;
|
|
rChatHistory.ScrollToCaret();
|
|
}
|
|
}
|
|
|
|
private void rChatHistory_Focused(object sender, System.EventArgs e)
|
|
{
|
|
//If we have focus, don't auto scroll.
|
|
//Why? Because usualy the control has focus when the
|
|
//user wishes to grab text or scroll themselves
|
|
//and it is annoying if the chat is jumping down on you.
|
|
chatAutoScroll = false;
|
|
}
|
|
|
|
private void rChatHistory_LostFocus(object sender, System.EventArgs e)
|
|
{
|
|
//See above.
|
|
chatAutoScroll = true;
|
|
}
|
|
|
|
public void ChatEffects(int lenColon, int lenFull, int type)
|
|
{
|
|
//TODO: Fix this so that it can highlight text,
|
|
//System text should be green with "System" being bold
|
|
//User text should be black or grey with "name" being
|
|
//a different color for each name (ala xchat).
|
|
|
|
lenFull = lenFull - 3;
|
|
// Determine the starting location of the word "fox".
|
|
//int index = rChatHistory.Text.IndexOf(searchString, ChatLeng);
|
|
//int index = rChatHistory.Find(searchString);
|
|
txtChatEntry.Text += ":/ "+ChatLeng+", "+lenColon+", "+lenFull;
|
|
// Determine if the word has been found and select it if it was.
|
|
//if (index != -1)
|
|
//{
|
|
rChatHistory.DeselectAll();
|
|
rChatHistory.Select(ChatLeng, lenFull);
|
|
rChatHistory.SelectionFont = new Font(
|
|
rChatHistory.SelectionFont.FontFamily,
|
|
rChatHistory.SelectionFont.Size,
|
|
FontStyle.Regular);
|
|
rChatHistory.SelectionColor = System.Drawing.Color.Black;
|
|
|
|
txtChatEntry.Text += ":/ "+rChatHistory.SelectedText+", "+type+",#";
|
|
if(type==1)
|
|
{
|
|
//System message, such as MOTD
|
|
rChatHistory.SelectionColor = System.Drawing.Color.ForestGreen;
|
|
rChatHistory.SelectionFont = new Font(
|
|
rChatHistory.SelectionFont.FontFamily,
|
|
rChatHistory.SelectionFont.Size,
|
|
FontStyle.Regular);
|
|
}else if(type==2){
|
|
rChatHistory.SelectionColor = System.Drawing.Color.Black;
|
|
rChatHistory.SelectionFont = new Font(
|
|
rChatHistory.SelectionFont.FontFamily,
|
|
rChatHistory.SelectionFont.Size,
|
|
FontStyle.Regular);
|
|
}
|
|
rChatHistory.DeselectAll();
|
|
rChatHistory.Select(ChatLeng, lenColon);
|
|
rChatHistory.SelectionFont = new Font(
|
|
rChatHistory.SelectionFont.FontFamily,
|
|
rChatHistory.SelectionFont.Size,
|
|
FontStyle.Regular);
|
|
rChatHistory.SelectionColor = System.Drawing.Color.Black;
|
|
//int colon = searchString.IndexOf(":",0) + 1;
|
|
//txtChatEntry.Text += colon+",colon, "+searchString;
|
|
//int colon = rChatHistory.Find(":",index,RichTextBoxFinds.None);
|
|
//if(colon != -1)
|
|
//{
|
|
//int testLen = colon - index;
|
|
|
|
txtChatEntry.Text += ":/ "+rChatHistory.SelectedText+", "+type+",,";
|
|
//System.Drawing.Font currentFont = rChatHistory.SelectionFont;
|
|
if(type==1){
|
|
rChatHistory.SelectionColor = System.Drawing.Color.ForestGreen;
|
|
rChatHistory.SelectionFont = new Font(
|
|
rChatHistory.SelectionFont.FontFamily,
|
|
rChatHistory.SelectionFont.Size,
|
|
FontStyle.Bold);
|
|
}else if(type==2){
|
|
//Regular chat, such as names, etc.
|
|
rChatHistory.SelectionColor = System.Drawing.Color.Blue;
|
|
rChatHistory.SelectionFont = new Font(
|
|
rChatHistory.SelectionFont.FontFamily,
|
|
rChatHistory.SelectionFont.Size,
|
|
FontStyle.Bold);
|
|
}
|
|
//}
|
|
//txtChatEntry.Text = searchString;
|
|
rChatHistory.DeselectAll();
|
|
rChatHistory.SelectionFont = new Font(
|
|
rChatHistory.SelectionFont.FontFamily,
|
|
rChatHistory.SelectionFont.Size,
|
|
FontStyle.Regular);
|
|
rChatHistory.SelectionColor = System.Drawing.Color.Black;
|
|
ChatLeng = rChatHistory.Text.Length;
|
|
//}else{
|
|
//txtChatEntry.Text = "Not found";
|
|
//}
|
|
}
|
|
|
|
private void txtChatEntry_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
|
|
{
|
|
//When the enter key is pressed in the txtChatEntry
|
|
int key = (int) e.KeyChar;
|
|
if(key == (int) Keys.Enter)
|
|
{
|
|
if(btnSend.Enabled)
|
|
{
|
|
BtnSendClick(sender, e);
|
|
e.Handled = true;
|
|
}
|
|
else
|
|
{
|
|
;
|
|
}
|
|
}
|
|
}
|
|
|
|
void ExitToolStripMenuItemClick(object sender, System.EventArgs e)
|
|
{
|
|
//This is our exiting function.
|
|
if(loggedin==true)
|
|
{
|
|
rChatHistory.Text += newline + "Logging out...";
|
|
net.Logout();
|
|
}
|
|
|
|
if(loggedin==false)
|
|
{
|
|
//Cleanup thread call just incase.
|
|
if(loginthread.IsAlive)
|
|
{
|
|
loginthread.Abort();
|
|
}
|
|
Application.Exit();
|
|
}
|
|
//System.Windows.Forms.Application.Exit()
|
|
//System.Environment.Exit(1)
|
|
}
|
|
|
|
void LoginToolStripMenuItemClick(object sender, System.EventArgs e)
|
|
{
|
|
//Our login menu option from File.
|
|
//If loggedin, we log out. (should show loginwindow too
|
|
//after successfull log out)
|
|
//If loggedout, show login window (winLogin).
|
|
if(loggedin==false)
|
|
{
|
|
if(loginVisible==false)
|
|
{
|
|
winLog.chatCreated = true;
|
|
winLog.Show();
|
|
loginVisible = true;
|
|
}else{
|
|
winLog.Focus();
|
|
}
|
|
}else{
|
|
net.Logout();
|
|
}
|
|
}
|
|
|
|
void BtnSendClick(object sender, System.EventArgs e)
|
|
{
|
|
//SL will actualy accept "" chat, but we don't
|
|
//want to encourage that.
|
|
if(txtChatEntry.Text != "")
|
|
{
|
|
//No need to handle sending "You" text localy, this is
|
|
//bad anyway, we want to make sure we get all text
|
|
//even our own, from the server bouncing it back.
|
|
|
|
//Takes the chat and sends it to our net function "ChatOut"
|
|
//which handles all outgoing chat sending.
|
|
//Text, Type (say, shout, whisper), Channel (0 == public)
|
|
net.ChatOut(txtChatEntry.Text,0,0);
|
|
//Clear the chat entry textbox.
|
|
txtChatEntry.Text = "";
|
|
}
|
|
}
|
|
|
|
void RemoveToolStripMenuItemClick(object sender, System.EventArgs e)
|
|
{
|
|
//Removing a user from the Names List. This should
|
|
//perhaps be done automaticly somehow, maybe by offline
|
|
//status or distance?
|
|
if(this.listNames.Items.ToString() != "")
|
|
{
|
|
//This is basicly removing the person from our
|
|
//userHash, hashtable, which stores Name and Key used
|
|
//for printing key to chat.
|
|
if(userHash.ContainsKey(listNames.SelectedItem.ToString()))
|
|
{
|
|
//Remove from our hashtable, just to keep things clean.
|
|
userHash.Remove(listNames.SelectedItem.ToString());
|
|
//Remove from the actual list element.
|
|
listNames.Items.Remove(listNames.SelectedItem);
|
|
}
|
|
}
|
|
}
|
|
|
|
void KeyToolStripMenuItemClick(object sender, System.EventArgs e)
|
|
{
|
|
//This prints the selected user's Key to rChatHistory
|
|
//with the pretext of "Program:"
|
|
if(userHash.ContainsKey(listNames.SelectedItem.ToString()))
|
|
{
|
|
IDictionaryEnumerator myEnum = userHash.GetEnumerator();
|
|
while (myEnum.MoveNext())
|
|
{
|
|
if(myEnum.Key.ToString()==listNames.SelectedItem.ToString())
|
|
{
|
|
string name = myEnum.Key.ToString();
|
|
string key = myEnum.Value.ToString();
|
|
key = key.Insert(8,"-");
|
|
key = key.Insert(13,"-");
|
|
key = key.Insert(18,"-");
|
|
key = key.Insert(23,"-");
|
|
rChatHistory.Text += newline + "Program: "+ name + " == " + key;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void ToolStripBtnIMClick(object sender, System.EventArgs e)
|
|
{
|
|
//This will probably be removed in favor for an
|
|
//xchat like interface with a new IM appearing in
|
|
//a tab button at the bottom of the main window
|
|
//instead of a new window alltogether.
|
|
winIM IM = new winIM();
|
|
IM.Show();
|
|
}
|
|
|
|
public void ReturnData(string data, int type, string extra1, string extra2)
|
|
{
|
|
//This is how we get data back from our NetCom.cs file
|
|
//we use the returned data in a certain way to output
|
|
//it for the interface.
|
|
if(type==1)
|
|
{
|
|
//Reply Type: Login
|
|
if(extra1!="error")
|
|
{
|
|
loginToolStripMenuItem.Text = "Logout";
|
|
//string loginReply = Login(firstname, lastname, password);
|
|
//string loginReply = "OMG WHATS: ON YUR FACE?! Yes yes yes cabam shamzaameiawml" + newline;
|
|
rChatHistory.Text += data + newline;
|
|
//ChatEffects(loginReply,1);
|
|
//string text2 = "Bob Smith: AHWIWEAM W!";
|
|
//rChatHistory.Text += text2 + newline;
|
|
//ChatEffects(18,loginReply.Length,1);
|
|
loggedin = true;
|
|
}else if(extra1=="error"){
|
|
rChatHistory.Text += data + newline;
|
|
loggedin = false;
|
|
}
|
|
}else if(type==2){
|
|
//Reply Type: Logout
|
|
loginToolStripMenuItem.Text = "Login...";
|
|
this.Text = "SLChat";
|
|
rChatHistory.Text += data;
|
|
loggedin = false;
|
|
//Cleanup thread call just incase.
|
|
if(loginthread.IsAlive)
|
|
{
|
|
loginthread.Abort();
|
|
}
|
|
}else if(type==3){
|
|
//Reply Type: Chat
|
|
|
|
//Add the name if it is not already added to the list
|
|
//Might want to check hashtable instead of listelement
|
|
if(!listNames.Items.Contains(extra1)){
|
|
listNames.Items.Add(extra1);
|
|
//Add the Name (extra1) and Key (extra2) of the
|
|
//resident who spoke. Used for printing key.
|
|
userHash.Add(extra1,extra2);
|
|
}
|
|
//Printing actual chat.
|
|
rChatHistory.Text += data;
|
|
//ChatEffects(name.Length,output.Length,2);
|
|
}
|
|
}
|
|
|
|
void AboutToolStripMenuItemClick(object sender, System.EventArgs e)
|
|
{
|
|
if(aboutVisible==false)
|
|
{
|
|
winAboot = new winAbout();
|
|
winAboot.Show();
|
|
}else{
|
|
winAboot.Show();
|
|
}
|
|
}
|
|
}
|
|
}
|