OSDN Git Service

Renamed netcom namespace
[radegast/radegast.git] / Radegast / GUI / Consoles / IMTabWindow.cs
1 // \r
2 // Radegast Metaverse Client\r
3 // Copyright (c) 2009, Radegast Development Team\r
4 // All rights reserved.\r
5 // \r
6 // Redistribution and use in source and binary forms, with or without\r
7 // modification, are permitted provided that the following conditions are met:\r
8 // \r
9 //     * Redistributions of source code must retain the above copyright notice,\r
10 //       this list of conditions and the following disclaimer.\r
11 //     * Redistributions in binary form must reproduce the above copyright\r
12 //       notice, this list of conditions and the following disclaimer in the\r
13 //       documentation and/or other materials provided with the distribution.\r
14 //     * Neither the name of the application "Radegast", nor the names of its\r
15 //       contributors may be used to endorse or promote products derived from\r
16 //       this software without specific prior written permission.\r
17 // \r
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
19 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
20 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
21 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r
22 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
23 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
24 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r
25 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r
26 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
27 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
28 //\r
29 // $Id$\r
30 //\r
31 using System;\r
32 using System.Collections.Generic;\r
33 using System.ComponentModel;\r
34 using System.Drawing;\r
35 using System.Data;\r
36 using System.Text;\r
37 using System.Windows.Forms;\r
38 using Radegast.Netcom;\r
39 using OpenMetaverse;\r
40 \r
41 namespace Radegast\r
42 {\r
43     public partial class IMTabWindow : UserControl\r
44     {\r
45         private RadegastInstance instance;\r
46         private RadegastNetcom netcom { get { return instance.Netcom; } }\r
47         private UUID target;\r
48         private UUID session;\r
49         private string toName;\r
50         private IMTextManager textManager;\r
51         private bool typing = false;\r
52 \r
53         public IMTabWindow(RadegastInstance instance, UUID target, UUID session, string toName)\r
54         {\r
55             InitializeComponent();\r
56             Disposed += new EventHandler(IMTabWindow_Disposed);\r
57 \r
58             this.instance = instance;\r
59 \r
60             this.target = target;\r
61             this.session = session;\r
62             this.toName = toName;\r
63 \r
64             textManager = new IMTextManager(this.instance, new RichTextBoxPrinter(rtbIMText), this.session, toName);\r
65             ApplyConfig(this.instance.Config.CurrentConfig);\r
66             this.instance.Config.ConfigApplied += new EventHandler<ConfigAppliedEventArgs>(Config_ConfigApplied);\r
67         }\r
68 \r
69         private void IMTabWindow_Disposed(object sender, EventArgs e)\r
70         {\r
71             this.instance.Config.ConfigApplied -= new EventHandler<ConfigAppliedEventArgs>(Config_ConfigApplied);\r
72             CleanUp();\r
73         }\r
74 \r
75         private void Config_ConfigApplied(object sender, ConfigAppliedEventArgs e)\r
76         {\r
77             ApplyConfig(e.AppliedConfig);\r
78         }\r
79 \r
80         private void ApplyConfig(Config config)\r
81         {\r
82             if (config.InterfaceStyle == 0) //System\r
83                 toolStrip1.RenderMode = ToolStripRenderMode.System;\r
84             else if (config.InterfaceStyle == 1) //Office 2003\r
85                 toolStrip1.RenderMode = ToolStripRenderMode.ManagerRenderMode;\r
86         }\r
87 \r
88         private void AddNetcomEvents()\r
89         {\r
90             netcom.ClientLoginStatus += new EventHandler<ClientLoginEventArgs>(netcom_ClientLoginStatus);\r
91             netcom.ClientDisconnected += new EventHandler<ClientDisconnectEventArgs>(netcom_ClientDisconnected);\r
92         }\r
93 \r
94         private void RemoveNetcomEvents()\r
95         {\r
96             netcom.ClientLoginStatus -= new EventHandler<ClientLoginEventArgs>(netcom_ClientLoginStatus);\r
97             netcom.ClientDisconnected -= new EventHandler<ClientDisconnectEventArgs>(netcom_ClientDisconnected);\r
98         }\r
99 \r
100         private void netcom_ClientLoginStatus(object sender, ClientLoginEventArgs e)\r
101         {\r
102             if (e.Status != LoginStatus.Success) return;\r
103 \r
104             RefreshControls();\r
105         }\r
106 \r
107         private void netcom_ClientDisconnected(object sender, ClientDisconnectEventArgs e)\r
108         {\r
109             RefreshControls();\r
110         }\r
111 \r
112         public void CleanUp()\r
113         {\r
114             instance.TabConsole.RemoveTab(SessionId.ToString());\r
115             textManager.CleanUp();\r
116             textManager = null;\r
117         }\r
118 \r
119         private void btnSend_Click(object sender, EventArgs e)\r
120         {\r
121             netcom.SendInstantMessage(cbxInput.Text, target, session);\r
122             this.ClearIMInput();\r
123         }\r
124 \r
125         private void cbxInput_TextChanged(object sender, EventArgs e)\r
126         {\r
127             RefreshControls();\r
128         }\r
129 \r
130         private void RefreshControls()\r
131         {\r
132             if (!netcom.IsLoggedIn)\r
133             {\r
134                 cbxInput.Enabled = false;\r
135                 btnSend.Enabled = false;\r
136                 return;\r
137             }\r
138 \r
139             if (cbxInput.Text.Length > 0)\r
140             {\r
141                 btnSend.Enabled = true;\r
142 \r
143                 if (!typing)\r
144                 {\r
145                     netcom.SendIMStartTyping(target, session);\r
146                     typing = true;\r
147                 }\r
148             }\r
149             else\r
150             {\r
151                 btnSend.Enabled = false;\r
152                 netcom.SendIMStopTyping(target, session);\r
153                 typing = false;\r
154             }\r
155         }\r
156 \r
157         private void cbxInput_KeyUp(object sender, KeyEventArgs e)\r
158         {\r
159             if (e.KeyCode != Keys.Enter) return;\r
160             e.SuppressKeyPress = true;\r
161             if (cbxInput.Text.Length == 0) return;\r
162 \r
163             netcom.SendInstantMessage(cbxInput.Text, target, session);\r
164             this.ClearIMInput();\r
165         }\r
166 \r
167         private void ClearIMInput()\r
168         {\r
169             cbxInput.Items.Add(cbxInput.Text);\r
170             cbxInput.Text = string.Empty;\r
171         }\r
172 \r
173         public void SelectIMInput()\r
174         {\r
175             cbxInput.Select();\r
176         }\r
177 \r
178         private void rtbIMText_LinkClicked(object sender, LinkClickedEventArgs e)\r
179         {\r
180             instance.MainForm.processLink(e.LinkText);\r
181         }\r
182 \r
183         private void tbtnProfile_Click(object sender, EventArgs e)\r
184         {\r
185             (new frmProfile(instance, toName, target)).Show();\r
186         }\r
187 \r
188         private void cbxInput_KeyDown(object sender, KeyEventArgs e)\r
189         {\r
190             if (e.KeyCode == Keys.Enter) e.SuppressKeyPress = true;\r
191         }\r
192 \r
193         public UUID TargetId\r
194         {\r
195             get { return target; }\r
196             set { target = value; }\r
197         }\r
198 \r
199         public string TargetName\r
200         {\r
201             get { return toName; }\r
202             set { toName = value; }\r
203         }\r
204 \r
205         public UUID SessionId\r
206         {\r
207             get { return session; }\r
208             set { session = value; }\r
209         }\r
210 \r
211         public IMTextManager TextManager\r
212         {\r
213             get { return textManager; }\r
214             set { textManager = value; }\r
215         }\r
216     }\r
217 }\r