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

Last change on this file since 2182 was 2182, checked in by Sven Rech, 11 years ago

ribbon stuff

File size: 8.0 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 ChangeDisplayLevelHandler OnChangeDisplayLevel;
62
63        public event SelectedPluginChangedHandler OnSelectedPluginChanged;
64
65        public event ProjectTitleChangedHandler OnProjectTitleChanged;
66
67        public event OpenProjectFileHandler OnOpenProjectFile;
68
69        public event EditorSpecificPluginsChanged OnEditorSpecificPluginsChanged;
70
71        public void New()
72        {
73        }
74
75        public void Open(string fileName)
76        {
77        }
78
79        public void Save(string fileName)
80        {
81        }
82
83        public void Add(Type type)
84        {
85            if (type == null)
86                return;
87
88            plugin = type.CreateObject();
89
90            if (plugin == null)
91                return;
92
93            // TODO: projectManager.Add required?
94
95            inputProps.Clear();
96            outputProps.Clear();
97
98            foreach (PropertyInfoAttribute pInfo in this.plugin.GetProperties())
99            {
100                if (pInfo.Direction == Direction.InputData)
101                {
102                    inputProps.Add(pInfo);
103                }
104                else if (pInfo.Direction == Direction.OutputData)
105                {
106                    outputProps.Add(pInfo);
107                }
108            }
109
110            usrCtrlSimpleEditor.DisplayControls(plugin, inputProps, outputProps);
111
112            if (OnSelectedPluginChanged != null)
113                OnSelectedPluginChanged(this, new PluginChangedEventArgs(plugin, plugin.GetPluginInfoAttribute().Caption, DisplayPluginMode.Normal));
114        }
115
116        public void AddEditorSpecific(EditorSpecificPluginInfo espi)
117        {
118        }
119
120        public void DeleteEditorSpecific(EditorSpecificPluginInfo espi)
121        {
122        }
123
124        public void Undo()
125        {
126        }
127
128        public void Redo()
129        {
130        }
131
132        public void Cut()
133        {
134            throw new NotImplementedException();
135        }
136
137        public void Copy()
138        {
139            throw new NotImplementedException();
140        }
141
142        public void Paste()
143        {
144            throw new NotImplementedException();
145        }
146
147        public void Remove()
148        {
149            throw new NotImplementedException();
150        }
151
152        public void Print()
153        {
154            throw new NotImplementedException();
155        }
156
157        public void ShowHelp()
158        {
159        }
160
161        public void ShowSelectedPluginDescription()
162        {
163        }
164
165        public bool CanUndo
166        {
167            get { return false; }
168        }
169
170        public bool CanRedo
171        {
172            get { return false; }
173        }
174
175        public bool CanCut
176        {
177            get { return false; }
178        }
179
180        public bool CanCopy
181        {
182            get { return false; }
183        }
184
185        public bool CanPaste
186        {
187            get { return false; }
188        }
189
190        public bool CanRemove
191        {
192            get { return false; }
193        }
194
195        public bool CanExecute
196        {
197            get { return true; }
198        }
199
200        public bool CanPrint
201        {
202            get { return false; }
203        }
204
205        public DisplayLevel DisplayLevel
206        {
207            get;
208            set;
209        }
210
211        public List<EditorSpecificPluginInfo> EditorSpecificPlugins
212        {
213            get { return new List<EditorSpecificPluginInfo>(); }
214        }
215
216        public bool ReadOnly { get; set; }
217
218        public bool CanStop
219        {
220            get { return false; }
221        }
222
223        public bool HasChanges
224        {
225            get { return false; }
226        }
227
228        #endregion
229
230        #region IPlugin Members
231
232        public event StatusChangedEventHandler OnPluginStatusChanged;
233
234        public event GuiLogNotificationEventHandler OnGuiLogNotificationOccured;
235
236        public event PluginProgressChangedEventHandler OnPluginProgressChanged;
237
238        public UserControl Presentation
239        {
240            get { return usrCtrlSimpleEditor; }
241        }
242
243        public UserControl QuickWatchPresentation
244        {
245            get { return null; }
246        }
247
248        public void Execute()
249        {
250            if (this.plugin == null)
251            {
252                System.Windows.MessageBox.Show("Please select a plugin first!");
253                return;
254            }
255
256            foreach (PropertyInfoAttribute pInfo in inputProps)
257            {
258                if (usrCtrlSimpleEditor.IsUsingTextBox(pInfo))
259                {
260                    Type propType = pInfo.PropertyInfo.PropertyType;
261                    String text = usrCtrlSimpleEditor.GetBoxText(pInfo);
262
263                    object value = null;
264
265                    // TODO: should use some more generic string to propType parsing/casting
266
267                    if (propType == typeof(Int32))
268                        value = int.Parse(text);
269                    else if (propType == typeof(String))
270                        value = text;
271                    else if (propType == typeof(byte[]))
272                        value = Encoding.Default.GetBytes(text);
273
274                    plugin.SetPropertyValue(pInfo.PropertyInfo, value);
275                }
276            }
277
278            plugin.Execute();
279
280            foreach (PropertyInfoAttribute pInfo in outputProps)
281            {
282                if (usrCtrlSimpleEditor.IsUsingTextBox(pInfo))
283                {
284                    object obj = pInfo.PropertyInfo.GetValue(plugin, null);
285
286                    usrCtrlSimpleEditor.SetBoxText(pInfo, obj.ToString());
287                }
288            }
289
290        }
291
292        public void Pause()
293        {
294        }
295
296
297        public void Stop()
298        {
299        }
300
301        public void Initialize()
302        {
303        }
304
305        public void Dispose()
306        {
307        }
308
309        public void PreExecution()
310        {
311        }
312
313        public void PostExecution()
314        {
315        }
316
317        #endregion
318
319        #region IEditor Members
320
321
322        public void Active()
323        {
324        }
325
326        #endregion
327
328        #region IEditor Members
329
330
331        public event OpenTabHandler OnOpenTab;
332
333        #endregion
334    }
335}
Note: See TracBrowser for help on using the repository browser.