OSDN Git Service

RAD-224: Ability to set auto log in time between attempts
[radegast/radegast.git] / Radegast / GUI / Dialogs / Settings.cs
index 490e3e0..93d573b 100644 (file)
@@ -1,7 +1,7 @@
 
 // 
 // Radegast Metaverse Client
-// Copyright (c) 2009, Radegast Development Team
+// Copyright (c) 2009-2011, Radegast Development Team
 // All rights reserved.
 // 
 // Redistribution and use in source and binary forms, with or without
@@ -41,20 +41,83 @@ using OpenMetaverse.StructuredData;
 
 namespace Radegast
 {
+    public enum AutoResponseType : int
+    {
+        WhenBusy = 0,
+        WhenFromNonFriend = 1,
+        Always = 2
+    }
+
     public partial class frmSettings : RadegastForm
     {
         private Settings s;
+        private static bool settingInitialized = false;
+
+        public static void InitSettigs(Settings s)
+        {
+            if (s["im_timestamps"].Type == OSDType.Unknown)
+            {
+                s["im_timestamps"] = OSD.FromBoolean(true);
+            }
+
+            if (s["rlv_enabled"].Type == OSDType.Unknown)
+            {
+                s["rlv_enabled"] = new OSDBoolean(false);
+            }
+
+            if (s["mu_emotes"].Type == OSDType.Unknown)
+            {
+                s["mu_emotes"] = new OSDBoolean(false);
+            }
+
+            if (s["friends_notification_highlight"].Type == OSDType.Unknown)
+            {
+                s["friends_notification_highlight"] = new OSDBoolean(true);
+            }
+
+            if (!s.ContainsKey("no_typing_anim")) s["no_typing_anim"] = OSD.FromBoolean(false);
+
+            if (!s.ContainsKey("auto_response_type"))
+            {
+                s["auto_response_type"] = (int)AutoResponseType.WhenBusy;
+                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.";
+            }
+
+            if (!s.ContainsKey("script_syntax_highlight")) s["script_syntax_highlight"] = OSD.FromBoolean(true);
+
+            if (!s.ContainsKey("display_name_mode")) s["display_name_mode"] = (int)NameMode.Smart;
+
+            // Convert legacy settings from first last name to username
+            if (!s.ContainsKey("username") && (s.ContainsKey("first_name") && s.ContainsKey("last_name")))
+            {
+                s["username"] = s["first_name"] + " " + s["last_name"];
+                s.Remove("first_name");
+                s.Remove("last_name");
+            }
+
+            if (!s.ContainsKey("reconnect_time")) s["reconnect_time"] = 120;
+
+            if (!s.ContainsKey("transaction_notification_chat")) s["transaction_notification_chat"] = true;
+
+            if (!s.ContainsKey("transaction_notification_dialog")) s["transaction_notification_dialog"] = true;
+
+            if (!s.ContainsKey("minimize_to_tray")) s["minimize_to_tray"] = false;
+
+        }
 
         public frmSettings(RadegastInstance instance)
         {
+            if (settingInitialized)
+            {
+                frmSettings.InitSettigs(instance.GlobalSettings);
+            }
+
             InitializeComponent();
+
             s = instance.GlobalSettings;
 
             cbChatTimestamps.Checked = s["chat_timestamps"].AsBoolean();
 
-            if (s["im_timestamps"].Type == OSDType.Unknown)
-                s["im_timestamps"] = OSD.FromBoolean(true);
-
             cbIMTimeStamps.Checked = s["im_timestamps"].AsBoolean();
 
             cbChatTimestamps.CheckedChanged += new EventHandler(cbChatTimestamps_CheckedChanged);
@@ -72,34 +135,18 @@ namespace Radegast
             cbHideLoginGraphics.Checked = s["hide_login_graphics"].AsBoolean();
             cbHideLoginGraphics.CheckedChanged += new EventHandler(cbHideLoginGraphics_CheckedChanged);
 
-            if (s["rlv_enabled"].Type == OSDType.Unknown)
-            {
-                s["rlv_enabled"] = new OSDBoolean(false);
-            }
-
             cbRLV.Checked = s["rlv_enabled"].AsBoolean();
             cbRLV.CheckedChanged += (object sender, EventArgs e) =>
             {
                 s["rlv_enabled"] = new OSDBoolean(cbRLV.Checked);
             };
 
-            if (s["mu_emotes"].Type == OSDType.Unknown)
-            {
-                s["mu_emotes"] = new OSDBoolean(false);
-            }
-
             cbMUEmotes.Checked = s["mu_emotes"].AsBoolean();
             cbMUEmotes.CheckedChanged += (object sender, EventArgs e) =>
             {
                 s["mu_emotes"] = new OSDBoolean(cbMUEmotes.Checked);
             };
 
-            
-            if (s["friends_notification_highlight"].Type == OSDType.Unknown)
-            {
-                s["friends_notification_highlight"] = new OSDBoolean(true);
-            }
-
             cbFriendsHighlight.Checked = s["friends_notification_highlight"].AsBoolean();
             cbFriendsHighlight.CheckedChanged += (object sender, EventArgs e) =>
             {
@@ -113,13 +160,48 @@ namespace Radegast
 
             cbFontSize.Text = s["chat_font_size"].AsReal().ToString(System.Globalization.CultureInfo.InvariantCulture);
 
-            if (!s.ContainsKey("minimize_to_trey")) s["minimize_to_trey"] = OSD.FromBoolean(false);
-            cbMinToTrey.Checked = s["minimize_to_trey"].AsBoolean();
+            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_trey"] = OSD.FromBoolean(cbMinToTrey.Checked);
+                    s["minimize_to_tray"] = OSD.FromBoolean(cbMinToTrey.Checked);
                 };
 
+
+            cbNoTyping.Checked = s["no_typing_anim"].AsBoolean();
+            cbNoTyping.CheckedChanged += (object sender, EventArgs e) =>
+            {
+                s["no_typing_anim"] = OSD.FromBoolean(cbNoTyping.Checked);
+            };
+
+            txtAutoResponse.Text = s["auto_response_text"];
+            txtAutoResponse.TextChanged += (object sender, EventArgs e) =>
+                {
+                    s["auto_response_text"] = txtAutoResponse.Text;
+                };
+            AutoResponseType art = (AutoResponseType)s["auto_response_type"].AsInteger();
+            switch (art)
+            {
+                case AutoResponseType.WhenBusy: rbAutobusy.Checked = true; break;
+                case AutoResponseType.WhenFromNonFriend: rbAutoNonFriend.Checked = true; break;
+                case AutoResponseType.Always: rbAutoAlways.Checked = true; break;
+            }
+
+            cbSyntaxHighlight.Checked = s["script_syntax_highlight"].AsBoolean();
+            cbSyntaxHighlight.CheckedChanged += (object sender, EventArgs e) =>
+            {
+                s["script_syntax_highlight"] = OSD.FromBoolean(cbSyntaxHighlight.Checked);
+            };
+
+            switch ((NameMode)s["display_name_mode"].AsInteger())
+            {
+                case NameMode.Standard: rbDNOff.Checked = true; break;
+                case NameMode.Smart: rbDNSmart.Checked = true; break;
+                case NameMode.DisplayNameAndUserName: rbDNDandUsernme.Checked = true; break;
+                case NameMode.OnlyDisplayName: rbDNOnlyDN.Checked = true; break;
+            }
+
+            txtReconnectTime.Text = s["reconnect_time"].AsInteger().ToString();
         }
 
         void cbHideLoginGraphics_CheckedChanged(object sender, EventArgs e)
@@ -161,7 +243,7 @@ namespace Radegast
         {
             double f = 8.25;
             double existing = s["chat_font_size"].AsReal();
-            
+
             if (!double.TryParse(cbFontSize.Text, out f))
             {
                 cbFontSize.Text = s["chat_font_size"].AsReal().ToString(System.Globalization.CultureInfo.InvariantCulture);
@@ -191,5 +273,59 @@ namespace Radegast
         {
             UpdateFontSize();
         }
+
+        private void rbAutobusy_CheckedChanged(object sender, EventArgs e)
+        {
+            s["auto_response_type"] = (int)AutoResponseType.WhenBusy;
+        }
+
+        private void rbAutoNonFriend_CheckedChanged(object sender, EventArgs e)
+        {
+            s["auto_response_type"] = (int)AutoResponseType.WhenFromNonFriend;
+        }
+
+        private void rbAutoAlways_CheckedChanged(object sender, EventArgs e)
+        {
+            s["auto_response_type"] = (int)AutoResponseType.Always;
+        }
+
+        private void rbDNOff_CheckedChanged(object sender, EventArgs e)
+        {
+            if (rbDNOff.Checked)
+                s["display_name_mode"] = (int)NameMode.Standard;
+        }
+
+        private void rbDNSmart_CheckedChanged(object sender, EventArgs e)
+        {
+            if (rbDNSmart.Checked)
+                s["display_name_mode"] = (int)NameMode.Smart;
+        }
+
+        private void rbDNDandUsernme_CheckedChanged(object sender, EventArgs e)
+        {
+            if (rbDNDandUsernme.Checked)
+                s["display_name_mode"] = (int)NameMode.DisplayNameAndUserName;
+        }
+
+        private void rbDNOnlyDN_CheckedChanged(object sender, EventArgs e)
+        {
+            if (rbDNOnlyDN.Checked)
+                s["display_name_mode"] = (int)NameMode.OnlyDisplayName;
+        }
+
+        private void txtReconnectTime_TextChanged(object sender, EventArgs e)
+        {
+            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;
+        }
     }
 }