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
RevLine 
[4]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;
[903]9using Cryptool.PluginBase.Editor;
10using Cryptool.PluginBase.IO;
[4]11using Cryptool.Core;
[903]12using System.Windows.Threading;
13using System.Threading;
[4]14
[903]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 */
[4]24namespace SimpleEditor
25{
[903]26    [PluginInfo(false, "Simple Editor", "A simple Cryptool editor", "", "SimpleEditor/icon.png")]
[4]27    public class SimpleEditor : IEditor
28    {
[903]29        public PluginManager PluginManager { get; set; }
[4]30        private SimpleEditorSettings settings;
31        private UserControlSimpleEditor usrCtrlSimpleEditor;
[903]32        // this is the currently active plugin
33        private IPlugin plugin = null;
[4]34
[903]35        private List<PropertyInfoAttribute> inputProps;
36        private List<PropertyInfoAttribute> outputProps;
[4]37       
38        public SimpleEditor()
39        {
40            this.settings = new SimpleEditorSettings();
[903]41            this.usrCtrlSimpleEditor = new UserControlSimpleEditor();
42
43            this.inputProps = new List<PropertyInfoAttribute>();
44            this.outputProps = new List<PropertyInfoAttribute>();
[4]45        }
46
[903]47        public ISettings Settings
[4]48        {
49            get { return this.settings; }
50            set { this.settings = (SimpleEditorSettings)value; }
51        }
52
[903]53        #region INotifyPropertyChanged Members
54
55        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
56
57        #endregion
58
[4]59        #region IEditor Members
60
[903]61        public event ChangeDisplayLevelHandler OnChangeDisplayLevel;
[4]62
[903]63        public event SelectedPluginChangedHandler OnSelectedPluginChanged;
[4]64
[903]65        public event ProjectTitleChangedHandler OnProjectTitleChanged;
66
67        public event OpenProjectFileHandler OnOpenProjectFile;
68
69        public event EditorSpecificPluginsChanged OnEditorSpecificPluginsChanged;
70
71        public void New()
72        {
[4]73        }
74
[903]75        public void Open(string fileName)
[4]76        {
77        }
78
[903]79        public void Save(string fileName)
[4]80        {
[903]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())
[4]99            {
[903]100                if (pInfo.Direction == Direction.InputData)
[4]101                {
[903]102                    inputProps.Add(pInfo);
[4]103                }
[903]104                else if (pInfo.Direction == Direction.OutputData)
[4]105                {
[903]106                    outputProps.Add(pInfo);
[4]107                }
[903]108            }
[4]109
[903]110            usrCtrlSimpleEditor.DisplayControls(plugin, inputProps, outputProps);
[904]111
112            if (OnSelectedPluginChanged != null)
113                OnSelectedPluginChanged(this, new PluginChangedEventArgs(plugin, plugin.GetPluginInfoAttribute().Caption, DisplayPluginMode.Normal));
[903]114        }
[4]115
[903]116        public void AddEditorSpecific(EditorSpecificPluginInfo espi)
117        {
118        }
[4]119
[903]120        public void DeleteEditorSpecific(EditorSpecificPluginInfo espi)
121        {
122        }
[4]123
[903]124        public void Undo()
125        {
126        }
[4]127
[903]128        public void Redo()
129        {
130        }
[4]131
[2168]132        public void Print()
133        {
134            throw new NotImplementedException();
135        }
136
[903]137        public void ShowHelp()
138        {
139        }
[4]140
[903]141        public void ShowSelectedPluginDescription()
142        {
[4]143        }
144
[903]145        public bool CanUndo
[4]146        {
[903]147            get { return false; }
[4]148        }
149
[903]150        public bool CanRedo
151        {
152            get { return false; }
153        }
[4]154
[903]155        public bool CanExecute
156        {
157            get { return true; }
158        }
[4]159
[2168]160        public bool CanPrint
161        {
162            get { return false; }
163        }
164
[903]165        public DisplayLevel DisplayLevel
166        {
167            get;
168            set;
169        }
[4]170
[903]171        public List<EditorSpecificPluginInfo> EditorSpecificPlugins
[4]172        {
[903]173            get { return new List<EditorSpecificPluginInfo>(); }
[4]174        }
175
[2116]176        public bool ReadOnly { get; set; }
177
[4]178        public bool CanStop
179        {
[903]180            get { return false; }
[4]181        }
182
[903]183        public bool HasChanges
[4]184        {
[903]185            get { return false; }
[4]186        }
187
188        #endregion
189
190        #region IPlugin Members
191
[903]192        public event StatusChangedEventHandler OnPluginStatusChanged;
193
194        public event GuiLogNotificationEventHandler OnGuiLogNotificationOccured;
195
196        public event PluginProgressChangedEventHandler OnPluginProgressChanged;
197
198        public UserControl Presentation
[4]199        {
[903]200            get { return usrCtrlSimpleEditor; }
[4]201        }
202
[903]203        public UserControl QuickWatchPresentation
[4]204        {
[903]205            get { return null; }
[4]206        }
207
[903]208        public void Execute()
209        {
210            if (this.plugin == null)
211            {
212                System.Windows.MessageBox.Show("Please select a plugin first!");
213                return;
214            }
[4]215
[903]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);
[4]222
[903]223                    object value = null;
[4]224
[903]225                    // TODO: should use some more generic string to propType parsing/casting
[4]226
[903]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);
[4]233
[903]234                    plugin.SetPropertyValue(pInfo.PropertyInfo, value);
235                }
236            }
[4]237
[903]238            plugin.Execute();
[4]239
[903]240            foreach (PropertyInfoAttribute pInfo in outputProps)
[4]241            {
[903]242                if (usrCtrlSimpleEditor.IsUsingTextBox(pInfo))
243                {
244                    object obj = pInfo.PropertyInfo.GetValue(plugin, null);
245
246                    usrCtrlSimpleEditor.SetBoxText(pInfo, obj.ToString());
247                }
[4]248            }
[903]249
[4]250        }
251
[903]252        public void Pause()
[4]253        {
254        }
255
[903]256
257        public void Stop()
[4]258        {
259        }
260
[903]261        public void Initialize()
262        {
263        }
[4]264
[903]265        public void Dispose()
266        {
267        }
[4]268
[903]269        public void PreExecution()
270        {
271        }
[4]272
[903]273        public void PostExecution()
274        {
275        }
276
[4]277        #endregion
[1951]278
279        #region IEditor Members
280
281
[1954]282        public void Active()
[1951]283        {
284        }
285
286        #endregion
[1994]287
288        #region IEditor Members
289
290
291        public event OpenTabHandler OnOpenTab;
292
293        #endregion
[4]294    }
295}
Note: See TracBrowser for help on using the repository browser.