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

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

Added some settings to CrypWin.
Now its possible to disable/hide some functionality.

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