source: trunk/CrypPlugins/WorkspaceManager/WorkspaceManager.cs @ 1617

Last change on this file since 1617 was 1617, checked in by kopal, 12 years ago
  • a delete of a plugin now leads to the delete of all left connections
  • added a first version of a Settings to the WorkspaceManager
  • some small bug fixes
File size: 13.9 KB
Line 
1/*                             
2   Copyright 2010 Nils Kopal, Viktor M.
3
4   Licensed under the Apache License, Version 2.0 (the "License");
5   you may not use this file except in compliance with the License.
6   You may obtain a copy of the License at
7
8       http://www.apache.org/licenses/LICENSE-2.0
9
10   Unless required by applicable law or agreed to in writing, software
11   distributed under the License is distributed on an "AS IS" BASIS,
12   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   See the License for the specific language governing permissions and
14   limitations under the License.
15*/
16
17
18using System;
19using System.Collections.Generic;
20using System.Linq;
21using System.Text;
22using Cryptool.Core;
23using Cryptool.PluginBase.Editor;
24using Cryptool.UiPluginBase;
25using Cryptool.PluginBase.IO;
26using Cryptool.PluginBase;
27
28using WorkspaceManager.Model;
29using WorkspaceManager.View;
30using WorkspaceManager.Execution;
31using WorkspaceManager.View.Container;
32using WorkspaceManager.View.Converter;
33using System.Windows;
34
35//Disable warnings for unused or unassigned fields and events:
36#pragma warning disable 0169, 0414, 0067
37
38namespace WorkspaceManager
39{
40    /// <summary>
41    /// Workspace Manager - PluginEditor based on MVC Pattern
42    /// </summary>
43    [EditorInfo("cwm")]
44    [Author("Viktor Matkovic,Nils Kopal", "nils.kopal@cryptool.org", "Universität Duisburg-Essen", "http://www.uni-due.de")]
45    [PluginInfo("WorkspaceManager.Resources.Attributes", false, "Workspace Manager", "Graphical plugin editor for the CrypTool workspace", null,
46      "AnotherEditor/icon.png",
47      "AnotherEditor/Images/addWorkspace.png",
48      "AnotherEditor/Images/deleteWorkspace.png",
49      "AnotherEditor/Images/importSubWorkspace.png")]
50    public class WorkspaceManager : IEditor
51    {
52
53        /// <summary>
54        /// Create a new Instance of the Editor
55        /// </summary>
56        public WorkspaceManager()
57        {
58            Settings = new WorkspaceManagerSettings();
59            New();                                 
60        }
61
62        #region private Members
63
64        private WorkspaceModel WorkspaceModel = null;
65        private WorkSpaceEditorView WorkspaceManagerEditorView = null;
66        private ExecutionEngine ExecutionEngine = null;
67        private bool executing = false;
68
69        #endregion
70
71        /// <summary>
72        /// Is this Editor executing?
73        /// </summary>
74        public bool isExecuting(){
75            return executing;
76        }
77
78        #region IEditor Members
79
80        /// <summary>
81        ///
82        /// </summary>
83        public event ChangeDisplayLevelHandler OnChangeDisplayLevel;
84
85        /// <summary>
86        ///
87        /// </summary>
88        public event SelectedPluginChangedHandler OnSelectedPluginChanged;
89
90        /// <summary>
91        ///
92        /// </summary>
93        public event ProjectTitleChangedHandler OnProjectTitleChanged;
94
95        /// <summary>
96        ///
97        /// </summary>
98        public event OpenProjectFileHandler OnOpenProjectFile;
99
100        /// <summary>
101        ///
102        /// </summary>
103        public event EditorSpecificPluginsChanged OnEditorSpecificPluginsChanged;
104
105        /// <summary>
106        /// Called by clicking on the new button of CrypTool
107        /// Creates a new Model
108        /// </summary>
109        public void New()
110        {
111            WorkspaceModel = new WorkspaceModel();
112            WorkspaceModel.WorkspaceManagerEditor = this;
113            WorkspaceManagerEditorView = new WorkSpaceEditorView(WorkspaceModel);
114            ExecutionEngine = new ExecutionEngine(this);
115            HasChanges = false;
116        }
117
118        /// <summary>
119        /// Called by clicking on the open button of CrypTool
120        /// </summary>
121        /// <param name="fileName"></param>
122        public void Open(string fileName)
123        {
124            try
125            {
126                GuiLogMessage("Loading Model: " + fileName, NotificationLevel.Info);
127                WorkspaceModel = ModelPersistance.loadModel(fileName);
128                HasChanges = false;
129            }
130            catch (Exception ex)
131            {
132                GuiLogMessage("Could not load Model:" + ex.ToString(), NotificationLevel.Error);
133            }
134        }
135
136        /// <summary>
137        /// Called by clicking on the save button of CrypTool
138        /// Serializes the Model into an xml file
139        /// </summary>
140        /// <param name="fileName"></param>
141        public void Save(string fileName)
142        {
143            try
144            {
145                GuiLogMessage("Saving Model: " + fileName, NotificationLevel.Info);
146                ModelPersistance.saveModel(this.WorkspaceModel, fileName);
147                HasChanges = false;
148            }
149            catch (Exception ex)
150            {
151                GuiLogMessage("Could not save Model:" + ex.ToString(), NotificationLevel.Error);               
152            }
153        }
154
155        /// <summary>
156        /// Called by double clicking on a plugin symbol of CrypTool
157        /// Adds a new PluginModel wrapping an instance of the selected plugin
158        /// </summary>
159        /// <param name="type"></param>
160        public void Add(Type type)
161        {
162            /*if (!executing)
163            {
164                PluginModel newPluginModel = WorkspaceModel.newPluginModel(new Point(10, 10), 100, 100, type);
165                GuiLogMessage("Added by double click: " + newPluginModel.Name, NotificationLevel.Info);
166                HasChanges = true;
167            }*/
168        }
169
170        /// <summary>
171        ///
172        /// </summary>
173        /// <param name="espi"></param>
174        public void AddEditorSpecific(EditorSpecificPluginInfo espi)
175        {
176            //to be implemented
177        }
178
179        /// <summary>
180        ///
181        /// </summary>
182        /// <param name="espi"></param>
183        public void DeleteEditorSpecific(EditorSpecificPluginInfo espi)
184        {
185            //to be implemented   
186        }
187
188        /// <summary>
189        /// Undo changes
190        /// </summary>
191        public void Undo()
192        {
193            //to be implemented
194        }
195
196        /// <summary>
197        /// Redo changes
198        /// </summary>
199        public void Redo()
200        {
201            //to be implemented
202        }
203
204        /// <summary>
205        /// Show the Help site
206        /// </summary>
207        public void ShowHelp()
208        {
209            //to be implemented
210        }
211
212        /// <summary>
213        /// Show the Description of the selected plugin
214        /// </summary>
215        public void ShowSelectedPluginDescription()
216        {
217            //to be implemented
218        }
219
220        /// <summary>
221        /// Is Undo possible
222        /// </summary>
223        public bool CanUndo
224        {
225            get;
226            set;
227        }
228
229        /// <summary>
230        /// Is Redo possible?
231        /// </summary>
232        public bool CanRedo
233        {
234            get;
235            set;
236        }
237
238        /// <summary>
239        /// Can the ExecutionEngine be started?
240        /// </summary>
241        public bool CanExecute
242        {
243            get{return !executing;}
244        }
245
246        /// <summary>
247        /// Can the ExecutionEngine be stopped?
248        /// </summary>
249        public bool CanStop
250        {
251            get { return executing; }
252        }
253
254        /// <summary>
255        /// Does this Editor has changes?
256        /// </summary>
257        public bool HasChanges
258        {
259            get;
260            set;
261        }
262
263        /// <summary>
264        /// DisplayLevel
265        /// </summary>
266        public DisplayLevel DisplayLevel
267        {
268            get;
269            set;
270           
271        }
272
273        /// <summary>
274        ///
275        /// </summary>
276        public List<EditorSpecificPluginInfo> EditorSpecificPlugins
277        {
278            get;
279            set;
280        }
281
282        #endregion
283
284        #region IPlugin Members
285
286        /// <summary>
287        ///
288        /// </summary>
289        public event StatusChangedEventHandler OnPluginStatusChanged;
290
291        /// <summary>
292        ///
293        /// </summary>
294        public event GuiLogNotificationEventHandler OnGuiLogNotificationOccured;
295
296        /// <summary>
297        ///
298        /// </summary>
299        public event PluginProgressChangedEventHandler OnPluginProgressChanged;
300
301        /// <summary>
302        /// Settings of this editor
303        /// </summary>
304        public ISettings Settings
305        {
306            get;
307            set;
308        }
309
310        /// <summary>
311        /// The Presentatio of this editor
312        /// </summary>
313        public System.Windows.Controls.UserControl Presentation
314        {
315            get {return WorkspaceManagerEditorView;}
316            set { WorkspaceManagerEditorView = (WorkSpaceEditorView)value; }
317        }
318
319        /// <summary>
320        /// The QuickWatchPresentation of this editor
321        /// </summary>
322        public System.Windows.Controls.UserControl QuickWatchPresentation
323        {
324            get;
325            set;
326        }
327
328        /// <summary>
329        /// Called before execution
330        /// </summary>
331        public void PreExecution()
332        {
333            //to be implemented
334        }
335
336        /// <summary>
337        /// Starts the ExecutionEngine to execute the model
338        /// </summary>
339        public void Execute()
340        {
341            if (executing)
342            {
343                return;
344            }
345           
346            try
347            {
348                GuiLogMessage("Execute Model now!", NotificationLevel.Info);
349                executing = true;               
350                ExecutionEngine.Execute(WorkspaceModel);
351            }
352            catch (Exception ex)
353            {
354                GuiLogMessage("Exception during the execution: " + ex.Message, NotificationLevel.Error);
355                executing = false;
356            }
357        }
358
359        /// <summary>
360        /// Called after the execution
361        /// </summary>
362        public void PostExecution()
363        {
364            //to be implemented
365        }
366
367        /// <summary>
368        /// Pause the execution
369        /// </summary>
370        public void Pause()
371        {
372            ExecutionEngine.Pause();
373        }
374
375        /// <summary>
376        /// Stop the ExecutionEngine
377        /// </summary>
378        public void Stop()
379        {
380            if (!executing)
381            {
382                return;
383            }
384
385            try
386            {
387                GuiLogMessage("Executing stopped by User!", NotificationLevel.Info);
388                ExecutionEngine.Stop();
389            }
390            catch (Exception ex)
391            {
392                GuiLogMessage("Exception during the stopping of the execution: " + ex.Message, NotificationLevel.Error);
393               
394            }
395            executing = false;
396        }
397
398        /// <summary>
399        /// Called to initialize the editor
400        /// </summary>
401        public void Initialize()
402        {
403            //to be implemented
404        }
405
406        /// <summary>
407        /// Called when the editor is disposed
408        /// </summary>
409        public void Dispose()
410        {
411            if (ExecutionEngine.IsRunning)
412            {
413                ExecutionEngine.Stop();
414            }
415        }
416
417        #endregion
418
419        #region INotifyPropertyChanged Members
420
421        /// <summary>
422        ///
423        /// </summary>
424        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
425
426        #endregion
427
428        #region IApplication Members
429
430        /// <summary>
431        ///
432        /// </summary>
433        private PluginManager pluginManager;
434        public PluginManager PluginManager
435        {
436            get { return pluginManager; }
437            set
438            {
439                pluginManager = value;
440                DragDropDataObjectToPluginConverter.PluginManager = value;
441            }         
442        }
443
444        #endregion
445
446        #region GuiLogMessage, Progress
447
448        /// <summary>
449        /// Loggs a message to the logging mechanism of CrypTool
450        /// </summary>
451        /// <param name="Message"></param>
452        /// <param name="notificationLevel"></param>
453        public void GuiLogMessage(string Message, NotificationLevel notificationLevel)
454        {
455            if (OnGuiLogNotificationOccured != null)
456            {
457                GuiLogEventArgs args = new GuiLogEventArgs(Message, this, notificationLevel);
458                args.Title = "-";
459                OnGuiLogNotificationOccured(this, args);
460            }
461        }
462
463        /// <summary>
464        /// GuiLogNotificationOccured
465        /// </summary>
466        /// <param name="sender"></param>
467        /// <param name="args"></param>
468        public void GuiLogNotificationOccured(IPlugin sender, GuiLogEventArgs args)
469        {
470            if (OnGuiLogNotificationOccured != null)
471                OnGuiLogNotificationOccured(sender, args);
472        }
473
474        /// <summary>
475        /// Progress of this editor
476        /// </summary>
477        /// <param name="Value"></param>
478        /// <param name="MaxValue"></param>
479        private void Progress(int Value, int MaxValue)
480        {
481            if (OnPluginProgressChanged != null)
482            {
483                OnPluginProgressChanged(this, new PluginProgressEventArgs(Value, MaxValue));
484            }
485        }
486        #endregion GuiLogMessage, Progress
487
488        /// <summary>
489        /// Selected Plugin changed by View
490        /// </summary>
491        /// <param name="args"></param>
492        public void onSelectedPluginChanged(PluginChangedEventArgs args)
493        {
494            this.OnSelectedPluginChanged(this, args);
495        }
496    }
497}
498
499//Restore warnings for unused or unassigned fields and events:
500#pragma warning restore 0169, 0414, 0067
Note: See TracBrowser for help on using the repository browser.