3 // Radegast Metaverse Client
4 // Copyright (c) 2009-2011, Radegast Development Team
5 // All rights reserved.
7 // Redistribution and use in source and binary forms, with or without
8 // modification, are permitted provided that the following conditions are met:
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.
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.
33 using System.Collections.Generic;
34 using System.ComponentModel;
39 using System.Windows.Forms;
40 using OpenMetaverse.StructuredData;
44 public enum AutoResponseType : int
47 WhenFromNonFriend = 1,
51 public partial class frmSettings : RadegastForm
54 private static bool settingInitialized = false;
56 public static void InitSettigs(Settings s)
58 if (s["im_timestamps"].Type == OSDType.Unknown)
60 s["im_timestamps"] = OSD.FromBoolean(true);
63 if (s["rlv_enabled"].Type == OSDType.Unknown)
65 s["rlv_enabled"] = new OSDBoolean(false);
68 if (s["mu_emotes"].Type == OSDType.Unknown)
70 s["mu_emotes"] = new OSDBoolean(false);
73 if (s["friends_notification_highlight"].Type == OSDType.Unknown)
75 s["friends_notification_highlight"] = new OSDBoolean(true);
78 if (!s.ContainsKey("no_typing_anim")) s["no_typing_anim"] = OSD.FromBoolean(false);
80 if (!s.ContainsKey("auto_response_type"))
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.";
86 if (!s.ContainsKey("script_syntax_highlight")) s["script_syntax_highlight"] = OSD.FromBoolean(true);
88 if (!s.ContainsKey("display_name_mode")) s["display_name_mode"] = (int)NameMode.Smart;
90 // Convert legacy settings from first last name to username
91 if (!s.ContainsKey("username") && (s.ContainsKey("first_name") && s.ContainsKey("last_name")))
93 s["username"] = s["first_name"] + " " + s["last_name"];
94 s.Remove("first_name");
95 s.Remove("last_name");
98 if (!s.ContainsKey("reconnect_time")) s["reconnect_time"] = 120;
100 if (!s.ContainsKey("transaction_notification_chat")) s["transaction_notification_chat"] = true;
102 if (!s.ContainsKey("transaction_notification_dialog")) s["transaction_notification_dialog"] = true;
104 if (!s.ContainsKey("minimize_to_tray")) s["minimize_to_tray"] = false;
106 if (!s.ContainsKey("scene_window_docked")) s["scene_window_docked"] = true;
108 if (!s.ContainsKey("taskbar_highlight")) s["taskbar_highlight"] = true;
110 if (!s.ContainsKey("rendering_occlusion_culling_enabled")) s["rendering_occlusion_culling_enabled"] = true;
112 if (!s.ContainsKey("send_rad_client_tag")) s["send_rad_client_tag"] = true;
116 public frmSettings(RadegastInstance instance)
118 if (settingInitialized)
120 frmSettings.InitSettigs(instance.GlobalSettings);
123 InitializeComponent();
125 s = instance.GlobalSettings;
126 tbpGraphics.Controls.Add(new Radegast.Rendering.GraphicsPreferences(instance));
127 cbChatTimestamps.Checked = s["chat_timestamps"].AsBoolean();
129 cbIMTimeStamps.Checked = s["im_timestamps"].AsBoolean();
131 cbChatTimestamps.CheckedChanged += new EventHandler(cbChatTimestamps_CheckedChanged);
132 cbIMTimeStamps.CheckedChanged += new EventHandler(cbIMTimeStamps_CheckedChanged);
134 cbTrasactDialog.Checked = s["transaction_notification_dialog"].AsBoolean();
135 cbTrasactChat.Checked = s["transaction_notification_chat"].AsBoolean();
137 cbFriendsNotifications.Checked = s["show_friends_online_notifications"].AsBoolean();
138 cbFriendsNotifications.CheckedChanged += new EventHandler(cbFriendsNotifications_CheckedChanged);
140 cbAutoReconnect.Checked = s["auto_reconnect"].AsBoolean();
141 cbAutoReconnect.CheckedChanged += new EventHandler(cbAutoReconnect_CheckedChanged);
143 cbHideLoginGraphics.Checked = s["hide_login_graphics"].AsBoolean();
144 cbHideLoginGraphics.CheckedChanged += new EventHandler(cbHideLoginGraphics_CheckedChanged);
146 cbRLV.Checked = s["rlv_enabled"].AsBoolean();
147 cbRLV.CheckedChanged += (object sender, EventArgs e) =>
149 s["rlv_enabled"] = new OSDBoolean(cbRLV.Checked);
152 cbMUEmotes.Checked = s["mu_emotes"].AsBoolean();
153 cbMUEmotes.CheckedChanged += (object sender, EventArgs e) =>
155 s["mu_emotes"] = new OSDBoolean(cbMUEmotes.Checked);
158 cbFriendsHighlight.Checked = s["friends_notification_highlight"].AsBoolean();
159 cbFriendsHighlight.CheckedChanged += (object sender, EventArgs e) =>
161 s["friends_notification_highlight"] = new OSDBoolean(cbFriendsHighlight.Checked);
164 if (s["chat_font_size"].Type != OSDType.Real)
166 s["chat_font_size"] = OSD.FromReal(((ChatConsole)instance.TabConsole.Tabs["chat"].Control).cbxInput.Font.Size);
169 cbFontSize.Text = s["chat_font_size"].AsReal().ToString(System.Globalization.CultureInfo.InvariantCulture);
171 if (!s.ContainsKey("minimize_to_tray")) s["minimize_to_tray"] = OSD.FromBoolean(false);
172 cbMinToTrey.Checked = s["minimize_to_tray"].AsBoolean();
173 cbMinToTrey.CheckedChanged += (object sender, EventArgs e) =>
175 s["minimize_to_tray"] = OSD.FromBoolean(cbMinToTrey.Checked);
179 cbNoTyping.Checked = s["no_typing_anim"].AsBoolean();
180 cbNoTyping.CheckedChanged += (object sender, EventArgs e) =>
182 s["no_typing_anim"] = OSD.FromBoolean(cbNoTyping.Checked);
185 txtAutoResponse.Text = s["auto_response_text"];
186 txtAutoResponse.TextChanged += (object sender, EventArgs e) =>
188 s["auto_response_text"] = txtAutoResponse.Text;
190 AutoResponseType art = (AutoResponseType)s["auto_response_type"].AsInteger();
193 case AutoResponseType.WhenBusy: rbAutobusy.Checked = true; break;
194 case AutoResponseType.WhenFromNonFriend: rbAutoNonFriend.Checked = true; break;
195 case AutoResponseType.Always: rbAutoAlways.Checked = true; break;
198 cbSyntaxHighlight.Checked = s["script_syntax_highlight"].AsBoolean();
199 cbSyntaxHighlight.CheckedChanged += (object sender, EventArgs e) =>
201 s["script_syntax_highlight"] = OSD.FromBoolean(cbSyntaxHighlight.Checked);
204 switch ((NameMode)s["display_name_mode"].AsInteger())
206 case NameMode.Standard: rbDNOff.Checked = true; break;
207 case NameMode.Smart: rbDNSmart.Checked = true; break;
208 case NameMode.DisplayNameAndUserName: rbDNDandUsernme.Checked = true; break;
209 case NameMode.OnlyDisplayName: rbDNOnlyDN.Checked = true; break;
212 txtReconnectTime.Text = s["reconnect_time"].AsInteger().ToString();
214 cbTaskBarHighLight.Checked = s["taskbar_highlight"];
215 cbTaskBarHighLight.CheckedChanged += (sender, e) =>
217 s["taskbar_highlight"] = cbTaskBarHighLight.Checked;
220 cbRadegastClientTag.Checked = s["send_rad_client_tag"];
221 cbRadegastClientTag.CheckedChanged += (sender, e) =>
223 s["send_rad_client_tag"] = cbRadegastClientTag.Checked;
224 instance.SetClientTag();
228 void cbHideLoginGraphics_CheckedChanged(object sender, EventArgs e)
230 s["hide_login_graphics"] = OSD.FromBoolean(cbHideLoginGraphics.Checked);
233 void cbAutoReconnect_CheckedChanged(object sender, EventArgs e)
235 s["auto_reconnect"] = OSD.FromBoolean(cbAutoReconnect.Checked);
238 void cbFriendsNotifications_CheckedChanged(object sender, EventArgs e)
240 s["show_friends_online_notifications"] = OSD.FromBoolean(cbFriendsNotifications.Checked);
243 void cbChatTimestamps_CheckedChanged(object sender, EventArgs e)
245 s["chat_timestamps"] = OSD.FromBoolean(cbChatTimestamps.Checked);
248 void cbIMTimeStamps_CheckedChanged(object sender, EventArgs e)
250 s["im_timestamps"] = OSD.FromBoolean(cbIMTimeStamps.Checked);
253 private void cbTrasactDialog_CheckedChanged(object sender, EventArgs e)
255 s["transaction_notification_dialog"] = OSD.FromBoolean(cbTrasactDialog.Checked);
258 private void cbTrasactChat_CheckedChanged(object sender, EventArgs e)
260 s["transaction_notification_chat"] = OSD.FromBoolean(cbTrasactChat.Checked);
263 private void UpdateFontSize()
266 double existing = s["chat_font_size"].AsReal();
268 if (!double.TryParse(cbFontSize.Text, out f))
270 cbFontSize.Text = s["chat_font_size"].AsReal().ToString(System.Globalization.CultureInfo.InvariantCulture);
274 if (Math.Abs(existing - f) > 0.0001f)
275 s["chat_font_size"] = OSD.FromReal(f);
279 private void cbFontSize_SelectedIndexChanged(object sender, EventArgs e)
284 private void cbFontSize_KeyDown(object sender, KeyEventArgs e)
286 if (e.KeyCode == Keys.Enter)
289 e.Handled = e.SuppressKeyPress = true;
293 private void cbFontSize_Leave(object sender, EventArgs e)
298 private void rbAutobusy_CheckedChanged(object sender, EventArgs e)
300 s["auto_response_type"] = (int)AutoResponseType.WhenBusy;
303 private void rbAutoNonFriend_CheckedChanged(object sender, EventArgs e)
305 s["auto_response_type"] = (int)AutoResponseType.WhenFromNonFriend;
308 private void rbAutoAlways_CheckedChanged(object sender, EventArgs e)
310 s["auto_response_type"] = (int)AutoResponseType.Always;
313 private void rbDNOff_CheckedChanged(object sender, EventArgs e)
316 s["display_name_mode"] = (int)NameMode.Standard;
319 private void rbDNSmart_CheckedChanged(object sender, EventArgs e)
321 if (rbDNSmart.Checked)
322 s["display_name_mode"] = (int)NameMode.Smart;
325 private void rbDNDandUsernme_CheckedChanged(object sender, EventArgs e)
327 if (rbDNDandUsernme.Checked)
328 s["display_name_mode"] = (int)NameMode.DisplayNameAndUserName;
331 private void rbDNOnlyDN_CheckedChanged(object sender, EventArgs e)
333 if (rbDNOnlyDN.Checked)
334 s["display_name_mode"] = (int)NameMode.OnlyDisplayName;
337 private void txtReconnectTime_TextChanged(object sender, EventArgs e)
339 string input = System.Text.RegularExpressions.Regex.Replace(txtReconnectTime.Text, @"[^\d]", "");
341 int.TryParse(input, out t);
343 if (txtReconnectTime.Text != t.ToString())
345 txtReconnectTime.Text = t.ToString();
346 txtReconnectTime.Select(txtReconnectTime.Text.Length, 0);
349 s["reconnect_time"] = t;