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

Last change on this file since 1545 was 1545, checked in by Paul Lelgemann, 12 years ago

o CrypP2P: refactored P2PBase, removed race condition and unused code

File size: 7.9 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 Cryptool.P2P;
19using Cryptool.P2P.Worker;
20using Cryptool.PluginBase;
21using Cryptool.Plugins.PeerToPeer.Internal;
22
23namespace Cryptool.P2PEditor
24{
25    internal class P2PEditorSettings : ISettings
26    {
27        private readonly P2PEditor _p2PEditor;
28        private readonly P2PSettings _settings;
29
30        private const string GroupExpert = "advanced_settings";
31
32        public P2PEditorSettings(P2PEditor p2PEditor)
33        {
34            _p2PEditor = p2PEditor;
35            _settings = P2PSettings.Default;
36        }
37
38        #region ISettings Members
39
40        public event PropertyChangedEventHandler PropertyChanged;
41
42        public bool HasChanges { get; set; }
43
44        #endregion
45
46        #region Settings
47
48        [TaskPane("username_caption",
49            "username_tooltip"
50            , null, 0, false, DisplayLevel.Beginner, ControlType.TextBox)]
51        public string PeerName
52        {
53            get { return _settings.PeerName; }
54            set
55            {
56                if (value != _settings.PeerName)
57                {
58                    _settings.PeerName = value;
59                    OnPropertyChanged("PeerName");
60                    HasChanges = true;
61                }
62            }
63        }
64
65        [TaskPane("worldname_caption", "worldname_tooltip", null, 1, false, DisplayLevel.Beginner, ControlType.TextBox)]
66        public string WorldName
67        {
68            get { return _settings.WorldName; }
69            set
70            {
71                if (value != _settings.WorldName)
72                {
73                    _settings.WorldName = value;
74                    OnPropertyChanged("WorldName");
75                    HasChanges = true;
76                }
77            }
78        }
79
80        // TODO New ControlType needed to choose dialogs? OpenFileDialog not fitting.
81        [TaskPane("workspacePath_caption", "workspacePath_tooltip", null, 2, true, DisplayLevel.Beginner, ControlType.TextBox)]
82        public string WorkspacePath
83        {
84            get { return _settings.WorkspacePath; }
85            set
86            {
87                if (value != _settings.WorkspacePath)
88                {
89                    _settings.WorkspacePath = value;
90                    OnPropertyChanged("WorkspacePath");
91                    HasChanges = true;
92                }
93            }
94        }
95
96        [TaskPane("connectOnStartup_caption", "onnectOnStartup_tooltip", null, 3, true, DisplayLevel.Experienced,
97            ControlType.CheckBox)]
98        public bool ConnectOnStartup
99        {
100            get { return _settings.ConnectOnStartup; }
101            set
102            {
103                if (value != _settings.ConnectOnStartup)
104                {
105                    _settings.ConnectOnStartup = value;
106                    OnPropertyChanged("ConnectOnStartup");
107                    HasChanges = true;
108                }
109            }
110        }
111
112        // TODO make button obsolete - stop button should be fine, but is currently not suited (see todo in P2PEditor:Stop())
113        [TaskPane("stop_caption", "stop_tooltip", null, 4, true, DisplayLevel.Beginner, ControlType.Button)]
114        public void BtnStop()
115        {
116            if (P2PManager.Instance.IsP2PConnected() && !P2PManager.Instance.IsP2PConnecting)
117            {
118                new ConnectionWorker(P2PManager.Instance.P2PBase).Start();
119                OnPropertyChanged("BtnStop");
120            }
121        }
122
123        // TODO make button obsolete - find appropriate display method
124        [TaskPane("log_connection_state_caption", "log_connection_state_tooltip", null, 5, true, DisplayLevel.Beginner,
125            ControlType.Button)]
126        public void BtnLogConnectionState()
127        {
128            var logMsg = string.Format("Connection established: {0} / Currently connecting: {1} / Peer ID: {2}",
129                                       P2PManager.Instance.IsP2PConnected(), P2PManager.Instance.IsP2PConnecting,
130                                       P2PManager.Instance.UserInfo());
131            _p2PEditor.GuiLogMessage(logMsg, NotificationLevel.Info);
132        }
133
134        [TaskPane("linkmanager_caption", "linkmanager_tooltip", GroupExpert, 0, false, DisplayLevel.Professional,
135            ControlType.ComboBox, new[] {"Snal"})]
136        public int LinkManager
137        {
138            get { return (int) _settings.LinkManager; }
139            set
140            {
141                if ((P2PLinkManagerType) value != _settings.LinkManager)
142                {
143                    _settings.LinkManager = (P2PLinkManagerType) value;
144                    OnPropertyChanged("LinkManager");
145                    HasChanges = true;
146                }
147            }
148        }
149
150        [TaskPane("bootstrapper_caption", "bootstrapper_tooltip", GroupExpert, 1, false, DisplayLevel.Professional
151            , ControlType.ComboBox, new[] {"LocalMachineBootstrapper", "IrcBootstrapper"})]
152        public int Bootstrapper
153        {
154            get { return (int) _settings.Bootstrapper; }
155            set
156            {
157                if ((P2PBootstrapperType) value != _settings.Bootstrapper)
158                {
159                    _settings.Bootstrapper = (P2PBootstrapperType) value;
160                    OnPropertyChanged("Bootstrapper");
161                    HasChanges = true;
162                }
163            }
164        }
165
166        [TaskPane("overlay_caption", "overlay_tooltip", GroupExpert, 2, false, DisplayLevel.Professional,
167            ControlType.ComboBox, new[] {"FullMeshOverlay"})]
168        public int Overlay
169        {
170            get { return (int) _settings.Overlay; }
171            set
172            {
173                if ((P2POverlayType) value != _settings.Overlay)
174                {
175                    _settings.Overlay = (P2POverlayType) value;
176                    OnPropertyChanged("Overlay");
177                    HasChanges = true;
178                }
179            }
180        }
181
182        [TaskPane("dht_caption", "dht_tooltip", GroupExpert, 3, false, DisplayLevel.Professional,
183            ControlType.ComboBox, new[] {"FullMeshDHT"})]
184        public int Dht
185        {
186            get { return (int) _settings.Dht; }
187            set
188            {
189                if ((P2PDHTType) value != _settings.Dht)
190                {
191                    _settings.Dht = (P2PDHTType) value;
192                    OnPropertyChanged("Dht");
193                    HasChanges = true;
194                }
195            }
196        }
197
198        [TaskPane("log2monitor_caption", "log2monitor_tooltip", GroupExpert, 4, false, DisplayLevel.Expert,
199            ControlType.CheckBox)]
200        public bool Log2Monitor
201        {
202            get { return _settings.Log2Monitor; }
203            set
204            {
205                if (value != _settings.Log2Monitor)
206                {
207                    _settings.Log2Monitor = value;
208                    OnPropertyChanged("Log2Monitor");
209                    HasChanges = true;
210                }
211            }
212        }
213
214        #endregion
215
216        private void OnPropertyChanged(string p)
217        {
218            if (PropertyChanged != null)
219            {
220                PropertyChanged(this, new PropertyChangedEventArgs(p));
221            }
222
223            P2PSettings.Default.Save();
224        }
225    }
226}
Note: See TracBrowser for help on using the repository browser.