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

Last change on this file since 2426 was 2426, checked in by sauer, 11 years ago

Wizard: sample input

File size: 7.9 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 string SamplesDir
204        {
205            set {  }
206        }
207
208        public List<EditorSpecificPluginInfo> EditorSpecificPlugins
209        {
210            get { return new List<EditorSpecificPluginInfo>(); }
211        }
212
213        public bool ReadOnly { get; set; }
214
215        public bool CanStop
216        {
217            get { return false; }
218        }
219
220        public bool HasChanges
221        {
222            get { return false; }
223        }
224
225        #endregion
226
227        #region IPlugin Members
228
229        public event StatusChangedEventHandler OnPluginStatusChanged;
230
231        public event GuiLogNotificationEventHandler OnGuiLogNotificationOccured;
232
233        public event PluginProgressChangedEventHandler OnPluginProgressChanged;
234
235        public UserControl Presentation
236        {
237            get { return usrCtrlSimpleEditor; }
238        }
239
240        public UserControl QuickWatchPresentation
241        {
242            get { return null; }
243        }
244
245        public void Execute()
246        {
247            if (this.plugin == null)
248            {
249                System.Windows.MessageBox.Show("Please select a plugin first!");
250                return;
251            }
252
253            foreach (PropertyInfoAttribute pInfo in inputProps)
254            {
255                if (usrCtrlSimpleEditor.IsUsingTextBox(pInfo))
256                {
257                    Type propType = pInfo.PropertyInfo.PropertyType;
258                    String text = usrCtrlSimpleEditor.GetBoxText(pInfo);
259
260                    object value = null;
261
262                    // TODO: should use some more generic string to propType parsing/casting
263
264                    if (propType == typeof(Int32))
265                        value = int.Parse(text);
266                    else if (propType == typeof(String))
267                        value = text;
268                    else if (propType == typeof(byte[]))
269                        value = Encoding.Default.GetBytes(text);
270
271                    plugin.SetPropertyValue(pInfo.PropertyInfo, value);
272                }
273            }
274
275            plugin.Execute();
276
277            foreach (PropertyInfoAttribute pInfo in outputProps)
278            {
279                if (usrCtrlSimpleEditor.IsUsingTextBox(pInfo))
280                {
281                    object obj = pInfo.PropertyInfo.GetValue(plugin, null);
282
283                    usrCtrlSimpleEditor.SetBoxText(pInfo, obj.ToString());
284                }
285            }
286
287        }
288
289        public void Pause()
290        {
291        }
292
293
294        public void Stop()
295        {
296        }
297
298        public void Initialize()
299        {
300        }
301
302        public void Dispose()
303        {
304        }
305
306        public void PreExecution()
307        {
308        }
309
310        public void PostExecution()
311        {
312        }
313
314        #endregion
315
316        #region IEditor Members
317
318
319        public void Active()
320        {
321        }
322
323        #endregion
324
325        #region IEditor Members
326
327
328        public event OpenTabHandler OnOpenTab;
329
330        #endregion
331    }
332}
Note: See TracBrowser for help on using the repository browser.