OSDN Git Service

Fixes for Map on Mono, new icons on the status bar, clickin SLURLs opens map
[radegast/radegast.git] / Radegast / GUI / Consoles / GroupIMTabWindow.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.ComponentModel;\r
4 using System.Drawing;\r
5 using System.Data;\r
6 using System.Text;\r
7 using System.Windows.Forms;\r
8 using System.Threading;\r
9 using RadegastNc;\r
10 using OpenMetaverse;\r
11 \r
12 namespace Radegast\r
13 {\r
14     public partial class GroupIMTabWindow : UserControl\r
15     {\r
16         private RadegastInstance instance;\r
17         private GridClient client { get { return instance.Client; } }\r
18         private RadegastNetcom netcom { get { return instance.Netcom; } }\r
19         private UUID session;\r
20         private IMTextManager textManager;\r
21 \r
22         ManualResetEvent WaitForSessionStart = new ManualResetEvent(false);\r
23 \r
24         public GroupIMTabWindow(RadegastInstance instance, UUID session)\r
25         {\r
26             InitializeComponent();\r
27             Disposed += new EventHandler(IMTabWindow_Disposed);\r
28 \r
29             this.instance = instance;\r
30             this.session = session;\r
31 \r
32             textManager = new IMTextManager(this.instance, new RichTextBoxPrinter(rtbIMText), this.session);\r
33             ApplyConfig(this.instance.Config.CurrentConfig);\r
34             \r
35             // Callbacks\r
36             this.instance.Config.ConfigApplied += new EventHandler<ConfigAppliedEventArgs>(Config_ConfigApplied);\r
37             client.Self.OnGroupChatJoin += new AgentManager.GroupChatJoinedCallback(Self_OnGroupChatJoin);\r
38 \r
39             client.Self.RequestJoinGroupChat(session);\r
40         }\r
41 \r
42         private void IMTabWindow_Disposed(object sender, EventArgs e)\r
43         {\r
44             this.instance.Config.ConfigApplied -= new EventHandler<ConfigAppliedEventArgs>(Config_ConfigApplied);\r
45             client.Self.OnGroupChatJoin -= new AgentManager.GroupChatJoinedCallback(Self_OnGroupChatJoin);\r
46             CleanUp();\r
47         }\r
48 \r
49 \r
50         void Self_OnGroupChatJoin(UUID groupChatSessionID, string sessionName, UUID tmpSessionID, bool success)\r
51         {\r
52             if (groupChatSessionID != session && tmpSessionID != session) {\r
53                 return;\r
54             }\r
55 \r
56             if (InvokeRequired) {\r
57                 Invoke(new MethodInvoker(\r
58                     delegate()\r
59                     {\r
60                         Self_OnGroupChatJoin(groupChatSessionID, sessionName, tmpSessionID, success);\r
61                     }\r
62                     )\r
63                 );\r
64                 return;\r
65             }\r
66             if (success) {\r
67                 textManager.TextPrinter.PrintTextLine("Join Group Chat Success!", Color.Green);\r
68                 WaitForSessionStart.Set();\r
69             } else {\r
70                 textManager.TextPrinter.PrintTextLine("Join Group Chat failed.", Color.Red);\r
71             }\r
72         }\r
73 \r
74         private void Config_ConfigApplied(object sender, ConfigAppliedEventArgs e)\r
75         {\r
76             ApplyConfig(e.AppliedConfig);\r
77         }\r
78 \r
79         private void ApplyConfig(Config config)\r
80         {\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 \r
89         private void AddNetcomEvents()\r
90         {\r
91             netcom.ClientLoginStatus += new EventHandler<ClientLoginEventArgs>(netcom_ClientLoginStatus);\r
92             netcom.ClientDisconnected += new EventHandler<ClientDisconnectEventArgs>(netcom_ClientDisconnected);\r
93         }\r
94 \r
95         private void netcom_ClientLoginStatus(object sender, ClientLoginEventArgs e)\r
96         {\r
97             if (e.Status != LoginStatus.Success) return;\r
98 \r
99             RefreshControls();\r
100         }\r
101 \r
102         private void netcom_ClientDisconnected(object sender, ClientDisconnectEventArgs e)\r
103         {\r
104             RefreshControls();\r
105         }\r
106 \r
107         public void CleanUp()\r
108         {\r
109             textManager.CleanUp();\r
110             textManager = null;\r
111         }\r
112 \r
113         private void btnSend_Click(object sender, EventArgs e)\r
114         {\r
115             //netcom.SendInstantMessage(cbgInput.Text, target, session);\r
116             this.ClearIMInput();\r
117         }\r
118 \r
119         private void cbxInput_TextChanged(object sender, EventArgs e)\r
120         {\r
121             RefreshControls();\r
122         }\r
123 \r
124         private void RefreshControls()\r
125         {\r
126             if (!netcom.IsLoggedIn)\r
127             {\r
128                 cbgInput.Enabled = false;\r
129                 btnSend.Enabled = false;\r
130                 return;\r
131             }\r
132 \r
133         }\r
134 \r
135         private void cbxInput_KeyUp(object sender, KeyEventArgs e)\r
136         {\r
137             if (e.KeyCode != Keys.Enter) return;\r
138             e.SuppressKeyPress = true;\r
139             if (cbgInput.Text.Length == 0) return;\r
140 \r
141             string message = cbgInput.Text;\r
142             if (message.Length > 1023) message = message.Remove(1023);\r
143 \r
144             if (!client.Self.GroupChatSessions.ContainsKey(session)) {\r
145                 WaitForSessionStart.Reset();\r
146                 client.Self.RequestJoinGroupChat(session);\r
147             } else {\r
148                 WaitForSessionStart.Set();\r
149             }\r
150 \r
151             if (WaitForSessionStart.WaitOne(10000, false)) {\r
152                 client.Self.InstantMessageGroup(session, message);\r
153             } else {\r
154                 textManager.TextPrinter.PrintTextLine("Cannot send group IM.", Color.Red);\r
155             }\r
156             this.ClearIMInput();\r
157         }\r
158 \r
159         private void ClearIMInput()\r
160         {\r
161             cbgInput.Items.Add(cbgInput.Text);\r
162             cbgInput.Text = string.Empty;\r
163         }\r
164 \r
165         public void SelectIMInput()\r
166         {\r
167             cbgInput.Select();\r
168         }\r
169 \r
170         private void rtbIMText_LinkClicked(object sender, LinkClickedEventArgs e)\r
171         {\r
172             instance.MainForm.processLink(e.LinkText);\r
173         }\r
174 \r
175         private void cbxInput_KeyDown(object sender, KeyEventArgs e)\r
176         {\r
177             if (e.KeyCode == Keys.Enter) e.SuppressKeyPress = true;\r
178         }\r
179 \r
180         public UUID SessionId\r
181         {\r
182             get { return session; }\r
183             set { session = value; }\r
184         }\r
185 \r
186         public IMTextManager TextManager\r
187         {\r
188             get { return textManager; }\r
189             set { textManager = value; }\r
190         }\r
191     }\r
192 }\r