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

Last change on this file since 2356 was 2356, checked in by Matthäus Wander, 11 years ago

added DnsBootstrapper to P2P settings

File size: 11.8 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;
26
27namespace Cryptool.P2PEditor
28{
29    internal class P2PEditorSettings : ISettings
30    {
31        private readonly P2PEditor p2PEditor;
32        private readonly P2PSettings settings;
33
34        private const string GroupExperienced = "experienced_settings";
35        private const string GroupExpert = "expert_settings";
36        private const string GroupServer = "server_settings";
37
38        public P2PEditorSettings(P2PEditor p2PEditor)
39        {
40            this.p2PEditor = p2PEditor;
41            settings = P2PSettings.Default;
42            UpdateSettings();
43        }
44
45        #region Update visibility of server group
46
47        public void UpdateSettings()
48        {
49            if (TaskPaneAttributeChanged == null)
50                return;
51
52            if (P2PSettings.Default.Architecture == P2PArchitecture.Server)
53                UpdateServerOptionVisibilitySetting(Visibility.Visible);
54            else
55                UpdateServerOptionVisibilitySetting(Visibility.Hidden);
56        }
57
58        private void UpdateServerOptionVisibilitySetting(Visibility newVisibility)
59        {
60            TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("ServerHost", newVisibility)));
61            TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer("ServerPort", newVisibility)));
62        }
63
64        #endregion
65
66        #region Events
67        public event TaskPaneAttributeChangedHandler TaskPaneAttributeChanged;
68        #endregion
69
70        #region ISettings Members
71
72        public event PropertyChangedEventHandler PropertyChanged;
73
74        public bool HasChanges { get; set; }
75
76        #endregion
77
78        #region Settings
79
80        [TaskPane("username_caption",
81            "username_tooltip"
82            , null, 0, false, ControlType.TextBox)]
83        public string PeerName
84        {
85            get { return settings.PeerName; }
86            set
87            {
88                if (value != settings.PeerName)
89                {
90                    settings.PeerName = value;
91                    OnPropertyChanged("PeerName");
92                    HasChanges = true;
93                }
94            }
95        }
96
97        [TaskPane("password_caption",
98            "password_tooltip"
99            , null, 1, false, ControlType.TextBoxHidden)]
100        public string Password
101        {
102            get { return settings.Password; }
103            set
104            {
105                if (value != settings.Password)
106                {
107                    settings.Password = value;
108                    OnPropertyChanged("Password");
109                    HasChanges = true;
110                }
111            }
112        }
113
114        [TaskPane("worldname_caption", "worldname_tooltip", null, 2, false, ControlType.TextBox)]
115        public string WorldName
116        {
117            get { return settings.WorldName; }
118            set
119            {
120                if (value != settings.WorldName)
121                {
122                    settings.WorldName = value;
123                    OnPropertyChanged("WorldName");
124                    HasChanges = true;
125                }
126            }
127        }
128
129        // TODO New ControlType needed to choose dialogs? OpenFileDialog not fitting.
130        [TaskPane("workspacePath_caption", "workspacePath_tooltip", null, 3, true, ControlType.TextBox)]
131        public string WorkspacePath
132        {
133            get { return settings.WorkspacePath; }
134            set
135            {
136                if (value != settings.WorkspacePath)
137                {
138                    settings.WorkspacePath = value;
139                    OnPropertyChanged("WorkspacePath");
140                    HasChanges = true;
141                }
142            }
143        }
144
145        [TaskPane("start_caption", "start_tooltip", null, 3, true, ControlType.Button)]
146        public void ButtonStart()
147        {
148            if (!P2PManager.IsConnected)
149            {
150                P2PManager.Connect();
151                OnPropertyChanged("ButtonStart");
152                p2PEditor.GuiLogMessage(Resources.Attributes.start_launched, NotificationLevel.Info);
153                ((P2PEditorPresentation)p2PEditor.Presentation).UpdateConnectionState();
154            } else
155            {
156                p2PEditor.GuiLogMessage(Resources.Attributes.start_failed, NotificationLevel.Warning);
157            }
158        }
159
160        [TaskPane("stop_caption", "stop_tooltip", null, 4, true, ControlType.Button)]
161        public void ButtonStop()
162        {
163            if (P2PManager.IsConnected)
164            {
165                P2PManager.Disconnect();
166                OnPropertyChanged("ButtonStop");
167                p2PEditor.GuiLogMessage(Resources.Attributes.stop_launched, NotificationLevel.Info);
168            }
169            else
170            {
171                p2PEditor.GuiLogMessage(Resources.Attributes.stop_failed, NotificationLevel.Warning);
172            }
173        }
174
175        [TaskPane("distributedJobListRefreshInterval_caption", "distributedJobListRefreshInterval_tooltip", GroupExperienced, 0, false,
176            ControlType.NumericUpDown, ValidationType.RangeInteger, 0, int.MaxValue)]
177        public int DistributedJobListRefreshInterval
178        {
179            get { return settings.DistributedJobListRefreshInterval; }
180            set
181            {
182                if (value != settings.DistributedJobListRefreshInterval)
183                {
184                    settings.DistributedJobListRefreshInterval = value;
185                    OnPropertyChanged("DistributedJobListRefreshInterval");
186                    HasChanges = true;
187                }
188            }
189        }
190
191        [TaskPane("connectOnStartup_caption", "connectOnStartup_tooltip", GroupExperienced, 1, true,
192            ControlType.CheckBox)]
193        public bool ConnectOnStartup
194        {
195            get { return settings.ConnectOnStartup; }
196            set
197            {
198                if (value != settings.ConnectOnStartup)
199                {
200                    settings.ConnectOnStartup = value;
201                    OnPropertyChanged("ConnectOnStartup");
202                    HasChanges = true;
203                }
204            }
205        }
206
207        [TaskPane("linkmanager_caption", "linkmanager_tooltip", GroupExpert, 0, false,
208            ControlType.ComboBox, new[] {"Snal"})]
209        public int LinkManager
210        {
211            get { return (int) settings.LinkManager; }
212            set
213            {
214                if ((P2PLinkManagerType) value != settings.LinkManager)
215                {
216                    settings.LinkManager = (P2PLinkManagerType) value;
217                    OnPropertyChanged("LinkManager");
218                    HasChanges = true;
219                }
220            }
221        }
222
223        [TaskPane("bootstrapper_caption", "bootstrapper_tooltip", GroupExpert, 1, false
224            , ControlType.ComboBox, new[] {"LocalMachineBootstrapper", "IrcBootstrapper", "DnsBootstrapper"})]
225        public int Bootstrapper
226        {
227            get { return (int) settings.Bootstrapper; }
228            set
229            {
230                if ((P2PBootstrapperType) value != settings.Bootstrapper)
231                {
232                    settings.Bootstrapper = (P2PBootstrapperType) value;
233                    OnPropertyChanged("Bootstrapper");
234                    HasChanges = true;
235                }
236            }
237        }
238
239        [TaskPane("architecture_caption", "architecture_tooltip", GroupExpert, 2, false,
240            ControlType.ComboBox, new[] { "FullMesh", "Chord", "Server" , "SQLDB" , "WebDHT" })]
241        public int Architecture
242        {
243            get { return (int)settings.Architecture; }
244            set
245            {
246                if ((P2PArchitecture)value != settings.Architecture)
247                {
248                    settings.Architecture = (P2PArchitecture)value;
249                    UpdateSettings();
250                    OnPropertyChanged("Architecture");
251                    HasChanges = true;
252                }
253            }
254        }
255
256        [TaskPane("localPort_caption", "localPort_tooltip", GroupExpert, 4, false,
257            ControlType.NumericUpDown, ValidationType.RangeInteger, 0, 65535)]
258        public int LocalPort
259        {
260            get { return settings.LocalReceivingPort; }
261            set
262            {
263                if (value != settings.LocalReceivingPort)
264                {
265                    settings.LocalReceivingPort = value;
266                    OnPropertyChanged("LocalPort");
267                    HasChanges = true;
268                }
269            }
270        }
271
272        [TaskPane("useLocalAddressDetection_caption", "useLocalAddressDetection_tooltip", GroupExpert, 5, false,
273            ControlType.CheckBox)]
274        public bool UseLocalAddressDetection
275        {
276            get { return settings.UseLocalAddressDetection; }
277            set
278            {
279                if (value != settings.UseLocalAddressDetection)
280                {
281                    settings.UseLocalAddressDetection = value;
282                    OnPropertyChanged("UseLocalAddressDetection");
283                    HasChanges = true;
284                }
285            }
286        }
287
288        [TaskPane("log2monitor_caption", "log2monitor_tooltip", GroupExpert, 6, false,
289            ControlType.CheckBox)]
290        public bool Log2Monitor
291        {
292            get { return settings.Log2Monitor; }
293            set
294            {
295                if (value != settings.Log2Monitor)
296                {
297                    settings.Log2Monitor = value;
298                    OnPropertyChanged("Log2Monitor");
299                    HasChanges = true;
300                }
301            }
302        }
303
304        [TaskPane("serverHost_caption", "serverHost_tooltip", GroupServer, 1, false, ControlType.TextBox)]
305        public string ServerHost
306        {
307            get { return settings.ServerHost; }
308            set
309            {
310                if (value != settings.ServerHost)
311                {
312                    settings.ServerHost = value;
313                    OnPropertyChanged("ServerHost");
314                    HasChanges = true;
315                }
316            }
317        }
318
319        [TaskPane("serverPort_caption", "serverPort_tooltip", GroupServer, 4, false,
320            ControlType.NumericUpDown, ValidationType.RangeInteger, 0, 65535)]
321        public int ServerPort
322        {
323            get { return settings.ServerPort; }
324            set
325            {
326                if (value != settings.ServerPort)
327                {
328                    settings.ServerPort = value;
329                    OnPropertyChanged("ServerPort");
330                    HasChanges = true;
331                }
332            }
333        }
334
335        #endregion
336
337        private void OnPropertyChanged(string p)
338        {
339            if (PropertyChanged != null)
340            {
341                PropertyChanged(this, new PropertyChangedEventArgs(p));
342            }
343
344            P2PSettings.Default.Save();
345        }
346    }
347}
Note: See TracBrowser for help on using the repository browser.