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

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

added print button

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