OSDN Git Service

Update year in copyright header
[radegast/radegast.git] / Radegast / GUI / Dialogs / Settings.cs
1 
2 // 
3 // Radegast Metaverse Client
4 // Copyright (c) 2009-2011, 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.Standard;
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
99         public frmSettings(RadegastInstance instance)
100         {
101             if (settingInitialized)
102             {
103                 frmSettings.InitSettigs(instance.GlobalSettings);
104             }
105
106             InitializeComponent();
107             s = instance.GlobalSettings;
108
109             cbChatTimestamps.Checked = s["chat_timestamps"].AsBoolean();
110
111             cbIMTimeStamps.Checked = s["im_timestamps"].AsBoolean();
112
113             cbChatTimestamps.CheckedChanged += new EventHandler(cbChatTimestamps_CheckedChanged);
114             cbIMTimeStamps.CheckedChanged += new EventHandler(cbIMTimeStamps_CheckedChanged);
115
116             cbTrasactDialog.Checked = s["transaction_notification_dialog"].AsBoolean();
117             cbTrasactChat.Checked = s["transaction_notification_chat"].AsBoolean();
118
119             cbFriendsNotifications.Checked = s["show_friends_online_notifications"].AsBoolean();
120             cbFriendsNotifications.CheckedChanged += new EventHandler(cbFriendsNotifications_CheckedChanged);
121
122             cbAutoReconnect.Checked = s["auto_reconnect"].AsBoolean();
123             cbAutoReconnect.CheckedChanged += new EventHandler(cbAutoReconnect_CheckedChanged);
124
125             cbHideLoginGraphics.Checked = s["hide_login_graphics"].AsBoolean();
126             cbHideLoginGraphics.CheckedChanged += new EventHandler(cbHideLoginGraphics_CheckedChanged);
127
128             cbRLV.Checked = s["rlv_enabled"].AsBoolean();
129             cbRLV.CheckedChanged += (object sender, EventArgs e) =>
130             {
131                 s["rlv_enabled"] = new OSDBoolean(cbRLV.Checked);
132             };
133
134             cbMUEmotes.Checked = s["mu_emotes"].AsBoolean();
135             cbMUEmotes.CheckedChanged += (object sender, EventArgs e) =>
136             {
137                 s["mu_emotes"] = new OSDBoolean(cbMUEmotes.Checked);
138             };
139
140             cbFriendsHighlight.Checked = s["friends_notification_highlight"].AsBoolean();
141             cbFriendsHighlight.CheckedChanged += (object sender, EventArgs e) =>
142             {
143                 s["friends_notification_highlight"] = new OSDBoolean(cbFriendsHighlight.Checked);
144             };
145
146             if (s["chat_font_size"].Type != OSDType.Real)
147             {
148                 s["chat_font_size"] = OSD.FromReal(((ChatConsole)instance.TabConsole.Tabs["chat"].Control).cbxInput.Font.Size);
149             }
150
151             cbFontSize.Text = s["chat_font_size"].AsReal().ToString(System.Globalization.CultureInfo.InvariantCulture);
152
153             if (!s.ContainsKey("minimize_to_tray")) s["minimize_to_tray"] = OSD.FromBoolean(false);
154             cbMinToTrey.Checked = s["minimize_to_tray"].AsBoolean();
155             cbMinToTrey.CheckedChanged += (object sender, EventArgs e) =>
156                 {
157                     s["minimize_to_tray"] = OSD.FromBoolean(cbMinToTrey.Checked);
158                 };
159
160
161             cbNoTyping.Checked = s["no_typing_anim"].AsBoolean();
162             cbNoTyping.CheckedChanged += (object sender, EventArgs e) =>
163             {
164                 s["no_typing_anim"] = OSD.FromBoolean(cbNoTyping.Checked);
165             };
166
167             txtAutoResponse.Text = s["auto_response_text"];
168             txtAutoResponse.TextChanged += (object sender, EventArgs e) =>
169                 {
170                     s["auto_response_text"] = txtAutoResponse.Text;
171                 };
172             AutoResponseType art = (AutoResponseType)s["auto_response_type"].AsInteger();
173             switch (art)
174             {
175                 case AutoResponseType.WhenBusy: rbAutobusy.Checked = true; break;
176                 case AutoResponseType.WhenFromNonFriend: rbAutoNonFriend.Checked = true; break;
177                 case AutoResponseType.Always: rbAutoAlways.Checked = true; break;
178             }
179
180             cbSyntaxHighlight.Checked = s["script_syntax_highlight"].AsBoolean();
181             cbSyntaxHighlight.CheckedChanged += (object sender, EventArgs e) =>
182             {
183                 s["script_syntax_highlight"] = OSD.FromBoolean(cbSyntaxHighlight.Checked);
184             };
185
186             switch ((NameMode)s["display_name_mode"].AsInteger())
187             {
188                 case NameMode.Standard: rbDNOff.Checked = true; break;
189                 case NameMode.Smart: rbDNSmart.Checked = true; break;
190                 case NameMode.DisplayNameAndUserName: rbDNDandUsernme.Checked = true; break;
191                 case NameMode.OnlyDisplayName: rbDNOnlyDN.Checked = true; break;
192             }
193         }
194
195         void cbHideLoginGraphics_CheckedChanged(object sender, EventArgs e)
196         {
197             s["hide_login_graphics"] = OSD.FromBoolean(cbHideLoginGraphics.Checked);
198         }
199
200         void cbAutoReconnect_CheckedChanged(object sender, EventArgs e)
201         {
202             s["auto_reconnect"] = OSD.FromBoolean(cbAutoReconnect.Checked);
203         }
204
205         void cbFriendsNotifications_CheckedChanged(object sender, EventArgs e)
206         {
207             s["show_friends_online_notifications"] = OSD.FromBoolean(cbFriendsNotifications.Checked);
208         }
209
210         void cbChatTimestamps_CheckedChanged(object sender, EventArgs e)
211         {
212             s["chat_timestamps"] = OSD.FromBoolean(cbChatTimestamps.Checked);
213         }
214
215         void cbIMTimeStamps_CheckedChanged(object sender, EventArgs e)
216         {
217             s["im_timestamps"] = OSD.FromBoolean(cbIMTimeStamps.Checked);
218         }
219
220         private void cbTrasactDialog_CheckedChanged(object sender, EventArgs e)
221         {
222             s["transaction_notification_dialog"] = OSD.FromBoolean(cbTrasactDialog.Checked);
223         }
224
225         private void cbTrasactChat_CheckedChanged(object sender, EventArgs e)
226         {
227             s["transaction_notification_chat"] = OSD.FromBoolean(cbTrasactChat.Checked);
228         }
229
230         private void UpdateFontSize()
231         {
232             double f = 8.25;
233             double existing = s["chat_font_size"].AsReal();
234
235             if (!double.TryParse(cbFontSize.Text, out f))
236             {
237                 cbFontSize.Text = s["chat_font_size"].AsReal().ToString(System.Globalization.CultureInfo.InvariantCulture);
238                 return;
239             }
240
241             if (Math.Abs(existing - f) > 0.0001f)
242                 s["chat_font_size"] = OSD.FromReal(f);
243
244         }
245
246         private void cbFontSize_SelectedIndexChanged(object sender, EventArgs e)
247         {
248             UpdateFontSize();
249         }
250
251         private void cbFontSize_KeyDown(object sender, KeyEventArgs e)
252         {
253             if (e.KeyCode == Keys.Enter)
254             {
255                 UpdateFontSize();
256                 e.Handled = e.SuppressKeyPress = true;
257             }
258         }
259
260         private void cbFontSize_Leave(object sender, EventArgs e)
261         {
262             UpdateFontSize();
263         }
264
265         private void rbAutobusy_CheckedChanged(object sender, EventArgs e)
266         {
267             s["auto_response_type"] = (int)AutoResponseType.WhenBusy;
268         }
269
270         private void rbAutoNonFriend_CheckedChanged(object sender, EventArgs e)
271         {
272             s["auto_response_type"] = (int)AutoResponseType.WhenFromNonFriend;
273         }
274
275         private void rbAutoAlways_CheckedChanged(object sender, EventArgs e)
276         {
277             s["auto_response_type"] = (int)AutoResponseType.Always;
278         }
279
280         private void rbDNOff_CheckedChanged(object sender, EventArgs e)
281         {
282             if (rbDNOff.Checked)
283                 s["display_name_mode"] = (int)NameMode.Standard;
284         }
285
286         private void rbDNSmart_CheckedChanged(object sender, EventArgs e)
287         {
288             if (rbDNSmart.Checked)
289                 s["display_name_mode"] = (int)NameMode.Smart;
290         }
291
292         private void rbDNDandUsernme_CheckedChanged(object sender, EventArgs e)
293         {
294             if (rbDNDandUsernme.Checked)
295                 s["display_name_mode"] = (int)NameMode.DisplayNameAndUserName;
296         }
297
298         private void rbDNOnlyDN_CheckedChanged(object sender, EventArgs e)
299         {
300             if (rbDNOnlyDN.Checked)
301                 s["display_name_mode"] = (int)NameMode.OnlyDisplayName;
302         }
303     }
304 }