source: trunk/CrypPlugins/ClipboardOutput/ClipboardOutput.cs @ 2220

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

shortened license text to boilerplate notice in all source files

File size: 6.6 KB
Line 
1/*
2   Copyright 2008 Timm Korte, University of Siegen
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// Cryptool ClipboardOutput Plugin
18// Author: Timm Korte, cryptool@easycrypt.de
19
20using System;
21using System.Collections.Generic;
22using System.Linq;
23using System.Text;
24using System.IO;
25using Cryptool.PluginBase;
26using System.Windows.Forms;
27using System.Threading;
28using System.ComponentModel;
29using Cryptool.PluginBase.IO;
30using System.Runtime.Remoting.Contexts;
31using Cryptool.PluginBase.Miscellaneous;
32
33namespace ClipboardOutput {
34  // Converts a stream to given format and writes the results to the clipboard
35  [Author("Timm Korte", "cryptool@easycrypt.de", "Uni Bochum", "http://www.ruhr-uni-bochum.de")]
36  [PluginInfo(false, "ClipboardOutput", "Simple clipboard output plugin.", "", "ClipboardOutput/icon.png")]
37  [Synchronization(SynchronizationAttribute.REQUIRES_NEW)]
38        public class ClipboardOutput : IOutput
39  {
40
41                #region Private Variables
42    private List<CryptoolStream> listCryptoolStreamsOut = new List<CryptoolStream>();
43                private ClipboardOutputSettings settings;
44               
45                public ISettings Settings {
46                        get { return (ISettings)settings; }
47                        set { settings = (ClipboardOutputSettings)value; }
48                }
49
50                #endregion
51
52                public ClipboardOutput() {
53                        this.settings = new ClipboardOutputSettings();
54                }
55
56    private string data;
57    public string Data
58    {
59      get { return data; }
60      set { data = value; }
61    }
62
63    private void SetClipboardData()
64    {
65      try
66      {
67        Clipboard.SetText(Data);
68        OnPropertyChanged("StreamInput");
69      }
70      catch (Exception ex)
71      {       
72        GuiLogMessage(ex.Message, NotificationLevel.Error);
73      }
74    }
75
76                #region Interface
77    private CryptoolStream streamInput;
78    [PropertyInfo(Direction.InputData, "Stream", "Data to be copied to clipboard", "", true, false, DisplayLevel.Beginner, QuickWatchFormat.Text, null)]
79    public CryptoolStream StreamInput
80    {
81                        get 
82      {
83        if (Data != null && Data != string.Empty)
84        {
85          CryptoolStream cs = new CryptoolStream();
86          listCryptoolStreamsOut.Add(cs);
87          cs.OpenRead(this.GetPluginInfoAttribute().Caption, Encoding.Default.GetBytes(Data.ToCharArray()));
88         
89          return cs;
90        }
91        return null;
92      }
93                        set 
94      {
95        Progress(0.5, 1.0);
96                                if (value != null) 
97        {
98          streamInput = value;
99                                        switch (settings.Format) { //0="Text", 1="Hex", 2="Base64"
100                                                case 1:
101              Data = Stream2Hex(value);
102                                                        GuiLogMessage("converting input data to hex...", NotificationLevel.Debug);
103                                                        break;
104                                                case 2:
105              Data = Stream2Base64(value);
106                                                        GuiLogMessage("converting input data to base64...", NotificationLevel.Debug);
107                                                        break;
108                                                default:
109              Data = Stream2Text(value);
110                                                        GuiLogMessage("converting input data to text...", NotificationLevel.Debug);
111                                                        break;
112                                        }
113
114          Thread t = new Thread(new ThreadStart(SetClipboardData));
115          t.SetApartmentState(ApartmentState.STA);
116          t.Start();
117          t.Join();
118                                               
119                                        GuiLogMessage("Wrote " + data.Length + " characters to clipboard", NotificationLevel.Info);
120          Progress(1.0, 1.0);
121          value.Close();         
122                                } 
123        else 
124        {                               
125                                        GuiLogMessage("ERROR - no input data recieved", NotificationLevel.Error);
126          Progress(1.0, 1.0);
127                                }
128                        }
129                }
130
131    private string Stream2Text(CryptoolStream value)
132    {
133                        int byteValue;
134                        value.Seek(0, SeekOrigin.Begin);
135                        StringBuilder sb = new StringBuilder();
136                        while ((byteValue = value.ReadByte()) != -1) 
137      {
138                                sb.Append(System.Convert.ToChar(byteValue));
139                        }
140                        return sb.ToString();
141                }
142
143    private string Stream2Base64(CryptoolStream value)
144    {
145                        byte[] byteValues = new byte[value.Length];
146                        value.Seek(0, SeekOrigin.Begin);
147                        value.Read(byteValues, 0, (int)value.Length);
148                        return Convert.ToBase64String(byteValues);
149                }
150
151    private string Stream2Hex(CryptoolStream value)
152    {
153                        int byteValue;
154                        value.Seek(0, SeekOrigin.Begin);
155                        StringBuilder sb = new StringBuilder();
156                        while ((byteValue = value.ReadByte()) != -1) 
157      {
158                                sb.Append(byteValue.ToString("x2"));
159      }
160                        return sb.ToString();
161          }
162
163                #endregion
164
165                #region IPlugin Member
166    public event StatusChangedEventHandler OnPluginStatusChanged;
167    public event GuiLogNotificationEventHandler OnGuiLogNotificationOccured;
168    public event PluginProgressChangedEventHandler OnPluginProgressChanged;
169
170    public System.Windows.Controls.UserControl Presentation
171    {
172      get { return null; }
173                }
174
175    public System.Windows.Controls.UserControl QuickWatchPresentation
176    {
177      get { return null; }
178    }
179
180                public void Initialize() {
181                }
182
183                public void Dispose() 
184    {
185      foreach (CryptoolStream crytoolStream in listCryptoolStreamsOut)
186      {
187        crytoolStream.Close();
188      }
189      listCryptoolStreamsOut.Clear();
190                }
191
192    public void Stop()
193    {
194
195    }
196
197    public void PreExecution()
198    {
199     
200    }
201
202    public void PostExecution()
203    {
204      // if (Data != null && Data != string.Empty) OnPropertyChanged("Data");
205      Dispose();
206    }
207
208    #endregion
209
210    #region INotifyPropertyChanged Members
211
212    public event PropertyChangedEventHandler PropertyChanged;
213
214    public void OnPropertyChanged(string name)
215    {
216      EventsHelper.PropertyChanged(PropertyChanged, this, new PropertyChangedEventArgs(name));
217    }
218
219    #endregion
220
221    private void Progress(double value, double max)
222    {
223      EventsHelper.ProgressChanged(OnPluginProgressChanged, this, new PluginProgressEventArgs(value, max));
224    }
225
226    private void GuiLogMessage(string message, NotificationLevel logLevel)
227    {
228      EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(message, this, logLevel));
229    }
230
231    #region IPlugin Members
232
233    public void Execute()
234    {
235     
236    }
237
238    public void Pause()
239    {
240     
241    }
242
243    #endregion
244  }
245}
Note: See TracBrowser for help on using the repository browser.