- moved all plugin-related classes to Eithne.Plugin namespace
[FaRetSys.git] / Plugins / SimpleResultView / ResultView.cs
blob502a8f384254c608634cc97a145b909cfb403c94
1 using System;
2 using System.Xml;
3 using Mono.Unix;
5 namespace Eithne
7 public class ResultViewInfo : IInfo
9 public override string Name
11 get { return Catalog.GetString("Simple Result View"); }
14 public override string ShortName
16 get { return "SRV"; }
19 public override string Author
21 get { return "Bartosz Taudul"; }
24 public override string Description
26 get { return Catalog.GetString("This plugin displays which images from database were recognized for given test images."); }
30 public class ResultViewFactory : IFactory
32 IInfo _info = new ResultViewInfo();
33 public IInfo Info
35 get { return _info; }
38 public IType Type
40 get { return IType.Out; }
43 public void Initialize()
47 public Plugin.Base Create()
49 return new ResultViewPlugin();
53 public class ResultViewPlugin : Plugin.Out
55 Gdk.Pixbuf[] itest = null;
56 Gdk.Pixbuf[] ibase = null;
57 Gdk.Pixbuf[] thumbs = null;
58 int[] res = null;
59 int[] cat1 = null;
60 int[] cat2 = null;
61 bool[] match = null;
62 bool invert = false;
64 public ResultViewPlugin()
66 _info = new ResultViewInfo();
69 public override XmlNode Config
71 get { return GetConfig(); }
72 set { LoadConfig(value); }
75 private void UpdateValue(bool invert)
77 this.invert = invert;
79 _block.Invalidate();
82 public override void Setup()
84 new ResultSetup(invert, UpdateValue);
87 public override bool HasSetup
89 get { return true; }
92 public override void DisplayResults()
94 if(!_workdone)
95 throw new PluginException(Catalog.GetString("Plugin is not ready to display results."));
97 new ResultView(ibase, itest, thumbs, res, cat1, cat2, match);
100 public override void Work()
102 ICommResult r = _in[0] as ICommResult;
104 itest = new Gdk.Pixbuf[r.Length];
105 thumbs = new Gdk.Pixbuf[r.Length];
106 ibase = new Gdk.Pixbuf[r.OriginalBaseImages.Length];
108 double scale;
110 for(int i=0; i<itest.Length; i++)
112 IImage _img = r.OriginalTestImages[i];
113 IImage img = new IImage(_img.BPP, _img.W, _img.H, _img.Data, invert);
115 if(invert)
116 img.Invert();
118 if(img.W > img.H)
119 scale = img.W / 256.0;
120 else
121 scale = img.H / 256.0;
123 Gdk.Pixbuf tmp = img.CreatePixbuf();
124 itest[i] = tmp.ScaleSimple(Scale(img.W, scale), Scale(img.H, scale), Gdk.InterpType.Bilinear);
126 if(img.W > img.H)
127 scale = img.W / 64.0;
128 else
129 scale = img.H / 64.0;
131 thumbs[i] = itest[i].ScaleSimple(Scale(img.W, scale), Scale(img.H, scale), Gdk.InterpType.Bilinear);
134 for(int i=0; i<ibase.Length; i++)
136 IImage _img = r.OriginalBaseImages[i];
137 IImage img = new IImage(_img.BPP, _img.W, _img.H, _img.Data, invert);
139 if(invert)
140 img.Invert();
142 if(img.W > img.H)
143 scale = img.W / 256.0;
144 else
145 scale = img.H / 256.0;
147 Gdk.Pixbuf tmp = img.CreatePixbuf();
148 ibase[i] = tmp.ScaleSimple(Scale(img.W, scale), Scale(img.H, scale), Gdk.InterpType.Bilinear);
151 res = r.FindResultsSimple();
153 cat1 = r.BaseCategories;
154 cat2 = r.TestCategories;
156 match = r.Match;
158 _workdone = true;
161 private int Scale(int s, double scale)
163 int val = (int)(s/scale);
165 if(val == 0)
166 return 1;
167 else
168 return val;
171 private XmlNode GetConfig()
173 XmlNode root = _xmldoc.CreateNode(XmlNodeType.Element, "config", "");
175 if(invert)
176 root.InnerText = "true";
177 else
178 root.InnerText = "false";
180 return root;
183 private void LoadConfig(XmlNode root)
185 if(root.InnerText == "true")
186 UpdateValue(true);
187 else
188 UpdateValue(false);
191 public override int NumIn { get { return 1; } }
193 public override string DescIn(int n)
195 return Catalog.GetString("Results to be viewed.");
198 private static string[] matchin = new string[] { "result" };
199 public override string[] MatchIn { get { return matchin; } }