source: trunk/CrypPlugins/ArrayIndexer/ArrayIndexer.cs @ 711

Last change on this file since 711 was 711, checked in by arnold, 12 years ago

Wiki week task: ArrayIndexer (retrieve one object via numeric index from an array)

File size: 5.3 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using Cryptool;
6using Cryptool.PluginBase.IO;
7using Cryptool.PluginBase;
8using Cryptool.PluginBase.Miscellaneous;
9using System.ComponentModel;
10
11namespace Cryptool.Plugins.ArrayIndexer
12{
13    [Author("Christian Arnold", "christian.arnold@stud.uni-due.de", "Uni Duisburg-Essen", "")]
14    [PluginInfo(true, "ArrayIndexer", "Content of the chosen index of the array", "", "ArrayIndexer/arrayindexer.png")]
15
16    public class ArrayIndexer : IThroughput
17    {
18        #region IPlugin Members
19
20        private ArrayIndexerSettings settings = new ArrayIndexerSettings();
21
22        private Array objInput = null;
23        private int arrayIndex = 0;
24        private object objOutput = null;
25
26        #region In and Out properties
27
28        [PropertyInfo(Direction.InputData, "Array Input", "The input object has to be an array type", "", true, false, DisplayLevel.Beginner, QuickWatchFormat.Text, null)]
29        public Array ObjInput
30        {
31            get
32            {
33                return objInput;
34            }
35            set
36            {
37                objInput = value;
38                OnPropertyChanged("ObjInput");
39            }
40        }
41
42        [PropertyInfo(Direction.InputData, "Index of Array", "Indexes of an array begin always with 0. Example: If you have an array of the length 8, you can index the values 0 to 7", "", DisplayLevel.Beginner)]
43        public int ArrayIndex
44        {
45            get
46            {
47                return this.arrayIndex;
48            }
49            set
50            {
51                this.arrayIndex = value;
52                settings.ArrayIndex = value;
53                OnPropertyChanged("ArrayIndex");
54            }
55        }
56
57        [PropertyInfo(Direction.OutputData, "Content of the chosen index of the array", "Content with the array-specific data type", "", DisplayLevel.Beginner)]
58        public object ObjOutput
59        {
60            get
61            {
62                return this.objOutput;
63            }
64            set
65            {
66                this.objOutput = value;
67                OnPropertyChanged("ObjOutput");
68            }
69        }
70
71        #endregion
72
73        public event StatusChangedEventHandler OnPluginStatusChanged;
74
75        public event GuiLogNotificationEventHandler OnGuiLogNotificationOccured;
76
77        public event PluginProgressChangedEventHandler OnPluginProgressChanged;
78
79        public Cryptool.PluginBase.ISettings Settings
80        {
81            get { return this.settings; }
82            set { this.settings = (ArrayIndexerSettings)value; }
83        }
84
85        public System.Windows.Controls.UserControl Presentation
86        {
87            get { return null; }
88        }
89
90        public System.Windows.Controls.UserControl QuickWatchPresentation
91        {
92            get { return null; }
93        }
94
95        public void PreExecution()
96        {
97        }
98
99        public void Execute()
100        {
101            if (ObjInput != null)
102            {
103                // error case, if array index is greater than the length of the array
104                if (ObjInput.Length <= settings.ArrayIndex)
105                {
106                    GuiLogMessage("Array Index is greater than the length of the array", NotificationLevel.Error);
107                    return;
108                }
109
110                if (ObjInput is string[])
111                {
112                    ObjOutput = ((string[])ObjInput)[settings.ArrayIndex];
113                }
114                else if (ObjInput is byte[])
115                {
116                    ObjOutput = ((byte[])ObjInput)[settings.ArrayIndex];
117                }
118                else if (ObjInput is int[])
119                {
120                    ObjOutput = ((int[])ObjInput)[settings.ArrayIndex];
121                }
122                else
123                {
124                    GuiLogMessage("Type of array not supported", NotificationLevel.Error);
125                    return;
126                }
127                GuiLogMessage("Array type is " + ObjInput.GetType().ToString() + " with value: " + ObjOutput.ToString(), NotificationLevel.Info);
128            }
129        }
130
131        public void PostExecution()
132        {
133        }
134
135        public void Pause()
136        {
137        }
138
139        public void Stop()
140        {
141        }
142
143        public void Initialize()
144        {
145        }
146
147        public void Dispose()
148        {
149        }
150
151        #endregion
152
153        #region INotifyPropertyChanged Members
154
155        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
156
157        public void OnPropertyChanged(string name)
158        {
159            EventsHelper.PropertyChanged(PropertyChanged, this, new PropertyChangedEventArgs(name));
160        }
161
162        public event PluginProgressChangedEventHandler OnPluginProcessChanged;
163
164        private void ProgressChanged(double value, double max)
165        {
166            EventsHelper.ProgressChanged(OnPluginProgressChanged, this, new PluginProgressEventArgs(value, max));
167        }
168
169        private void GuiLogMessage(string p, NotificationLevel notificationLevel)
170        {
171            EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(p, this, notificationLevel));
172        }
173
174        #endregion
175    }
176}
Note: See TracBrowser for help on using the repository browser.