OSDN Git Service

RAD-343: Configure/disable LookAt Beacon (client identification possible)
[radegast/radegast.git] / Radegast / GUI / Dialogs / Settings.cs
1 
2 // 
3 // Radegast Metaverse Client
4 // Copyright (c) 2009-2012, Radegast Development Team
5 // All rights reserved.
6 // 
7 // Redistribution and use in source and binary forms, with or without
8 // modification, are permitted provided that the following conditions are met:
9 // 
10 //     * Redistributions of source code must retain the above copyright notice,
11 //       this list of conditions and the following disclaimer.
12 //     * Redistributions in binary form must reproduce the above copyright
13 //       notice, this list of conditions and the following disclaimer in the
14 //       documentation and/or other materials provided with the distribution.
15 //     * Neither the name of the application "Radegast", nor the names of its
16 //       contributors may be used to endorse or promote products derived from
17 //       this software without specific prior written permission.
18 // 
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 //
30 // $Id$
31 //
32 using System;
33 using System.Collections.Generic;
34 using System.ComponentModel;
35 using System.Data;
36 using System.Drawing;
37 using System.Linq;
38 using System.Text;
39 using System.Windows.Forms;
40 using OpenMetaverse.StructuredData;
41
42 namespace Radegast
43 {
44     public enum AutoResponseType : int
45     {
46         WhenBusy = 0,
47         WhenFromNonFriend = 1,
48         Always = 2
49     }
50
51     public partial class frmSettings : RadegastForm
52     {
53         private Settings s;
54         private static bool settingInitialized = false;
55
56         public static void InitSettigs(Settings s)
57         {
58             if (s["im_timestamps"].Type == OSDType.Unknown)
59             {
60                 s["im_timestamps"] = OSD.FromBoolean(true);
61             }
62
63             if (s["rlv_enabled"].Type == OSDType.Unknown)
64             {
65                 s["rlv_enabled"] = new OSDBoolean(false);
66             }
67
68             if (s["mu_emotes"].Type == OSDType.Unknown)
69             {
70                 s["mu_emotes"] = new OSDBoolean(false);
71             }
72
73             if (s["friends_notification_highlight"].Type == OSDType.Unknown)
74             {
75                 s["friends_notification_highlight"] = new OSDBoolean(true);
76             }
77
78             if (!s.ContainsKey("no_typing_anim")) s["no_typing_anim"] = OSD.FromBoolean(false);
79
80             if (!s.ContainsKey("auto_response_type"))
81             {
82                 s["auto_response_type"] = (int)AutoResponseType.WhenBusy;
83                 s["auto_response_text"] = "The Resident you messaged is in 'busy mode' which means they have requested not to be disturbed.  Your message will still be shown in their IM panel for later viewing.";
84             }
85
86             if (!s.ContainsKey("script_syntax_highlight")) s["script_syntax_highlight"] = OSD.FromBoolean(true);
87
88             if (!s.ContainsKey("display_name_mode")) s["display_name_mode"] = (int)NameMode.Smart;
89
90             // Convert legacy settings from first last name to username
91             if (!s.ContainsKey("username") && (s.ContainsKey("first_name") && s.ContainsKey("last_name")))
92             {
93                 s["username"] = s["first_name"] + " " + s["last_name"];
94                 s.Remove("first_name");
95                 s.Remove("last_name");
96             }
97
98             if (!s.ContainsKey("reconnect_time")) s["reconnect_time"] = 120;
99
100             if (!s.ContainsKey("transaction_notification_chat")) s["transaction_notification_chat"] = true;
101
102             if (!s.ContainsKey("transaction_notification_dialog")) s["transaction_notification_dialog"] = true;
103
104             if (!s.ContainsKey("minimize_to_tray")) s["minimize_to_tray"] = false;
105
106             if (!s.ContainsKey("scene_window_docked")) s["scene_window_docked"] = true;
107
108             if (!s.ContainsKey("taskbar_highlight")) s["taskbar_highlight"] = true;
109
110             if (!s.ContainsKey("rendering_occlusion_culling_enabled")) s["rendering_occlusion_culling_enabled"] = true;
111
112             if (!s.ContainsKey("rendering_use_vbo")) s["rendering_use_vbo"] = true;
113
114             if (!s.ContainsKey("send_rad_client_tag")) s["send_rad_client_tag"] = true;
115
116             if (!s.ContainsKey("log_to_file")) s["log_to_file"] = true;
117
118             if (!s.ContainsKey("disable_chat_im_log")) s["disable_chat_im_log"] = false;\r
119 \r
120             if (!s.ContainsKey("disable_look_at")) s["disable_look_at"] = false;
121         }
122
123         public frmSettings(RadegastInstance instance)
124         {
125             if (settingInitialized)
126             {
127                 frmSettings.InitSettigs(instance.GlobalSettings);
128             }
129
130             InitializeComponent();
131
132             s = instance.GlobalSettings;
133             tbpGraphics.Controls.Add(new Radegast.Rendering.GraphicsPreferences(instance));
134             cbChatTimestamps.Checked = s["chat_timestamps"].AsBoolean();
135
136             cbIMTimeStamps.Checked = s["im_timestamps"].AsBoolean();
137
138             cbChatTimestamps.CheckedChanged += new EventHandler(cbChatTimestamps_CheckedChanged);
139             cbIMTimeStamps.CheckedChanged += new EventHandler(cbIMTimeStamps_CheckedChanged);
140
141             cbTrasactDialog.Checked = s["transaction_notification_dialog"].AsBoolean();
142             cbTrasactChat.Checked = s["transaction_notification_chat"].AsBoolean();
143
144             cbFriendsNotifications.Checked = s["show_friends_online_notifications"].AsBoolean();
145             cbFriendsNotifications.CheckedChanged += new EventHandler(cbFriendsNotifications_CheckedChanged);
146
147             cbAutoReconnect.Checked = s["auto_reconnect"].AsBoolean();
148             cbAutoReconnect.CheckedChanged += new EventHandler(cbAutoReconnect_CheckedChanged);
149
150             cbHideLoginGraphics.Checked = s["hide_login_graphics"].AsBoolean();
151             cbHideLoginGraphics.CheckedChanged += new EventHandler(cbHideLoginGraphics_CheckedChanged);
152
153             cbRLV.Checked = s["rlv_enabled"].AsBoolean();
154             cbRLV.CheckedChanged += (object sender, EventArgs e) =>
155             {
156                 s["rlv_enabled"] = new OSDBoolean(cbRLV.Checked);
157             };
158
159             cbMUEmotes.Checked = s["mu_emotes"].AsBoolean();
160             cbMUEmotes.CheckedChanged += (object sender, EventArgs e) =>
161             {
162                 s["mu_emotes"] = new OSDBoolean(cbMUEmotes.Checked);
163             };
164
165             cbFriendsHighlight.Checked = s["friends_notification_highlight"].AsBoolean();
166             cbFriendsHighlight.CheckedChanged += (object sender, EventArgs e) =>
167             {
168                 s["friends_notification_highlight"] = new OSDBoolean(cbFriendsHighlight.Checked);
169             };
170
171             if (s["chat_font_size"].Type != OSDType.Real)
172             {
173                 s["chat_font_size"] = OSD.FromReal(((ChatConsole)instance.TabConsole.Tabs["chat"].Control).cbxInput.Font.Size);
174             }
175
176             cbFontSize.Text = s["chat_font_size"].AsReal().ToString(System.Globalization.CultureInfo.InvariantCulture);
177
178             if (!s.ContainsKey("minimize_to_tray")) s["minimize_to_tray"] = OSD.FromBoolean(false);
179             cbMinToTrey.Checked = s["minimize_to_tray"].AsBoolean();
180             cbMinToTrey.CheckedChanged += (object sender, EventArgs e) =>
181                 {
182                     s["minimize_to_tray"] = OSD.FromBoolean(cbMinToTrey.Checked);
183                 };
184
185
186             cbNoTyping.Checked = s["no_typing_anim"].AsBoolean();
187             cbNoTyping.CheckedChanged += (object sender, EventArgs e) =>
188             {
189                 s["no_typing_anim"] = OSD.FromBoolean(cbNoTyping.Checked);
190             };
191
192             txtAutoResponse.Text = s["auto_response_text"];
193             txtAutoResponse.TextChanged += (object sender, EventArgs e) =>
194                 {
195                     s["auto_response_text"] = txtAutoResponse.Text;
196                 };
197             AutoResponseType art = (AutoResponseType)s["auto_response_type"].AsInteger();
198             switch (art)
199             {
200                 case AutoResponseType.WhenBusy: rbAutobusy.Checked = true; break;
201                 case AutoResponseType.WhenFromNonFriend: rbAutoNonFriend.Checked = true; break;
202                 case AutoResponseType.Always: rbAutoAlways.Checked = true; break;
203             }
204
205             cbSyntaxHighlight.Checked = s["script_syntax_highlight"].AsBoolean();
206             cbSyntaxHighlight.CheckedChanged += (object sender, EventArgs e) =>
207             {
208                 s["script_syntax_highlight"] = OSD.FromBoolean(cbSyntaxHighlight.Checked);
209             };
210
211             switch ((NameMode)s["display_name_mode"].AsInteger())
212             {
213                 case NameMode.Standard: rbDNOff.Checked = true; break;
214                 case NameMode.Smart: rbDNSmart.Checked = true; break;
215                 case NameMode.DisplayNameAndUserName: rbDNDandUsernme.Checked = true; break;
216                 case NameMode.OnlyDisplayName: rbDNOnlyDN.Checked = true; break;
217             }
218
219             txtReconnectTime.Text = s["reconnect_time"].AsInteger().ToString();
220
221             cbTaskBarHighLight.Checked = s["taskbar_highlight"];
222             cbTaskBarHighLight.CheckedChanged += (sender, e) =>
223             {
224                 s["taskbar_highlight"] = cbTaskBarHighLight.Checked;
225             };
226
227             cbRadegastClientTag.Checked = s["send_rad_client_tag"];
228             cbRadegastClientTag.CheckedChanged += (sender, e) =>
229             {
230                 s["send_rad_client_tag"] = cbRadegastClientTag.Checked;
231                 instance.SetClientTag();
232             };
233
234             cbOnInvOffer.SelectedIndex = s["inv_auto_accept_mode"].AsInteger();
235             cbOnInvOffer.SelectedIndexChanged += (sender, e) =>
236             {
237                 s["inv_auto_accept_mode"] = cbOnInvOffer.SelectedIndex;
238             };
239
240             cbRadegastLogToFile.Checked = s["log_to_file"];
241
242             cbDisableChatIMLog.Checked = s["disable_chat_im_log"];
243             cbDisableChatIMLog.CheckedChanged += (sender, e) =>
244             {
245                 s["disable_chat_im_log"] = cbDisableChatIMLog.Checked;
246             };
247
248             cbDisableLookAt.Checked = s["disable_look_at"];\r
249             cbDisableLookAt.CheckedChanged += (sender, e) =>
250             {\r
251                 s["disable_look_at"] = cbDisableLookAt.Checked;
252             };
253         }
254
255         void cbHideLoginGraphics_CheckedChanged(object sender, EventArgs e)
256         {
257             s["hide_login_graphics"] = OSD.FromBoolean(cbHideLoginGraphics.Checked);
258         }
259
260         void cbAutoReconnect_CheckedChanged(object sender, EventArgs e)
261         {
262             s["auto_reconnect"] = OSD.FromBoolean(cbAutoReconnect.Checked);
263         }
264
265         void cbFriendsNotifications_CheckedChanged(object sender, EventArgs e)
266         {
267             s["show_friends_online_notifications"] = OSD.FromBoolean(cbFriendsNotifications.Checked);
268         }
269
270         void cbChatTimestamps_CheckedChanged(object sender, EventArgs e)
271         {
272             s["chat_timestamps"] = OSD.FromBoolean(cbChatTimestamps.Checked);
273         }
274
275         void cbIMTimeStamps_CheckedChanged(object sender, EventArgs e)
276         {
277             s["im_timestamps"] = OSD.FromBoolean(cbIMTimeStamps.Checked);
278         }
279
280         private void cbTrasactDialog_CheckedChanged(object sender, EventArgs e)
281         {
282             s["transaction_notification_dialog"] = OSD.FromBoolean(cbTrasactDialog.Checked);
283         }
284
285         private void cbTrasactChat_CheckedChanged(object sender, EventArgs e)
286         {
287             s["transaction_notification_chat"] = OSD.FromBoolean(cbTrasactChat.Checked);
288         }
289
290         private void UpdateFontSize()
291         {
292             double f = 8.25;
293             double existing = s["chat_font_size"].AsReal();
294
295             if (!double.TryParse(cbFontSize.Text, out f))
296             {
297                 cbFontSize.Text = s["chat_font_size"].AsReal().ToString(System.Globalization.CultureInfo.InvariantCulture);
298                 return;
299             }
300
301             if (Math.Abs(existing - f) > 0.0001f)
302                 s["chat_font_size"] = OSD.FromReal(f);
303
304         }
305
306         private void cbFontSize_SelectedIndexChanged(object sender, EventArgs e)
307         {
308             UpdateFontSize();
309         }
310
311         private void cbFontSize_KeyDown(object sender, KeyEventArgs e)
312         {
313             if (e.KeyCode == Keys.Enter)
314             {
315                 UpdateFontSize();
316                 e.Handled = e.SuppressKeyPress = true;
317             }
318         }
319
320         private void cbFontSize_Leave(object sender, EventArgs e)
321         {
322             UpdateFontSize();
323         }
324
325         private void rbAutobusy_CheckedChanged(object sender, EventArgs e)
326         {
327             s["auto_response_type"] = (int)AutoResponseType.WhenBusy;
328         }
329
330         private void rbAutoNonFriend_CheckedChanged(object sender, EventArgs e)
331         {
332             s["auto_response_type"] = (int)AutoResponseType.WhenFromNonFriend;
333         }
334
335         private void rbAutoAlways_CheckedChanged(object sender, EventArgs e)
336         {
337             s["auto_response_type"] = (int)AutoResponseType.Always;
338         }
339
340         private void rbDNOff_CheckedChanged(object sender, EventArgs e)
341         {
342             if (rbDNOff.Checked)
343                 s["display_name_mode"] = (int)NameMode.Standard;
344         }
345
346         private void rbDNSmart_CheckedChanged(object sender, EventArgs e)
347         {
348             if (rbDNSmart.Checked)
349                 s["display_name_mode"] = (int)NameMode.Smart;
350         }
351
352         private void rbDNDandUsernme_CheckedChanged(object sender, EventArgs e)
353         {
354             if (rbDNDandUsernme.Checked)
355                 s["display_name_mode"] = (int)NameMode.DisplayNameAndUserName;
356         }
357
358         private void rbDNOnlyDN_CheckedChanged(object sender, EventArgs e)
359         {
360             if (rbDNOnlyDN.Checked)
361                 s["display_name_mode"] = (int)NameMode.OnlyDisplayName;
362         }
363
364         private void txtReconnectTime_TextChanged(object sender, EventArgs e)
365         {
366             string input = System.Text.RegularExpressions.Regex.Replace(txtReconnectTime.Text, @"[^\d]", "");
367             int t = 120;
368             int.TryParse(input, out t);
369             
370             if (txtReconnectTime.Text != t.ToString())
371             {
372                 txtReconnectTime.Text = t.ToString();
373                 txtReconnectTime.Select(txtReconnectTime.Text.Length, 0);
374             }
375             
376             s["reconnect_time"] = t;
377         }
378
379         private void cbRadegastLogToFile_CheckedChanged(object sender, EventArgs e)
380         {
381             s["log_to_file"] = OSD.FromBoolean(cbRadegastLogToFile.Checked);
382         }
383     }
384 }