source: trunk/CrypPlugins/P2PEditor/P2PEditorSettings.cs @ 2379

Last change on this file since 2379 was 2379, checked in by kopal, 11 years ago
  • changing user name and/or password in settings now changes these also on the connect view
  • removed the lase message boxes and replaced them by label outputs
File size: 12.3 KB
Line 
1/*
2   Copyright 2010 Paul Lelgemann, University of Duisburg-Essen
3
4   Licensed under the Apache License, Version 2.0 (the "License");
5   you may not use this file except in compliance with the License.
6   You may obtain a copy of the License at
7
8       http://www.apache.org/licenses/LICENSE-2.0
9
10   Unless required by applicable law or agreed to in writing, software
11   distributed under the License is distributed on an "AS IS" BASIS,
12   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   See the License for the specific language governing permissions and
14   limitations under the License.
15*/
16
17using System.ComponentModel;
18using System.Windows;
19using Cryptool.P2P;
20using Cryptool.P2PEditor.GUI;
21using Cryptool.PluginBase;
22using Cryptool.Plugins.PeerToPeer.Internal;
23using System.Text;
24using System.Security.Cryptography;
25using System;
26using Cryptool.P2P.Internal;
27
28namespace Cryptool.P2PEditor
29{
30    internal class P2PEditorSettings : ISettings
31    {
32        private readonly P2PEditor p2PEditor;
33        private readonly P2PSettings settings;
34
35        private const string GroupExperienced = "experienced_settings";
36        private const string GroupExpert = "expert_settings";
37        private const string GroupServer = "server_settings";
38
39        public P2PEditorSettings(P2PEditor p2PEditor)
40        {
41            this.p2PEditor = p2PEditor;
42            settings = P2PSettings.Default;
43            try
44            {
45                if (settings.UpdateFlag)
46                {
47                    settings.Upgrade();
48                    settings.UpdateFlag = false;
49                    this.p2PEditor.GuiLogMessage("Upgrading settings", NotificationLevel.Debug);
50                }
51            }catch
52            {
53           
54            }
55            UpdateSettings();
56        }
57
58        #region Update visibility of server group
59
60        public void UpdateSettings()
61        {
62            if (TaskPaneAttributeChanged == null)
63                return;
64
65            if (P2PSettings.Default.Architecture == P2PArchitecture.Server)
66                UpdateServerOptionVisibilitySetting(Visibility.Visible);
67            else
68                UpdateServerOptionVisibilitySetting(Visibility.Hidden);
69        }
70
71        private void UpdateServerOptionVisibilitySetting(Visibility newVisibility)
72        {
73            TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("ServerHost", newVisibility)));
74            TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("ServerPort", newVisibility)));
75        }
76
77        #endregion
78
79        #region Events
80        public event TaskPaneAttributeChangedHandler TaskPaneAttributeChanged;
81        #endregion
82
83        #region ISettings Members
84
85        public event PropertyChangedEventHandler PropertyChanged;
86
87        public bool HasChanges { get; set; }
88
89        #endregion
90
91        #region Settings
92
93        [TaskPane("username_caption",
94            "username_tooltip"
95            , null, 0, false, ControlType.TextBox)]
96        public string PeerName
97        {
98            get { return settings.PeerName; }
99            set
100            {
101                if (value != settings.PeerName)
102                {
103                    settings.PeerName = value;
104                    OnPropertyChanged("PeerName");
105                    HasChanges = true;
106                }
107            }
108        }
109
110        [TaskPane("password_caption",
111            "password_tooltip"
112            , null, 1, false, ControlType.TextBoxHidden)]
113        public string Password
114        {
115            get { return P2PBase.DecryptString(settings.Password); }
116            set
117            {
118                if (P2PBase.EncryptString(value) != settings.Password)
119                {
120                    settings.Password = P2PBase.EncryptString(value);
121                    OnPropertyChanged("Password");
122                    HasChanges = true;
123                }
124            }
125        }
126
127        [TaskPane("worldname_caption", "worldname_tooltip", null, 2, false, ControlType.TextBox)]
128        public string WorldName
129        {
130            get { return settings.WorldName; }
131            set
132            {
133                if (value != settings.WorldName)
134                {
135                    settings.WorldName = value;
136                    OnPropertyChanged("WorldName");
137                    HasChanges = true;
138                }
139            }
140        }
141
142        // TODO New ControlType needed to choose dialogs? OpenFileDialog not fitting.
143        [TaskPane("workspacePath_caption", "workspacePath_tooltip", null, 3, true, ControlType.TextBox)]
144        public string WorkspacePath
145        {
146            get { return settings.WorkspacePath; }
147            set
148            {
149                if (value != settings.WorkspacePath)
150                {
151                    settings.WorkspacePath = value;
152                    OnPropertyChanged("WorkspacePath");
153                    HasChanges = true;
154                }
155            }
156        }
157
158        [TaskPane("start_caption", "start_tooltip", null, 3, true, ControlType.Button)]
159        public void ButtonStart()
160        {
161            if (!P2PManager.IsConnected)
162            {
163                P2PManager.Connect();
164                OnPropertyChanged("ButtonStart");
165                p2PEditor.GuiLogMessage(Resources.Attributes.start_launched, NotificationLevel.Info);
166                ((P2PEditorPresentation)p2PEditor.Presentation).UpdateConnectionState();
167            } else
168            {
169                p2PEditor.GuiLogMessage(Resources.Attributes.start_failed, NotificationLevel.Warning);
170            }
171        }
172
173        [TaskPane("stop_caption", "stop_tooltip", null, 4, true, ControlType.Button)]
174        public void ButtonStop()
175        {
176            if (P2PManager.IsConnected)
177            {
178                P2PManager.Disconnect();
179                OnPropertyChanged("ButtonStop");
180                p2PEditor.GuiLogMessage(Resources.Attributes.stop_launched, NotificationLevel.Info);
181            }
182            else
183            {
184                p2PEditor.GuiLogMessage(Resources.Attributes.stop_failed, NotificationLevel.Warning);
185            }
186        }
187
188        [TaskPane("distributedJobListRefreshInterval_caption", "distributedJobListRefreshInterval_tooltip", GroupExperienced, 0, false,
189            ControlType.NumericUpDown, ValidationType.RangeInteger, 0, int.MaxValue)]
190        public int DistributedJobListRefreshInterval
191        {
192            get { return settings.DistributedJobListRefreshInterval; }
193            set
194            {
195                if (value != settings.DistributedJobListRefreshInterval)
196                {
197                    settings.DistributedJobListRefreshInterval = value;
198                    OnPropertyChanged("DistributedJobListRefreshInterval");
199                    HasChanges = true;
200                }
201            }
202        }
203
204        [TaskPane("connectOnStartup_caption", "connectOnStartup_tooltip", GroupExperienced, 1, true,
205            ControlType.CheckBox)]
206        public bool ConnectOnStartup
207        {
208            get { return settings.ConnectOnStartup; }
209            set
210            {
211                if (value != settings.ConnectOnStartup)
212                {
213                    settings.ConnectOnStartup = value;
214                    OnPropertyChanged("ConnectOnStartup");
215                    HasChanges = true;
216                }
217            }
218        }
219
220        [TaskPane("linkmanager_caption", "linkmanager_tooltip", GroupExpert, 0, false,
221            ControlType.ComboBox, new[] {"Snal"})]
222        public int LinkManager
223        {
224            get { return (int) settings.LinkManager; }
225            set
226            {
227                if ((P2PLinkManagerType) value != settings.LinkManager)
228                {
229                    settings.LinkManager = (P2PLinkManagerType) value;
230                    OnPropertyChanged("LinkManager");
231                    HasChanges = true;
232                }
233            }
234        }
235
236        [TaskPane("bootstrapper_caption", "bootstrapper_tooltip", GroupExpert, 1, false
237            , ControlType.ComboBox, new[] {"LocalMachineBootstrapper", "IrcBootstrapper", "DnsBootstrapper"})]
238        public int Bootstrapper
239        {
240            get { return (int) settings.Bootstrapper; }
241            set
242            {
243                if ((P2PBootstrapperType) value != settings.Bootstrapper)
244                {
245                    settings.Bootstrapper = (P2PBootstrapperType) value;
246                    OnPropertyChanged("Bootstrapper");
247                    HasChanges = true;
248                }
249            }
250        }
251
252        [TaskPane("architecture_caption", "architecture_tooltip", GroupExpert, 2, false,
253            ControlType.ComboBox, new[] { "FullMesh", "Chord", "Server" , "WebDHT" })]
254        public int Architecture
255        {
256            get { return (int)settings.Architecture; }
257            set
258            {
259                if ((P2PArchitecture)value != settings.Architecture)
260                {
261                    settings.Architecture = (P2PArchitecture)value;
262                    UpdateSettings();
263                    OnPropertyChanged("Architecture");
264                    HasChanges = true;
265                }
266            }
267        }
268
269        [TaskPane("localPort_caption", "localPort_tooltip", GroupExpert, 4, false,
270            ControlType.NumericUpDown, ValidationType.RangeInteger, 0, 65535)]
271        public int LocalPort
272        {
273            get { return settings.LocalReceivingPort; }
274            set
275            {
276                if (value != settings.LocalReceivingPort)
277                {
278                    settings.LocalReceivingPort = value;
279                    OnPropertyChanged("LocalPort");
280                    HasChanges = true;
281                }
282            }
283        }
284
285        [TaskPane("useLocalAddressDetection_caption", "useLocalAddressDetection_tooltip", GroupExpert, 5, false,
286            ControlType.CheckBox)]
287        public bool UseLocalAddressDetection
288        {
289            get { return settings.UseLocalAddressDetection; }
290            set
291            {
292                if (value != settings.UseLocalAddressDetection)
293                {
294                    settings.UseLocalAddressDetection = value;
295                    OnPropertyChanged("UseLocalAddressDetection");
296                    HasChanges = true;
297                }
298            }
299        }
300
301        [TaskPane("log2monitor_caption", "log2monitor_tooltip", GroupExpert, 6, false,
302            ControlType.CheckBox)]
303        public bool Log2Monitor
304        {
305            get { return settings.Log2Monitor; }
306            set
307            {
308                if (value != settings.Log2Monitor)
309                {
310                    settings.Log2Monitor = value;
311                    OnPropertyChanged("Log2Monitor");
312                    HasChanges = true;
313                }
314            }
315        }
316
317        [TaskPane("serverHost_caption", "serverHost_tooltip", GroupServer, 1, false, ControlType.TextBox)]
318        public string ServerHost
319        {
320            get { return settings.ServerHost; }
321            set
322            {
323                if (value != settings.ServerHost)
324                {
325                    settings.ServerHost = value;
326                    OnPropertyChanged("ServerHost");
327                    HasChanges = true;
328                }
329            }
330        }
331
332        [TaskPane("serverPort_caption", "serverPort_tooltip", GroupServer, 4, false,
333            ControlType.NumericUpDown, ValidationType.RangeInteger, 0, 65535)]
334        public int ServerPort
335        {
336            get { return settings.ServerPort; }
337            set
338            {
339                if (value != settings.ServerPort)
340                {
341                    settings.ServerPort = value;
342                    OnPropertyChanged("ServerPort");
343                    HasChanges = true;
344                }
345            }
346        }
347
348        #endregion
349
350        private void OnPropertyChanged(string p)
351        {
352            if (PropertyChanged != null)
353            {
354                PropertyChanged(this, new PropertyChangedEventArgs(p));
355            }
356
357            P2PSettings.Default.Save();
358        }
359
360    }
361}
Note: See TracBrowser for help on using the repository browser.