source: trunk/CrypPlugins/Gate/Gate.cs @ 1597

Last change on this file since 1597 was 740, checked in by Matthäus Wander, 12 years ago

CrypWin:

  • changed string Beta 01 -> 02
  • TextBoxHidden now loads its value when loading a project file
  • see #98 for an open issue

BigInteger/BigNumber:

  • added sanity checks for == operator and Equals()
  • setting input properties to null in PreExecution (addresses #90)

Tokenizer:

  • added \t as word delimiter (fixes problem with Enigma-Challenge_II)

Enigma:

  • added null reference sanity check

WordPatterns:

  • improved PostBuild events

ExamplePluginCT2:

  • added example plugin which serves as plugin template
  • the template is located in Documentation/Template/
File size: 6.7 KB
Line 
1/*
2   Copyright 2009 Matthäus Wander, Universität Duisburg-Essen
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
17using System;
18using System.Collections.Generic;
19using System.Linq;
20using System.Text;
21using Cryptool.PluginBase.Tool;
22using Cryptool.PluginBase;
23using Cryptool.PluginBase.Miscellaneous;
24using System.ComponentModel;
25using Cryptool.PluginBase.IO;
26using System.Runtime.CompilerServices;
27using System.Threading;
28using System.Diagnostics;
29using System.Runtime.Remoting.Contexts;
30
31namespace Gate
32{
33    [Author("Matthäus Wander", "wander@cryptool.org", "Universität Duisburg-Essen, Fachgebiet Verteilte Systeme", "http://www.vs.uni-due.de")]
34    [PluginInfo(false, "Gate", "Control operator", "", "Gate/gate_closed_32.png", "Gate/gate_open_32.png")]
35    [Synchronization]
36    public class Gate : IThroughput
37    {
38        private GateSettings settings = new GateSettings();
39        private object input;
40        private object output;
41        private bool oldControl = false;
42        private bool control = false;
43
44        private bool freshInput = false;
45        private bool freshControl = false;
46
47        private Object inputMonitor = new Object();
48        private Object controlMonitor = new Object();
49
50        [PropertyInfo(Direction.InputData, "Input", "Input object of any type", null, true, false, DisplayLevel.Beginner, QuickWatchFormat.Text, null)]
51        public object InputObject
52        {
53            get
54            {
55                return input;
56            }
57            set
58            {
59                input = value;
60                freshInput = true;
61                OnPropertyChanged("InputObject");
62            }
63        }
64
65        [PropertyInfo(Direction.InputData, "Control", "Controls whether to open gate", null, false, false, DisplayLevel.Beginner, QuickWatchFormat.Text, null)]
66        public bool Control
67        {
68            get
69            {
70                return control;
71            }
72            set
73            {
74                oldControl = control;
75                control = value;
76                freshControl = true;
77                OnPropertyChanged("Control");
78            }
79        }
80
81        [PropertyInfo(Direction.OutputData, "Output", "Output object", null, DisplayLevel.Beginner)]
82        public object OutputObject
83        {
84            get
85            {
86                return output;
87            }
88        }
89
90        #region IPlugin Members
91
92        public event StatusChangedEventHandler OnPluginStatusChanged;
93
94        public event GuiLogNotificationEventHandler OnGuiLogNotificationOccured;
95
96        public event PluginProgressChangedEventHandler OnPluginProgressChanged;
97
98        public Cryptool.PluginBase.ISettings Settings
99        {
100            get
101            {
102                return settings;
103            }
104            set
105            {
106                settings = (GateSettings)value;
107            }
108        }
109
110        public System.Windows.Controls.UserControl Presentation
111        {
112            get { return null; }
113        }
114
115        public System.Windows.Controls.UserControl QuickWatchPresentation
116        {
117            get { return null; }
118        }
119
120        public void PreExecution()
121        {
122            input = null;
123            output = null;
124            oldControl = false;
125            control = false;
126        }
127
128        public void Execute()
129        {
130            if (shallFire())
131            {
132                output = input;
133                freshControl = false;
134                freshInput = false;
135                ProgressChanged(1, 1);
136                OnPropertyChanged("OutputObject");
137
138                iconOpen();
139            }
140            else
141            {
142                output = null;
143                ProgressChanged(0.5, 1);
144
145                iconClosed();
146            }
147        }
148
149        private bool shallFire()
150        {
151            switch (settings.Trigger)
152            {
153                case Trigger.AlwaysOpen:
154                    return true;
155                case Trigger.AlwaysClosed:
156                    return false;
157                case Trigger.TrueValue:
158                    return freshInput && freshControl && control;
159                case Trigger.FalseValue:
160                    return freshInput && freshControl && !control;
161                case Trigger.AnyEdge:
162                    return freshInput && freshControl && control != oldControl;
163                case Trigger.PositiveEdge:
164                    return freshInput && freshControl && !oldControl && control;
165                case Trigger.NegativeEdge:
166                    return freshInput && freshControl && oldControl && !control;
167                default:
168                    return false;
169            }
170        }
171
172        private void iconOpen()
173        {
174            iconSet(1);
175        }
176
177        private void iconClosed()
178        {
179            iconSet(0);
180        }
181
182        private void iconSet(int index)
183        {
184            if (OnPluginStatusChanged != null)
185                OnPluginStatusChanged(this, new StatusEventArgs(StatusChangedMode.ImageUpdate, index));
186        }
187
188        public void PostExecution()
189        {
190        }
191
192        public void Pause()
193        {
194        }
195
196        public void Stop()
197        {
198        }
199
200        public void Initialize()
201        {
202        }
203
204        public void Dispose()
205        {
206        }
207
208        #endregion
209
210        #region INotifyPropertyChanged Members
211
212        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
213
214        #endregion
215
216        private void GuiLogMessage(string message, NotificationLevel logLevel)
217        {
218            EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(message, this, logLevel));
219        }
220
221        private void OnPropertyChanged(string name)
222        {
223            EventsHelper.PropertyChanged(PropertyChanged, this, new PropertyChangedEventArgs(name));
224        }
225
226        private void ProgressChanged(double value, double max)
227        {
228            EventsHelper.ProgressChanged(OnPluginProgressChanged, this, new PluginProgressEventArgs(value, max));
229        }
230    }
231}
Note: See TracBrowser for help on using the repository browser.