OSDN Git Service

Added URI settings and updated URI name resolution.
[radegast/radegast.git] / Radegast / GUI / Dialogs / Settings.cs
index 2c91f12..11ca7b0 100644 (file)
@@ -1,7 +1,7 @@
 
 // 
 // Radegast Metaverse Client
-// Copyright (c) 2009-2012, Radegast Development Team
+// Copyright (c) 2009-2014, Radegast Development Team
 // All rights reserved.
 // 
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,12 @@ using System.Drawing;
 using System.Linq;
 using System.Text;
 using System.Windows.Forms;
+
+using OpenMetaverse;
 using OpenMetaverse.StructuredData;
 
+using Radegast.Automation;
+
 namespace Radegast
 {
     public enum AutoResponseType : int
@@ -53,7 +57,7 @@ namespace Radegast
         private Settings s;
         private static bool settingInitialized = false;
 
-        public static void InitSettigs(Settings s)
+        public static void InitSettigs(Settings s, bool mono)
         {
             if (s["im_timestamps"].Type == OSDType.Unknown)
             {
@@ -97,6 +101,10 @@ namespace Radegast
 
             if (!s.ContainsKey("reconnect_time")) s["reconnect_time"] = 120;
 
+            if (!s.ContainsKey("resolve_uri_time")) s["resolve_uri_time"] = 100;
+
+            if (!s.ContainsKey("resolve_uris")) s["resolve_uris"] = true;
+
             if (!s.ContainsKey("transaction_notification_chat")) s["transaction_notification_chat"] = true;
 
             if (!s.ContainsKey("transaction_notification_dialog")) s["transaction_notification_dialog"] = true;
@@ -107,7 +115,7 @@ namespace Radegast
 
             if (!s.ContainsKey("taskbar_highlight")) s["taskbar_highlight"] = true;
 
-            if (!s.ContainsKey("rendering_occlusion_culling_enabled")) s["rendering_occlusion_culling_enabled"] = true;
+            if (!s.ContainsKey("rendering_occlusion_culling_enabled2")) s["rendering_occlusion_culling_enabled2"] = false;
 
             if (!s.ContainsKey("rendering_use_vbo")) s["rendering_use_vbo"] = true;
 
@@ -118,16 +126,37 @@ namespace Radegast
             if (!s.ContainsKey("disable_chat_im_log")) s["disable_chat_im_log"] = false;
 
             if (!s.ContainsKey("disable_look_at")) s["disable_look_at"] = false;
+
+            if (!s.ContainsKey("highlight_on_chat")) s["highlight_on_chat"] = true;
+
+            if (!s.ContainsKey("highlight_on_im")) s["highlight_on_im"] = true;
+
+            if (!s.ContainsKey("highlight_on_group_im")) s["highlight_on_group_im"] = true;
+
+            if (!s.ContainsKey("av_name_link")) s["av_name_link"] = false;
+
+            if (!s.ContainsKey("disable_http_inventory"))
+            {
+                s["disable_http_inventory"] = mono;
+            }
+
+            if (!s.ContainsKey("on_script_question"))
+            {
+                s["on_script_question"] = "Ask";
+            }
+            
         }
 
         public frmSettings(RadegastInstance instance)
+            : base(instance)
         {
             if (settingInitialized)
             {
-                frmSettings.InitSettigs(instance.GlobalSettings);
+                frmSettings.InitSettigs(instance.GlobalSettings, instance.MonoRuntime);
             }
 
             InitializeComponent();
+            AutoSavePosition = true;
 
             s = instance.GlobalSettings;
             tbpGraphics.Controls.Add(new Radegast.Rendering.GraphicsPreferences(instance));
@@ -147,6 +176,9 @@ namespace Radegast
             cbAutoReconnect.Checked = s["auto_reconnect"].AsBoolean();
             cbAutoReconnect.CheckedChanged += new EventHandler(cbAutoReconnect_CheckedChanged);
 
+            cbResolveURIs.Checked = s["resolve_uris"].AsBoolean();
+            cbResolveURIs.CheckedChanged += new EventHandler(cbResolveURIs_CheckedChanged); ;
+
             cbHideLoginGraphics.Checked = s["hide_login_graphics"].AsBoolean();
             cbHideLoginGraphics.CheckedChanged += new EventHandler(cbHideLoginGraphics_CheckedChanged);
 
@@ -162,12 +194,6 @@ namespace Radegast
                 s["mu_emotes"] = new OSDBoolean(cbMUEmotes.Checked);
             };
 
-            cbFriendsHighlight.Checked = s["friends_notification_highlight"].AsBoolean();
-            cbFriendsHighlight.CheckedChanged += (object sender, EventArgs e) =>
-            {
-                s["friends_notification_highlight"] = new OSDBoolean(cbFriendsHighlight.Checked);
-            };
-
             if (s["chat_font_size"].Type != OSDType.Real)
             {
                 s["chat_font_size"] = OSD.FromReal(((ChatConsole)instance.TabConsole.Tabs["chat"].Control).cbxInput.Font.Size);
@@ -178,9 +204,9 @@ namespace Radegast
             if (!s.ContainsKey("minimize_to_tray")) s["minimize_to_tray"] = OSD.FromBoolean(false);
             cbMinToTrey.Checked = s["minimize_to_tray"].AsBoolean();
             cbMinToTrey.CheckedChanged += (object sender, EventArgs e) =>
-                {
-                    s["minimize_to_tray"] = OSD.FromBoolean(cbMinToTrey.Checked);
-                };
+            {
+                s["minimize_to_tray"] = OSD.FromBoolean(cbMinToTrey.Checked);
+            };
 
 
             cbNoTyping.Checked = s["no_typing_anim"].AsBoolean();
@@ -191,9 +217,9 @@ namespace Radegast
 
             txtAutoResponse.Text = s["auto_response_text"];
             txtAutoResponse.TextChanged += (object sender, EventArgs e) =>
-                {
-                    s["auto_response_text"] = txtAutoResponse.Text;
-                };
+            {
+                s["auto_response_text"] = txtAutoResponse.Text;
+            };
             AutoResponseType art = (AutoResponseType)s["auto_response_type"].AsInteger();
             switch (art)
             {
@@ -218,11 +244,7 @@ namespace Radegast
 
             txtReconnectTime.Text = s["reconnect_time"].AsInteger().ToString();
 
-            cbTaskBarHighLight.Checked = s["taskbar_highlight"];
-            cbTaskBarHighLight.CheckedChanged += (sender, e) =>
-            {
-                s["taskbar_highlight"] = cbTaskBarHighLight.Checked;
-            };
+            txtResolveURITime.Text = s["resolve_uri_time"].AsInteger().ToString();
 
             cbRadegastClientTag.Checked = s["send_rad_client_tag"];
             cbRadegastClientTag.CheckedChanged += (sender, e) =>
@@ -250,6 +272,83 @@ namespace Radegast
             {
                 s["disable_look_at"] = cbDisableLookAt.Checked;
             };
+
+            cbTaskBarHighLight.Checked = s["taskbar_highlight"];
+            cbTaskBarHighLight.CheckedChanged += (sender, e) =>
+            {
+                s["taskbar_highlight"] = cbTaskBarHighLight.Checked;
+                UpdateEnabled();
+            };
+
+            cbFriendsHighlight.Checked = s["friends_notification_highlight"].AsBoolean();
+            cbFriendsHighlight.CheckedChanged += (object sender, EventArgs e) =>
+            {
+                s["friends_notification_highlight"] = new OSDBoolean(cbFriendsHighlight.Checked);
+            };
+
+            cbHighlightChat.Checked = s["highlight_on_chat"];
+            cbHighlightChat.CheckedChanged += (sender, e) =>
+            {
+                s["highlight_on_chat"] = cbHighlightChat.Checked;
+            };
+
+            cbHighlightIM.Checked = s["highlight_on_im"];
+            cbHighlightIM.CheckedChanged += (sender, e) =>
+            {
+                s["highlight_on_im"] = cbHighlightIM.Checked;
+            };
+
+            cbHighlightGroupIM.Checked = s["highlight_on_group_im"];
+            cbHighlightGroupIM.CheckedChanged += (sender, e) =>
+            {
+                s["highlight_on_group_im"] = cbHighlightGroupIM.Checked;
+            };
+
+            // disable_av_name_link
+            if (instance.MonoRuntime)
+            {
+                cbNameLinks.Visible = false;
+            }
+            else
+            {
+                cbNameLinks.Checked = s["av_name_link"];
+                cbNameLinks.CheckedChanged += (sender, e) =>
+                {
+                    s["av_name_link"] = cbNameLinks.Checked;
+                };
+            }
+
+            cbDisableHTTPInventory.Checked = s["disable_http_inventory"];
+            cbDisableHTTPInventory.CheckedChanged += (sender, e) =>
+            {
+                s["disable_http_inventory"] = cbDisableHTTPInventory.Checked;
+            };
+
+            cbShowScriptErrors.Checked = s["show_script_errors"];
+            cbShowScriptErrors.CheckedChanged += (sender, e) =>
+            {
+                s["show_script_errors"] = cbShowScriptErrors.Checked;
+            };
+
+            autoSitPrefsUpdate();
+            pseudoHomePrefsUpdated();
+            LSLHelperPrefsUpdate();
+
+            cbAutoScriptPermission.Text = s["on_script_question"];
+
+            UpdateEnabled();
+        }
+
+        void UpdateEnabled()
+        {
+            if (cbTaskBarHighLight.Checked)
+            {
+                cbFriendsHighlight.Enabled = cbHighlightChat.Enabled = cbHighlightGroupIM.Enabled = cbHighlightIM.Enabled = true;
+            }
+            else
+            {
+                cbFriendsHighlight.Enabled = cbHighlightChat.Enabled = cbHighlightGroupIM.Enabled = cbHighlightIM.Enabled = false;
+            }
         }
 
         void cbHideLoginGraphics_CheckedChanged(object sender, EventArgs e)
@@ -262,6 +361,11 @@ namespace Radegast
             s["auto_reconnect"] = OSD.FromBoolean(cbAutoReconnect.Checked);
         }
 
+        private void cbResolveURIs_CheckedChanged(object sender, EventArgs e)
+        {
+            s["resolve_uris"] = OSD.FromBoolean(cbResolveURIs.Checked);
+        }
+
         void cbFriendsNotifications_CheckedChanged(object sender, EventArgs e)
         {
             s["show_friends_online_notifications"] = OSD.FromBoolean(cbFriendsNotifications.Checked);
@@ -340,25 +444,37 @@ namespace Radegast
         private void rbDNOff_CheckedChanged(object sender, EventArgs e)
         {
             if (rbDNOff.Checked)
+            {
+                Instance.Names.CleanCache();
                 s["display_name_mode"] = (int)NameMode.Standard;
+            }
         }
 
         private void rbDNSmart_CheckedChanged(object sender, EventArgs e)
         {
             if (rbDNSmart.Checked)
+            {
+                Instance.Names.CleanCache();
                 s["display_name_mode"] = (int)NameMode.Smart;
+            }
         }
 
         private void rbDNDandUsernme_CheckedChanged(object sender, EventArgs e)
         {
             if (rbDNDandUsernme.Checked)
+            {
+                Instance.Names.CleanCache();
                 s["display_name_mode"] = (int)NameMode.DisplayNameAndUserName;
+            }
         }
 
         private void rbDNOnlyDN_CheckedChanged(object sender, EventArgs e)
         {
             if (rbDNOnlyDN.Checked)
+            {
+                Instance.Names.CleanCache();
                 s["display_name_mode"] = (int)NameMode.OnlyDisplayName;
+            }
         }
 
         private void txtReconnectTime_TextChanged(object sender, EventArgs e)
@@ -366,19 +482,243 @@ namespace Radegast
             string input = System.Text.RegularExpressions.Regex.Replace(txtReconnectTime.Text, @"[^\d]", "");
             int t = 120;
             int.TryParse(input, out t);
-            
+
             if (txtReconnectTime.Text != t.ToString())
             {
                 txtReconnectTime.Text = t.ToString();
                 txtReconnectTime.Select(txtReconnectTime.Text.Length, 0);
             }
-            
+
             s["reconnect_time"] = t;
         }
 
+        private void txtResolveURITime_TextChanged(object sender, EventArgs e)
+        {
+            string input = System.Text.RegularExpressions.Regex.Replace(txtResolveURITime.Text, @"[^\d]", "");
+            int t = 100;
+            int.TryParse(input, out t);
+
+            if (txtResolveURITime.Text != t.ToString())
+            {
+                txtResolveURITime.Text = t.ToString();
+                txtResolveURITime.Select(txtResolveURITime.Text.Length, 0);
+            }
+
+            s["resolve_uri_time"] = t;
+        }
+
         private void cbRadegastLogToFile_CheckedChanged(object sender, EventArgs e)
         {
             s["log_to_file"] = OSD.FromBoolean(cbRadegastLogToFile.Checked);
         }
+
+        #region Auto-Sit
+
+        private void autoSitPrefsUpdate()
+        {
+            autoSit.Enabled = (Instance.Client.Network.Connected && Instance.ClientSettings != null);
+            if (!autoSit.Enabled)
+            {
+                return;
+            }
+            AutoSitPreferences prefs = Instance.State.AutoSit.Preferences;
+            autoSitName.Text = prefs.PrimitiveName;
+            autoSitUUID.Text = prefs.Primitive.ToString();
+            autoSitSit.Enabled = prefs.Primitive != UUID.Zero;
+            autoSitEnabled.Checked = prefs.Enabled;
+        }
+
+        private void autoSitClear_Click(object sender, EventArgs e)
+        {
+            Instance.State.AutoSit.Preferences = new AutoSitPreferences();
+            autoSitPrefsUpdate();
+        }
+
+        private void autoSitNameLabel_Click(object sender, EventArgs e)
+        {
+            autoSitName.SelectAll();
+        }
+
+        private void autoSitUUIDLabel_Click(object sender, EventArgs e)
+        {
+            autoSitUUID.SelectAll();
+        }
+
+        private void autoSitSit_Click(object sender, EventArgs e)
+        {
+            Instance.State.AutoSit.TrySit();
+        }
+
+        private void autoSitEnabled_CheckedChanged(object sender, EventArgs e)
+        {
+            Instance.State.AutoSit.Preferences = new AutoSitPreferences
+            {
+                Primitive = Instance.State.AutoSit.Preferences.Primitive,
+                PrimitiveName = Instance.State.AutoSit.Preferences.PrimitiveName,
+                Enabled = autoSitEnabled.Checked
+            };
+
+            if (Instance.State.AutoSit.Preferences.Enabled)
+            {
+                Instance.State.AutoSit.TrySit();
+            }
+        }
+
+        private void autoSitUUID_Leave(object sender, EventArgs e)
+        {
+            UUID primID = UUID.Zero;
+            if (UUID.TryParse(autoSitUUID.Text, out primID))
+            {
+                Instance.State.AutoSit.Preferences = new AutoSitPreferences
+                {
+                    Primitive = primID,
+                    PrimitiveName = autoSitName.Text,
+                    Enabled = autoSitEnabled.Checked
+                };
+
+                if (Instance.State.AutoSit.Preferences.Enabled)
+                {
+                    Instance.State.AutoSit.TrySit();
+                }
+            }
+            else
+            {
+                autoSitUUID.Text = UUID.Zero.ToString();
+            }
+        }
+        #endregion
+
+        #region Pseudo Home
+
+        private void pseudoHomePrefsUpdated()
+        {
+            pseudoHome.Enabled = (Instance.Client.Network.Connected && Instance.ClientSettings != null);
+            if (!pseudoHome.Enabled)
+            {
+                return;
+            }
+            PseudoHomePreferences prefs = Instance.State.PseudoHome.Preferences;
+            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) : "";
+            pseudoHomeEnabled.Checked = prefs.Enabled;
+            pseudoHomeTP.Enabled = (prefs.Region.Trim() != string.Empty);
+            pseudoHomeTolerance.Value = Math.Max(pseudoHomeTolerance.Minimum, Math.Min(pseudoHomeTolerance.Maximum, prefs.Tolerance));
+        }
+
+        private void pseudoHomeLabel_Click(object sender, EventArgs e)
+        {
+            pseudoHomeLocation.SelectAll();
+        }
+
+        private void pseudoHomeEnabled_CheckedChanged(object sender, EventArgs e)
+        {
+            Instance.State.PseudoHome.Preferences = new PseudoHomePreferences
+            {
+                Enabled = pseudoHomeEnabled.Checked,
+                Region = Instance.State.PseudoHome.Preferences.Region,
+                Position = Instance.State.PseudoHome.Preferences.Position,
+                Tolerance = Instance.State.PseudoHome.Preferences.Tolerance
+            };
+        }
+
+        private void pseudoHomeTP_Click(object sender, EventArgs e)
+        {
+            Instance.State.PseudoHome.ETGoHome();
+        }
+
+        private void pseudoHomeSet_Click(object sender, EventArgs e)
+        {
+            Instance.State.PseudoHome.Preferences = new PseudoHomePreferences
+            {
+                Enabled = Instance.State.PseudoHome.Preferences.Enabled,
+                Region = Instance.Client.Network.CurrentSim.Name,
+                Position = Instance.Client.Self.SimPosition,
+                Tolerance = Instance.State.PseudoHome.Preferences.Tolerance
+            };
+            pseudoHomePrefsUpdated();
+        }
+
+        private void pseudoHomeTolerance_ValueChanged(object sender, EventArgs e)
+        {
+            Instance.State.PseudoHome.Preferences = new PseudoHomePreferences
+            {
+                Enabled = Instance.State.PseudoHome.Preferences.Enabled,
+                Region = Instance.State.PseudoHome.Preferences.Region,
+                Position = Instance.State.PseudoHome.Preferences.Position,
+                Tolerance = (uint)pseudoHomeTolerance.Value
+            };
+        }
+
+        private void pseudoHomeClear_Click(object sender, EventArgs e)
+        {
+            Instance.State.PseudoHome.Preferences = new PseudoHomePreferences();
+            pseudoHomePrefsUpdated();
+        }
+        #endregion
+
+        #region LSL Helper
+        private void LSLHelperPrefsUpdate()
+        {
+            gbLSLHelper.Enabled = (Instance.Client.Network.Connected && Instance.ClientSettings != null);
+
+            if (!gbLSLHelper.Enabled)
+            {
+                return;
+            }
+
+            Instance.State.LSLHelper.LoadSettings();
+            tbLSLAllowedOwner.Text = Instance.State.LSLHelper.AllowedOwner.ToString();
+            cbLSLHelperEnabled.CheckedChanged -=new EventHandler(cbLSLHelperEnabled_CheckedChanged);
+            cbLSLHelperEnabled.Checked = Instance.State.LSLHelper.Enabled;
+            cbLSLHelperEnabled.CheckedChanged += new EventHandler(cbLSLHelperEnabled_CheckedChanged);
+        }
+
+        private void LSLHelperPrefsSave()
+        {
+            if (Instance.ClientSettings == null)
+            {
+                return;
+            }
+
+            Instance.State.LSLHelper.Enabled = cbLSLHelperEnabled.Checked;
+            UUID allowedOwnner = UUID.Zero;
+            UUID.TryParse(tbLSLAllowedOwner.Text, out allowedOwnner);
+            Instance.State.LSLHelper.AllowedOwner = allowedOwnner;
+            Instance.State.LSLHelper.SaveSettings();
+        }
+
+        private void llLSLHelperInstructios_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+        {
+            Instance.MainForm.ProcessLink("http://radegast.org/wiki/LSL_Helper", false);
+        }
+
+        private void tbLSLAllowedOwner_Leave(object sender, EventArgs e)
+        {
+            UUID allowedOwner = UUID.Zero;
+            if (UUID.TryParse(tbLSLAllowedOwner.Text, out allowedOwner))
+            {
+            }
+            else
+            {
+                tbLSLAllowedOwner.Text = UUID.Zero.ToString();
+            }
+            LSLHelperPrefsSave();
+        }
+
+        private void lblLSLUUID_Click(object sender, EventArgs e)
+        {
+            tbLSLAllowedOwner.SelectAll();
+        }
+
+        private void cbLSLHelperEnabled_CheckedChanged(object sender, EventArgs e)
+        {
+            LSLHelperPrefsSave();
+        }
+        #endregion LSL Helper
+
+        private void cbAutoScriptPermission_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            s["on_script_question"] = cbAutoScriptPermission.Text;
+        }
+
     }
 }