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

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

reworked ribbon bar

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 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 Print()
148        {
149            throw new NotImplementedException();
150        }
151
152        public void ShowHelp()
153        {
154        }
155
156        public void ShowSelectedPluginDescription()
157        {
158        }
159
160        public bool CanUndo
161        {
162            get { return false; }
163        }
164
165        public bool CanRedo
166        {
167            get { return false; }
168        }
169
170        public bool CanCut
171        {
172            get { return false; }
173        }
174
175        public bool CanCopy
176        {
177            get { return false; }
178        }
179
180        public bool CanPaste
181        {
182            get { return false; }
183        }
184
185        public bool CanExecute
186        {
187            get { return true; }
188        }
189
190        public bool CanPrint
191        {
192            get { return false; }
193        }
194
195        public DisplayLevel DisplayLevel
196        {
197            get;
198            set;
199        }
200
201        public List<EditorSpecificPluginInfo> EditorSpecificPlugins
202        {
203            get { return new List<EditorSpecificPluginInfo>(); }
204        }
205
206        public bool ReadOnly { get; set; }
207
208        public bool CanStop
209        {
210            get { return false; }
211        }
212
213        public bool HasChanges
214        {
215            get { return false; }
216        }
217
218        #endregion
219
220        #region IPlugin Members
221
222        public event StatusChangedEventHandler OnPluginStatusChanged;
223
224        public event GuiLogNotificationEventHandler OnGuiLogNotificationOccured;
225
226        public event PluginProgressChangedEventHandler OnPluginProgressChanged;
227
228        public UserControl Presentation
229        {
230            get { return usrCtrlSimpleEditor; }
231        }
232
233        public UserControl QuickWatchPresentation
234        {
235            get { return null; }
236        }
237
238        public void Execute()
239        {
240            if (this.plugin == null)
241            {
242                System.Windows.MessageBox.Show("Please select a plugin first!");
243                return;
244            }
245
246            foreach (PropertyInfoAttribute pInfo in inputProps)
247            {
248                if (usrCtrlSimpleEditor.IsUsingTextBox(pInfo))
249                {
250                    Type propType = pInfo.PropertyInfo.PropertyType;
251                    String text = usrCtrlSimpleEditor.GetBoxText(pInfo);
252
253                    object value = null;
254
255                    // TODO: should use some more generic string to propType parsing/casting
256
257                    if (propType == typeof(Int32))
258                        value = int.Parse(text);
259                    else if (propType == typeof(String))
260                        value = text;
261                    else if (propType == typeof(byte[]))
262                        value = Encoding.Default.GetBytes(text);
263
264                    plugin.SetPropertyValue(pInfo.PropertyInfo, value);
265                }
266            }
267
268            plugin.Execute();
269
270            foreach (PropertyInfoAttribute pInfo in outputProps)
271            {
272                if (usrCtrlSimpleEditor.IsUsingTextBox(pInfo))
273                {
274                    object obj = pInfo.PropertyInfo.GetValue(plugin, null);
275
276                    usrCtrlSimpleEditor.SetBoxText(pInfo, obj.ToString());
277                }
278            }
279
280        }
281
282        public void Pause()
283        {
284        }
285
286
287        public void Stop()
288        {
289        }
290
291        public void Initialize()
292        {
293        }
294
295        public void Dispose()
296        {
297        }
298
299        public void PreExecution()
300        {
301        }
302
303        public void PostExecution()
304        {
305        }
306
307        #endregion
308
309        #region IEditor Members
310
311
312        public void Active()
313        {
314        }
315
316        #endregion
317
318        #region IEditor Members
319
320
321        public event OpenTabHandler OnOpenTab;
322
323        #endregion
324    }
325}
Note: See TracBrowser for help on using the repository browser.