OSDN Git Service

RAD-498: Ability to confirm the program exit
[radegast/radegast.git] / Radegast / GUI / Dialogs / Settings.cs
1 
2 // 
3 // Radegast Metaverse Client
4 // Copyright (c) 2009-2014, 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
41 using OpenMetaverse;
42 using OpenMetaverse.StructuredData;
43
44 using Radegast.Automation;
45
46 namespace Radegast
47 {
48     public enum AutoResponseType : int
49     {
50         WhenBusy = 0,
51         WhenFromNonFriend = 1,
52         Always = 2
53     }
54
55     public partial class frmSettings : RadegastForm
56     {
57         private Settings s;
58         private static bool settingInitialized = false;
59
60         public static void InitSettigs(Settings s, bool mono)
61         {
62             if (s["im_timestamps"].Type == OSDType.Unknown)
63             {
64                 s["im_timestamps"] = OSD.FromBoolean(true);
65             }
66
67             if (s["rlv_enabled"].Type == OSDType.Unknown)
68             {
69                 s["rlv_enabled"] = new OSDBoolean(false);
70             }
71
72             if (s["mu_emotes"].Type == OSDType.Unknown)
73             {
74                 s["mu_emotes"] = new OSDBoolean(false);
75             }
76
77             if (s["friends_notification_highlight"].Type == OSDType.Unknown)
78             {
79                 s["friends_notification_highlight"] = new OSDBoolean(true);
80             }
81
82             if (!s.ContainsKey("no_typing_anim")) s["no_typing_anim"] = OSD.FromBoolean(false);
83
84             if (!s.ContainsKey("auto_response_type"))
85             {
86                 s["auto_response_type"] = (int)AutoResponseType.WhenBusy;
87                 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.";
88             }
89
90             if (!s.ContainsKey("script_syntax_highlight")) s["script_syntax_highlight"] = OSD.FromBoolean(true);
91
92             if (!s.ContainsKey("display_name_mode")) s["display_name_mode"] = (int)NameMode.Smart;
93
94             // Convert legacy settings from first last name to username
95             if (!s.ContainsKey("username") && (s.ContainsKey("first_name") && s.ContainsKey("last_name")))
96             {
97                 s["username"] = s["first_name"] + " " + s["last_name"];
98                 s.Remove("first_name");
99                 s.Remove("last_name");
100             }
101
102             if (!s.ContainsKey("reconnect_time")) s["reconnect_time"] = 120;
103
104             if (!s.ContainsKey("transaction_notification_chat")) s["transaction_notification_chat"] = true;
105
106             if (!s.ContainsKey("transaction_notification_dialog")) s["transaction_notification_dialog"] = true;
107
108             if (!s.ContainsKey("minimize_to_tray")) s["minimize_to_tray"] = false;
109
110             if (!s.ContainsKey("scene_window_docked")) s["scene_window_docked"] = true;
111
112             if (!s.ContainsKey("taskbar_highlight")) s["taskbar_highlight"] = true;
113
114             if (!s.ContainsKey("rendering_occlusion_culling_enabled2")) s["rendering_occlusion_culling_enabled2"] = false;
115
116             if (!s.ContainsKey("rendering_use_vbo")) s["rendering_use_vbo"] = true;
117
118             if (!s.ContainsKey("send_rad_client_tag")) s["send_rad_client_tag"] = true;
119
120             if (!s.ContainsKey("log_to_file")) s["log_to_file"] = true;
121
122             if (!s.ContainsKey("disable_chat_im_log")) s["disable_chat_im_log"] = false;
123
124             if (!s.ContainsKey("disable_look_at")) s["disable_look_at"] = false;
125
126             if (!s.ContainsKey("confirm_exit")) s["confirm_exit"] = false;
127
128             if (!s.ContainsKey("highlight_on_chat")) s["highlight_on_chat"] = true;
129
130             if (!s.ContainsKey("highlight_on_im")) s["highlight_on_im"] = true;
131
132             if (!s.ContainsKey("highlight_on_group_im")) s["highlight_on_group_im"] = true;
133
134             if (!s.ContainsKey("av_name_link")) s["av_name_link"] = false;
135
136             if (!s.ContainsKey("disable_http_inventory"))
137             {
138                 s["disable_http_inventory"] = mono;
139             }
140
141             if (!s.ContainsKey("on_script_question"))
142             {
143                 s["on_script_question"] = "Ask";
144             }
145             
146         }
147
148         public frmSettings(RadegastInstance instance)
149             : base(instance)
150         {
151             if (settingInitialized)
152             {
153                 frmSettings.InitSettigs(instance.GlobalSettings, instance.MonoRuntime);
154             }
155
156             InitializeComponent();
157             AutoSavePosition = true;
158
159             s = instance.GlobalSettings;
160             tbpGraphics.Controls.Add(new Radegast.Rendering.GraphicsPreferences(instance));
161             cbChatTimestamps.Checked = s["chat_timestamps"].AsBoolean();
162
163             cbIMTimeStamps.Checked = s["im_timestamps"].AsBoolean();
164
165             cbChatTimestamps.CheckedChanged += new EventHandler(cbChatTimestamps_CheckedChanged);
166             cbIMTimeStamps.CheckedChanged += new EventHandler(cbIMTimeStamps_CheckedChanged);
167
168             cbTrasactDialog.Checked = s["transaction_notification_dialog"].AsBoolean();
169             cbTrasactChat.Checked = s["transaction_notification_chat"].AsBoolean();
170
171             cbFriendsNotifications.Checked = s["show_friends_online_notifications"].AsBoolean();
172             cbFriendsNotifications.CheckedChanged += new EventHandler(cbFriendsNotifications_CheckedChanged);
173
174             cbAutoReconnect.Checked = s["auto_reconnect"].AsBoolean();
175             cbAutoReconnect.CheckedChanged += new EventHandler(cbAutoReconnect_CheckedChanged);
176
177             cbHideLoginGraphics.Checked = s["hide_login_graphics"].AsBoolean();
178             cbHideLoginGraphics.CheckedChanged += new EventHandler(cbHideLoginGraphics_CheckedChanged);
179
180             cbRLV.Checked = s["rlv_enabled"].AsBoolean();
181             cbRLV.CheckedChanged += (object sender, EventArgs e) =>
182             {
183                 s["rlv_enabled"] = new OSDBoolean(cbRLV.Checked);
184             };
185
186             cbMUEmotes.Checked = s["mu_emotes"].AsBoolean();
187             cbMUEmotes.CheckedChanged += (object sender, EventArgs e) =>
188             {
189                 s["mu_emotes"] = new OSDBoolean(cbMUEmotes.Checked);
190             };
191
192             if (s["chat_font_size"].Type != OSDType.Real)
193             {
194                 s["chat_font_size"] = OSD.FromReal(((ChatConsole)instance.TabConsole.Tabs["chat"].Control).cbxInput.Font.Size);
195             }
196
197             cbFontSize.Text = s["chat_font_size"].AsReal().ToString(System.Globalization.CultureInfo.InvariantCulture);
198
199             if (!s.ContainsKey("minimize_to_tray")) s["minimize_to_tray"] = OSD.FromBoolean(false);
200             cbMinToTrey.Checked = s["minimize_to_tray"].AsBoolean();
201             cbMinToTrey.CheckedChanged += (object sender, EventArgs e) =>
202             {
203                 s["minimize_to_tray"] = OSD.FromBoolean(cbMinToTrey.Checked);
204             };
205
206
207             cbNoTyping.Checked = s["no_typing_anim"].AsBoolean();
208             cbNoTyping.CheckedChanged += (object sender, EventArgs e) =>
209             {
210                 s["no_typing_anim"] = OSD.FromBoolean(cbNoTyping.Checked);
211             };
212
213             txtAutoResponse.Text = s["auto_response_text"];
214             txtAutoResponse.TextChanged += (object sender, EventArgs e) =>
215             {
216                 s["auto_response_text"] = txtAutoResponse.Text;
217             };
218             AutoResponseType art = (AutoResponseType)s["auto_response_type"].AsInteger();
219             switch (art)
220             {
221                 case AutoResponseType.WhenBusy: rbAutobusy.Checked = true; break;
222                 case AutoResponseType.WhenFromNonFriend: rbAutoNonFriend.Checked = true; break;
223                 case AutoResponseType.Always: rbAutoAlways.Checked = true; break;
224             }
225
226             cbSyntaxHighlight.Checked = s["script_syntax_highlight"].AsBoolean();
227             cbSyntaxHighlight.CheckedChanged += (object sender, EventArgs e) =>
228             {
229                 s["script_syntax_highlight"] = OSD.FromBoolean(cbSyntaxHighlight.Checked);
230             };
231
232             switch ((NameMode)s["display_name_mode"].AsInteger())
233             {
234                 case NameMode.Standard: rbDNOff.Checked = true; break;
235                 case NameMode.Smart: rbDNSmart.Checked = true; break;
236                 case NameMode.DisplayNameAndUserName: rbDNDandUsernme.Checked = true; break;
237                 case NameMode.OnlyDisplayName: rbDNOnlyDN.Checked = true; break;
238             }
239
240             txtReconnectTime.Text = s["reconnect_time"].AsInteger().ToString();
241
242             cbRadegastClientTag.Checked = s["send_rad_client_tag"];
243             cbRadegastClientTag.CheckedChanged += (sender, e) =>
244             {
245                 s["send_rad_client_tag"] = cbRadegastClientTag.Checked;
246                 instance.SetClientTag();
247             };
248
249             cbOnInvOffer.SelectedIndex = s["inv_auto_accept_mode"].AsInteger();
250             cbOnInvOffer.SelectedIndexChanged += (sender, e) =>
251             {
252                 s["inv_auto_accept_mode"] = cbOnInvOffer.SelectedIndex;
253             };
254
255             cbRadegastLogToFile.Checked = s["log_to_file"];
256
257             cbDisableChatIMLog.Checked = s["disable_chat_im_log"];
258             cbDisableChatIMLog.CheckedChanged += (sender, e) =>
259             {
260                 s["disable_chat_im_log"] = cbDisableChatIMLog.Checked;
261             };
262
263             cbDisableLookAt.Checked = s["disable_look_at"];
264             cbDisableLookAt.CheckedChanged += (sender, e) =>
265             {
266                 s["disable_look_at"] = cbDisableLookAt.Checked;
267             };
268
269             cbConfirmExit.Checked = s["confirm_exit"];
270             cbConfirmExit.CheckedChanged += (sender, e) =>
271             {
272                 s["confirm_exit"] = cbConfirmExit.Checked;
273             };
274
275             cbTaskBarHighLight.Checked = s["taskbar_highlight"];
276             cbTaskBarHighLight.CheckedChanged += (sender, e) =>
277             {
278                 s["taskbar_highlight"] = cbTaskBarHighLight.Checked;
279                 UpdateEnabled();
280             };
281
282             cbFriendsHighlight.Checked = s["friends_notification_highlight"].AsBoolean();
283             cbFriendsHighlight.CheckedChanged += (object sender, EventArgs e) =>
284             {
285                 s["friends_notification_highlight"] = new OSDBoolean(cbFriendsHighlight.Checked);
286             };
287
288             cbHighlightChat.Checked = s["highlight_on_chat"];
289             cbHighlightChat.CheckedChanged += (sender, e) =>
290             {
291                 s["highlight_on_chat"] = cbHighlightChat.Checked;
292             };
293
294             cbHighlightIM.Checked = s["highlight_on_im"];
295             cbHighlightIM.CheckedChanged += (sender, e) =>
296             {
297                 s["highlight_on_im"] = cbHighlightIM.Checked;
298             };
299
300             cbHighlightGroupIM.Checked = s["highlight_on_group_im"];
301             cbHighlightGroupIM.CheckedChanged += (sender, e) =>
302             {
303                 s["highlight_on_group_im"] = cbHighlightGroupIM.Checked;
304             };
305
306             // disable_av_name_link
307             if (instance.MonoRuntime)
308             {
309                 cbNameLinks.Visible = false;
310             }
311             else
312             {
313                 cbNameLinks.Checked = s["av_name_link"];
314                 cbNameLinks.CheckedChanged += (sender, e) =>
315                 {
316                     s["av_name_link"] = cbNameLinks.Checked;
317                 };
318             }
319
320             cbDisableHTTPInventory.Checked = s["disable_http_inventory"];
321             cbDisableHTTPInventory.CheckedChanged += (sender, e) =>
322             {
323                 s["disable_http_inventory"] = cbDisableHTTPInventory.Checked;
324             };
325
326             cbShowScriptErrors.Checked = s["show_script_errors"];
327             cbShowScriptErrors.CheckedChanged += (sender, e) =>
328             {
329                 s["show_script_errors"] = cbShowScriptErrors.Checked;
330             };
331
332             autoSitPrefsUpdate();
333             pseudoHomePrefsUpdated();
334             LSLHelperPrefsUpdate();
335
336             cbAutoScriptPermission.Text = s["on_script_question"];
337
338             UpdateEnabled();
339         }
340
341         void UpdateEnabled()
342         {
343             if (cbTaskBarHighLight.Checked)
344             {
345                 cbFriendsHighlight.Enabled = cbHighlightChat.Enabled = cbHighlightGroupIM.Enabled = cbHighlightIM.Enabled = true;
346             }
347             else
348             {
349                 cbFriendsHighlight.Enabled = cbHighlightChat.Enabled = cbHighlightGroupIM.Enabled = cbHighlightIM.Enabled = false;
350             }
351         }
352
353         void cbHideLoginGraphics_CheckedChanged(object sender, EventArgs e)
354         {
355             s["hide_login_graphics"] = OSD.FromBoolean(cbHideLoginGraphics.Checked);
356         }
357
358         void cbAutoReconnect_CheckedChanged(object sender, EventArgs e)
359         {
360             s["auto_reconnect"] = OSD.FromBoolean(cbAutoReconnect.Checked);
361         }
362
363         void cbFriendsNotifications_CheckedChanged(object sender, EventArgs e)
364         {
365             s["show_friends_online_notifications"] = OSD.FromBoolean(cbFriendsNotifications.Checked);
366         }
367
368         void cbChatTimestamps_CheckedChanged(object sender, EventArgs e)
369         {
370             s["chat_timestamps"] = OSD.FromBoolean(cbChatTimestamps.Checked);
371         }
372
373         void cbIMTimeStamps_CheckedChanged(object sender, EventArgs e)
374         {
375             s["im_timestamps"] = OSD.FromBoolean(cbIMTimeStamps.Checked);
376         }
377
378         private void cbTrasactDialog_CheckedChanged(object sender, EventArgs e)
379         {
380             s["transaction_notification_dialog"] = OSD.FromBoolean(cbTrasactDialog.Checked);
381         }
382
383         private void cbTrasactChat_CheckedChanged(object sender, EventArgs e)
384         {
385             s["transaction_notification_chat"] = OSD.FromBoolean(cbTrasactChat.Checked);
386         }
387
388         private void UpdateFontSize()
389         {
390             double f = 8.25;
391             double existing = s["chat_font_size"].AsReal();
392
393             if (!double.TryParse(cbFontSize.Text, out f))
394             {
395                 cbFontSize.Text = s["chat_font_size"].AsReal().ToString(System.Globalization.CultureInfo.InvariantCulture);
396                 return;
397             }
398
399             if (Math.Abs(existing - f) > 0.0001f)
400                 s["chat_font_size"] = OSD.FromReal(f);
401
402         }
403
404         private void cbFontSize_SelectedIndexChanged(object sender, EventArgs e)
405         {
406             UpdateFontSize();
407         }
408
409         private void cbFontSize_KeyDown(object sender, KeyEventArgs e)
410         {
411             if (e.KeyCode == Keys.Enter)
412             {
413                 UpdateFontSize();
414                 e.Handled = e.SuppressKeyPress = true;
415             }
416         }
417
418         private void cbFontSize_Leave(object sender, EventArgs e)
419         {
420             UpdateFontSize();
421         }
422
423         private void rbAutobusy_CheckedChanged(object sender, EventArgs e)
424         {
425             s["auto_response_type"] = (int)AutoResponseType.WhenBusy;
426         }
427
428         private void rbAutoNonFriend_CheckedChanged(object sender, EventArgs e)
429         {
430             s["auto_response_type"] = (int)AutoResponseType.WhenFromNonFriend;
431         }
432
433         private void rbAutoAlways_CheckedChanged(object sender, EventArgs e)
434         {
435             s["auto_response_type"] = (int)AutoResponseType.Always;
436         }
437
438         private void rbDNOff_CheckedChanged(object sender, EventArgs e)
439         {
440             if (rbDNOff.Checked)
441             {
442                 Instance.Names.CleanCache();
443                 s["display_name_mode"] = (int)NameMode.Standard;
444             }
445         }
446
447         private void rbDNSmart_CheckedChanged(object sender, EventArgs e)
448         {
449             if (rbDNSmart.Checked)
450             {
451                 Instance.Names.CleanCache();
452                 s["display_name_mode"] = (int)NameMode.Smart;
453             }
454         }
455
456         private void rbDNDandUsernme_CheckedChanged(object sender, EventArgs e)
457         {
458             if (rbDNDandUsernme.Checked)
459             {
460                 Instance.Names.CleanCache();
461                 s["display_name_mode"] = (int)NameMode.DisplayNameAndUserName;
462             }
463         }
464
465         private void rbDNOnlyDN_CheckedChanged(object sender, EventArgs e)
466         {
467             if (rbDNOnlyDN.Checked)
468             {
469                 Instance.Names.CleanCache();
470                 s["display_name_mode"] = (int)NameMode.OnlyDisplayName;
471             }
472         }
473
474         private void txtReconnectTime_TextChanged(object sender, EventArgs e)
475         {
476             string input = System.Text.RegularExpressions.Regex.Replace(txtReconnectTime.Text, @"[^\d]", "");
477             int t = 120;
478             int.TryParse(input, out t);
479
480             if (txtReconnectTime.Text != t.ToString())
481             {
482                 txtReconnectTime.Text = t.ToString();
483                 txtReconnectTime.Select(txtReconnectTime.Text.Length, 0);
484             }
485
486             s["reconnect_time"] = t;
487         }
488
489         private void cbRadegastLogToFile_CheckedChanged(object sender, EventArgs e)
490         {
491             s["log_to_file"] = OSD.FromBoolean(cbRadegastLogToFile.Checked);
492         }
493
494         private void cbConfirmExit_CheckedChanged(object sender, EventArgs e)
495         {
496             s["confirm_exit"] = OSD.FromBoolean(cbConfirmExit.Checked);
497         }
498
499         #region Auto-Sit
500
501         private void autoSitPrefsUpdate()
502         {
503             autoSit.Enabled = (Instance.Client.Network.Connected && Instance.ClientSettings != null);
504             if (!autoSit.Enabled)
505             {
506                 return;
507             }
508             AutoSitPreferences prefs = Instance.State.AutoSit.Preferences;
509             autoSitName.Text = prefs.PrimitiveName;
510             autoSitUUID.Text = prefs.Primitive.ToString();
511             autoSitSit.Enabled = prefs.Primitive != UUID.Zero;
512             autoSitEnabled.Checked = prefs.Enabled;
513         }
514
515         private void autoSitClear_Click(object sender, EventArgs e)
516         {
517             Instance.State.AutoSit.Preferences = new AutoSitPreferences();
518             autoSitPrefsUpdate();
519         }
520
521         private void autoSitNameLabel_Click(object sender, EventArgs e)
522         {
523             autoSitName.SelectAll();
524         }
525
526         private void autoSitUUIDLabel_Click(object sender, EventArgs e)
527         {
528             autoSitUUID.SelectAll();
529         }
530
531         private void autoSitSit_Click(object sender, EventArgs e)
532         {
533             Instance.State.AutoSit.TrySit();
534         }
535
536         private void autoSitEnabled_CheckedChanged(object sender, EventArgs e)
537         {
538             Instance.State.AutoSit.Preferences = new AutoSitPreferences
539             {
540                 Primitive = Instance.State.AutoSit.Preferences.Primitive,
541                 PrimitiveName = Instance.State.AutoSit.Preferences.PrimitiveName,
542                 Enabled = autoSitEnabled.Checked
543             };
544
545             if (Instance.State.AutoSit.Preferences.Enabled)
546             {
547                 Instance.State.AutoSit.TrySit();
548             }
549         }
550
551         private void autoSitUUID_Leave(object sender, EventArgs e)
552         {
553             UUID primID = UUID.Zero;
554             if (UUID.TryParse(autoSitUUID.Text, out primID))
555             {
556                 Instance.State.AutoSit.Preferences = new AutoSitPreferences
557                 {
558                     Primitive = primID,
559                     PrimitiveName = autoSitName.Text,
560                     Enabled = autoSitEnabled.Checked
561                 };
562
563                 if (Instance.State.AutoSit.Preferences.Enabled)
564                 {
565                     Instance.State.AutoSit.TrySit();
566                 }
567             }
568             else
569             {
570                 autoSitUUID.Text = UUID.Zero.ToString();
571             }
572         }
573         #endregion
574
575         #region Pseudo Home
576
577         private void pseudoHomePrefsUpdated()
578         {
579             pseudoHome.Enabled = (Instance.Client.Network.Connected && Instance.ClientSettings != null);
580             if (!pseudoHome.Enabled)
581             {
582                 return;
583             }
584             PseudoHomePreferences prefs = Instance.State.PseudoHome.Preferences;
585             pseudoHomeLocation.Text = (prefs.Region != string.Empty) ? string.Format("{0} <{1}, {2}, {3}>", prefs.Region, (int)prefs.Position.X, (int)prefs.Position.Y, (int)prefs.Position.Z) : "";
586             pseudoHomeEnabled.Checked = prefs.Enabled;
587             pseudoHomeTP.Enabled = (prefs.Region.Trim() != string.Empty);
588             pseudoHomeTolerance.Value = Math.Max(pseudoHomeTolerance.Minimum, Math.Min(pseudoHomeTolerance.Maximum, prefs.Tolerance));
589         }
590
591         private void pseudoHomeLabel_Click(object sender, EventArgs e)
592         {
593             pseudoHomeLocation.SelectAll();
594         }
595
596         private void pseudoHomeEnabled_CheckedChanged(object sender, EventArgs e)
597         {
598             Instance.State.PseudoHome.Preferences = new PseudoHomePreferences
599             {
600                 Enabled = pseudoHomeEnabled.Checked,
601                 Region = Instance.State.PseudoHome.Preferences.Region,
602                 Position = Instance.State.PseudoHome.Preferences.Position,
603                 Tolerance = Instance.State.PseudoHome.Preferences.Tolerance
604             };
605         }
606
607         private void pseudoHomeTP_Click(object sender, EventArgs e)
608         {
609             Instance.State.PseudoHome.ETGoHome();
610         }
611
612         private void pseudoHomeSet_Click(object sender, EventArgs e)
613         {
614             Instance.State.PseudoHome.Preferences = new PseudoHomePreferences
615             {
616                 Enabled = Instance.State.PseudoHome.Preferences.Enabled,
617                 Region = Instance.Client.Network.CurrentSim.Name,
618                 Position = Instance.Client.Self.SimPosition,
619                 Tolerance = Instance.State.PseudoHome.Preferences.Tolerance
620             };
621             pseudoHomePrefsUpdated();
622         }
623
624         private void pseudoHomeTolerance_ValueChanged(object sender, EventArgs e)
625         {
626             Instance.State.PseudoHome.Preferences = new PseudoHomePreferences
627             {
628                 Enabled = Instance.State.PseudoHome.Preferences.Enabled,
629                 Region = Instance.State.PseudoHome.Preferences.Region,
630                 Position = Instance.State.PseudoHome.Preferences.Position,
631                 Tolerance = (uint)pseudoHomeTolerance.Value
632             };
633         }
634
635         private void pseudoHomeClear_Click(object sender, EventArgs e)
636         {
637             Instance.State.PseudoHome.Preferences = new PseudoHomePreferences();
638             pseudoHomePrefsUpdated();
639         }
640         #endregion
641
642         #region LSL Helper
643         private void LSLHelperPrefsUpdate()
644         {
645             gbLSLHelper.Enabled = (Instance.Client.Network.Connected && Instance.ClientSettings != null);
646
647             if (!gbLSLHelper.Enabled)
648             {
649                 return;
650             }
651
652             Instance.State.LSLHelper.LoadSettings();
653             tbLSLAllowedOwner.Text = Instance.State.LSLHelper.AllowedOwner.ToString();
654             cbLSLHelperEnabled.CheckedChanged -=new EventHandler(cbLSLHelperEnabled_CheckedChanged);
655             cbLSLHelperEnabled.Checked = Instance.State.LSLHelper.Enabled;
656             cbLSLHelperEnabled.CheckedChanged += new EventHandler(cbLSLHelperEnabled_CheckedChanged);
657         }
658
659         private void LSLHelperPrefsSave()
660         {
661             if (Instance.ClientSettings == null)
662             {
663                 return;
664             }
665
666             Instance.State.LSLHelper.Enabled = cbLSLHelperEnabled.Checked;
667             UUID allowedOwnner = UUID.Zero;
668             UUID.TryParse(tbLSLAllowedOwner.Text, out allowedOwnner);
669             Instance.State.LSLHelper.AllowedOwner = allowedOwnner;
670             Instance.State.LSLHelper.SaveSettings();
671         }
672
673         private void llLSLHelperInstructios_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
674         {
675             Instance.MainForm.ProcessLink("http://radegast.org/wiki/LSL_Helper", false);
676         }
677
678         private void tbLSLAllowedOwner_Leave(object sender, EventArgs e)
679         {
680             UUID allowedOwner = UUID.Zero;
681             if (UUID.TryParse(tbLSLAllowedOwner.Text, out allowedOwner))
682             {
683             }
684             else
685             {
686                 tbLSLAllowedOwner.Text = UUID.Zero.ToString();
687             }
688             LSLHelperPrefsSave();
689         }
690
691         private void lblLSLUUID_Click(object sender, EventArgs e)
692         {
693             tbLSLAllowedOwner.SelectAll();
694         }
695
696         private void cbLSLHelperEnabled_CheckedChanged(object sender, EventArgs e)
697         {
698             LSLHelperPrefsSave();
699         }
700         #endregion LSL Helper
701
702         private void cbAutoScriptPermission_SelectedIndexChanged(object sender, EventArgs e)
703         {
704             s["on_script_question"] = cbAutoScriptPermission.Text;
705         }
706
707     }
708 }