source: trunk/CrypPlugins/SimpleEditor/SimpleEditor.cs @ 2241

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

Removed further occurences of DisplayLevel and marked remainders in IPlugin interface as obsolete. This closes #122.

File size: 7.8 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using Cryptool.PluginBase;
6using System.Windows.Controls;
7using System.IO;
8using System.Windows.Media;
9using Cryptool.PluginBase.Editor;
10using Cryptool.PluginBase.IO;
11using Cryptool.Core;
12using System.Windows.Threading;
13using System.Threading;
14
15/*
16 * TODO:
17 * - Respect mandatory/optional flag
18 * - Execute only when mandatory properties are set
19 * - Catch Exceptions
20 * - Add support for more types
21 * - Re-enable support for files
22 * - Support settings
23 */
24namespace SimpleEditor
25{
26    [PluginInfo(false, "Simple Editor", "A simple Cryptool editor", "", "SimpleEditor/icon.png")]
27    public class SimpleEditor : IEditor
28    {
29        public PluginManager PluginManager { get; set; }
30        private SimpleEditorSettings settings;
31        private UserControlSimpleEditor usrCtrlSimpleEditor;
32        // this is the currently active plugin
33        private IPlugin plugin = null;
34
35        private List<PropertyInfoAttribute> inputProps;
36        private List<PropertyInfoAttribute> outputProps;
37       
38        public SimpleEditor()
39        {
40            this.settings = new SimpleEditorSettings();
41            this.usrCtrlSimpleEditor = new UserControlSimpleEditor();
42
43            this.inputProps = new List<PropertyInfoAttribute>();
44            this.outputProps = new List<PropertyInfoAttribute>();
45        }
46
47        public ISettings Settings
48        {
49            get { return this.settings; }
50            set { this.settings = (SimpleEditorSettings)value; }
51        }
52
53        #region INotifyPropertyChanged Members
54
55        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
56
57        #endregion
58
59        #region IEditor Members
60
61        public event SelectedPluginChangedHandler OnSelectedPluginChanged;
62
63        public event ProjectTitleChangedHandler OnProjectTitleChanged;
64
65        public event OpenProjectFileHandler OnOpenProjectFile;
66
67        public event EditorSpecificPluginsChanged OnEditorSpecificPluginsChanged;
68
69        public void New()
70        {
71        }
72
73        public void Open(string fileName)
74        {
75        }
76
77        public void Save(string fileName)
78        {
79        }
80
81        public void Add(Type type)
82        {
83            if (type == null)
84                return;
85
86            plugin = type.CreateObject();
87
88            if (plugin == null)
89                return;
90
91            // TODO: projectManager.Add required?
92
93            inputProps.Clear();
94            outputProps.Clear();
95
96            foreach (PropertyInfoAttribute pInfo in this.plugin.GetProperties())
97            {
98                if (pInfo.Direction == Direction.InputData)
99                {
100                    inputProps.Add(pInfo);
101                }
102                else if (pInfo.Direction == Direction.OutputData)
103                {
104                    outputProps.Add(pInfo);
105                }
106            }
107
108            usrCtrlSimpleEditor.DisplayControls(plugin, inputProps, outputProps);
109
110            if (OnSelectedPluginChanged != null)
111                OnSelectedPluginChanged(this, new PluginChangedEventArgs(plugin, plugin.GetPluginInfoAttribute().Caption, DisplayPluginMode.Normal));
112        }
113
114        public void AddEditorSpecific(EditorSpecificPluginInfo espi)
115        {
116        }
117
118        public void DeleteEditorSpecific(EditorSpecificPluginInfo espi)
119        {
120        }
121
122        public void Undo()
123        {
124        }
125
126        public void Redo()
127        {
128        }
129
130        public void Cut()
131        {
132            throw new NotImplementedException();
133        }
134
135        public void Copy()
136        {
137            throw new NotImplementedException();
138        }
139
140        public void Paste()
141        {
142            throw new NotImplementedException();
143        }
144
145        public void Remove()
146        {
147            throw new NotImplementedException();
148        }
149
150        public void Print()
151        {
152            throw new NotImplementedException();
153        }
154
155        public void ShowHelp()
156        {
157        }
158
159        public void ShowSelectedPluginDescription()
160        {
161        }
162
163        public bool CanUndo
164        {
165            get { return false; }
166        }
167
168        public bool CanRedo
169        {
170            get { return false; }
171        }
172
173        public bool CanCut
174        {
175            get { return false; }
176        }
177
178        public bool CanCopy
179        {
180            get { return false; }
181        }
182
183        public bool CanPaste
184        {
185            get { return false; }
186        }
187
188        public bool CanRemove
189        {
190            get { return false; }
191        }
192
193        public bool CanExecute
194        {
195            get { return true; }
196        }
197
198        public bool CanPrint
199        {
200            get { return false; }
201        }
202
203        public List<EditorSpecificPluginInfo> EditorSpecificPlugins
204        {
205            get { return new List<EditorSpecificPluginInfo>(); }
206        }
207
208        public bool ReadOnly { get; set; }
209
210        public bool CanStop
211        {
212            get { return false; }
213        }
214
215        public bool HasChanges
216        {
217            get { return false; }
218        }
219
220        #endregion
221
222        #region IPlugin Members
223
224        public event StatusChangedEventHandler OnPluginStatusChanged;
225
226        public event GuiLogNotificationEventHandler OnGuiLogNotificationOccured;
227
228        public event PluginProgressChangedEventHandler OnPluginProgressChanged;
229
230        public UserControl Presentation
231        {
232            get { return usrCtrlSimpleEditor; }
233        }
234
235        public UserControl QuickWatchPresentation
236        {
237            get { return null; }
238        }
239
240        public void Execute()
241        {
242            if (this.plugin == null)
243            {
244                System.Windows.MessageBox.Show("Please select a plugin first!");
245                return;
246            }
247
248            foreach (PropertyInfoAttribute pInfo in inputProps)
249            {
250                if (usrCtrlSimpleEditor.IsUsingTextBox(pInfo))
251                {
252                    Type propType = pInfo.PropertyInfo.PropertyType;
253                    String text = usrCtrlSimpleEditor.GetBoxText(pInfo);
254
255                    object value = null;
256
257                    // TODO: should use some more generic string to propType parsing/casting
258
259                    if (propType == typeof(Int32))
260                        value = int.Parse(text);
261                    else if (propType == typeof(String))
262                        value = text;
263                    else if (propType == typeof(byte[]))
264                        value = Encoding.Default.GetBytes(text);
265
266                    plugin.SetPropertyValue(pInfo.PropertyInfo, value);
267                }
268            }
269
270            plugin.Execute();
271
272            foreach (PropertyInfoAttribute pInfo in outputProps)
273            {
274                if (usrCtrlSimpleEditor.IsUsingTextBox(pInfo))
275                {
276                    object obj = pInfo.PropertyInfo.GetValue(plugin, null);
277
278                    usrCtrlSimpleEditor.SetBoxText(pInfo, obj.ToString());
279                }
280            }
281
282        }
283
284        public void Pause()
285        {
286        }
287
288
289        public void Stop()
290        {
291        }
292
293        public void Initialize()
294        {
295        }
296
297        public void Dispose()
298        {
299        }
300
301        public void PreExecution()
302        {
303        }
304
305        public void PostExecution()
306        {
307        }
308
309        #endregion
310
311        #region IEditor Members
312
313
314        public void Active()
315        {
316        }
317
318        #endregion
319
320        #region IEditor Members
321
322
323        public event OpenTabHandler OnOpenTab;
324
325        #endregion
326    }
327}
Note: See TracBrowser for help on using the repository browser.