source: trunk/CrypTool/MainWindow.xaml.cs @ 1424

Last change on this file since 1424 was 1424, checked in by saternus, 12 years ago

CT Plugin Loading

File size: 6.3 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Windows;
6using System.Windows.Controls;
7using System.Windows.Data;
8using System.Windows.Documents;
9using System.Windows.Input;
10using System.Windows.Media;
11using System.Windows.Media.Imaging;
12using System.Windows.Navigation;
13using System.Windows.Shapes;
14using Odyssey.Controls;
15using Odyssey.Controls.Classes;
16using Cryptool.PluginBase;
17using Cryptool.PluginBase.IO;
18using Cryptool.PluginBase.Tool;
19using Cryptool.PluginBase.Generator;
20using Cryptool.PluginBase.Cryptography;
21
22namespace CrypTool
23{
24    /// <summary>
25    /// Interaction logic for MainWindow.xaml
26    /// </summary>
27    public partial class MainWindow : RibbonWindow
28    {
29        private Dictionary<string, List<Type>> currentPlugins = new Dictionary<string, List<Type>>();
30
31        public Dictionary<string, Type> LoadedTypes { get; set; }
32
33        public MainWindow()
34        {
35            InitializeComponent();
36        }
37
38        private void RibbonButton_Click(object sender, RoutedEventArgs e)
39        {
40            if (SkinManager.SkinId == SkinId.OfficeBlue)
41                SkinManager.SkinId = SkinId.OfficeBlack;
42            else
43                SkinManager.SkinId = SkinId.OfficeBlue;
44        }
45
46        private void LoadPlugins()
47        {
48            Dictionary<string, List<PluginInfo>> pluginInfos = new Dictionary<string, List<PluginInfo>>();
49            foreach (Type pluginType in this.LoadedTypes.Values)
50            {
51                foreach (string interfaceName in PluginExtension.Interfaces)
52                {
53                    if (pluginType.GetInterface(interfaceName) != null)
54                    {
55                        if (!pluginInfos.ContainsKey(interfaceName))
56                            pluginInfos.Add(interfaceName, new List<PluginInfo>());
57
58                        PluginInfoAttribute attr = pluginType.GetPluginInfoAttribute();
59
60                        PluginInfo p =new PluginInfo()
61                        {
62                            Caption = attr.Caption,
63                            DescriptionURL = attr.DescriptionUrl,
64                            Icon = pluginType.GetImage(0),
65                            PluginType = pluginType,
66                            EncryptionType = pluginType.GetEncryptionTypeAttribute()
67                        };
68
69                        pluginInfos[interfaceName].Add(p);
70
71                        AddIt(p, interfaceName);
72                       
73                    }
74                }
75            }
76
77        }
78
79        private void AddIt(PluginInfo pluginInfo, string interfaceName)
80        {
81            Image img = pluginInfo.Icon;
82            if (img != null)
83            {
84                img.Margin = new Thickness(2, 0, 5, 0);
85                img.Height = 25;
86                img.Width = 25;
87                TextBlock textBlock = new TextBlock();
88                textBlock.FontWeight = FontWeights.DemiBold;
89                textBlock.VerticalAlignment = VerticalAlignment.Center;
90                textBlock.Text = pluginInfo.Caption;
91                WrapPanel wrapPanel = new WrapPanel();
92                wrapPanel.Margin = new Thickness(0, 2, 0, 2);
93                wrapPanel.VerticalAlignment = VerticalAlignment.Center;
94                wrapPanel.Children.Add(img);
95                wrapPanel.Children.Add(textBlock);
96                ListBoxItem navItem = new ListBoxItem();
97                navItem.Content = wrapPanel;
98
99                ListView view = GetListBox(pluginInfo, interfaceName);
100                    if (view != null)
101                    view.Items.Add(navItem);
102            }
103        }
104
105        private ListView GetListBox(PluginInfo pluginInfo, string interfaceName)
106        {
107            if (interfaceName == typeof(ITool).FullName) 
108                return this.ToolsStandalone;
109            else if (interfaceName == typeof(IInput).FullName)
110                return this.ToolsInput;
111            else if (interfaceName == typeof(IOutput).FullName)
112                return this.ToolsOutput;
113            else if (interfaceName == typeof(IIOMisc).FullName)
114                return this.ToolsMisc;
115            else if (interfaceName == typeof(IThroughput).FullName)
116                return this.ToolsThroughput;
117            else if (interfaceName == typeof(IGeneratorMisc).FullName)
118                return this.ToolsGenerators;
119            else if (interfaceName == typeof(IKeyGenerator).FullName)
120                return this.ToolsGenerators;
121            else if (interfaceName == typeof(IRandomNumberGenerator).FullName)
122                return this.ToolsGenerators;
123            else if (interfaceName == typeof(IEncryption).FullName)
124            {
125                if (pluginInfo.EncryptionType != null)
126                {
127                    switch (pluginInfo.EncryptionType.EncryptionType)
128                    {
129                        case EncryptionType.Asymmetric:
130                            return this.ModernAsymmetric;
131                        case EncryptionType.Classic:
132                            return this.ClassicCiphers;   
133                        case EncryptionType.SymmetricBlock:
134                            return ModernSymmetric;
135                        case EncryptionType.SymmetricStream:
136                            return ModernSymmetric;
137                        case EncryptionType.Hybrid:
138                            return ModernHybrid;
139                    }
140                }
141            }
142            else if (interfaceName == typeof(ICryptographyMisc).FullName)
143                return this.ModernMisc;
144            else if (interfaceName == typeof(ICryptographicHash).FullName)
145                return this.HashCryptographic;
146            else if (interfaceName == typeof(ICheckSumHash).FullName)
147                return this.HashChecksum;
148
149           
150           
151            return null;
152
153        }
154
155        private void Window_Loaded(object sender, RoutedEventArgs e)
156        {
157            LoadPlugins();
158        }
159    }
160
161    public class PluginInfo
162    {
163        public string Caption { get; set; }
164        public string DescriptionURL { get; set; }
165        public Image Icon { get; set; }
166        public Type PluginType { get; set; }
167        public EncryptionTypeAttribute EncryptionType { get; set; }
168    }
169}
Note: See TracBrowser for help on using the repository browser.