18 public class Plot : Gtk.Window
25 List<double[]> data =
new List<double[]>();
26 static Dictionary<string, Plot> plots =
new Dictionary<string, Plot>();
39 public static Dictionary<string,Plot> Plots
43 public List<double[]> Data
50 get {
return bitmap; }
51 set { bitmap = value; }
53 public ScottPlot.Plot Model
62 model.SavePng(file, AllocatedWidth, AllocatedHeight);
64 pixbuf =
new Pixbuf(file);
68 private void InitScatter()
71 List<Coordinates> cs =
new List<Coordinates>();
72 for (
int i = 0; i < data.Count; i++)
74 for (
int x = 0; x < data[i].Length; x++)
76 cs.Add(
new ScottPlot.Coordinates(x, data[i][x]));
79 model.Add.Scatter(cs);
83 private void InitBars()
86 foreach (
double[] items
in data)
89 List<Bar> bars =
new List<Bar>();
90 foreach (
double item
in items)
103 private Builder _builder;
104#pragma warning disable 649
106 private Gtk.DrawingArea image;
108 private Gtk.MenuItem saveImageMenu;
110 private Gtk.MenuItem saveCSVMenu;
113 private Gtk.CheckMenuItem barMenu;
115 private Gtk.CheckMenuItem scatterMenu;
117#pragma warning restore 649
120 #region Constructors / Destructors
127 Builder builder =
new Builder(
new FileStream(System.IO.Path.GetDirectoryName(Environment.ProcessPath) +
"/" +
"Glade/Plot.glade", FileMode.Open));
128 return new Plot(builder, builder.GetObject(
"plot").Handle, vals, name, PlotType.Scatter);
133 public static Plot Create(
double[] vals,
string name, PlotType typ)
135 Builder builder =
new Builder(
new FileStream(
"Glade/Plot.glade", FileMode.Open));
136 return new Plot(builder, builder.GetObject(
"plot").Handle, vals, name, typ);
140 protected Plot(Builder builder, IntPtr handle,
double[] vals,
string name, PlotType typ) : base(handle)
143 builder.Autoconnect(
this);
144 model =
new ScottPlot.Plot();
146 if (typ == PlotType.Scatter)
149 if (typ == PlotType.Bar)
151 if (!name.EndsWith(
".png") || !name.EndsWith(
".PNG"))
152 file = name +
".png";
154 image.Drawn += Image_Drawn;
155 image.SizeAllocated += Image_SizeAllocated;
156 image.ButtonPressEvent += Image_ButtonPressEvent;
157 barMenu.ButtonPressEvent += BarMenu_ButtonPressEvent;
158 scatterMenu.ButtonPressEvent += ScatterMenu_ButtonPressEvent;
159 saveImageMenu.ButtonPressEvent += SaveImageMenu_ButtonPressEvent;
160 saveCSVMenu.ButtonPressEvent += SaveCSVMenu_ButtonPressEvent;
161 this.DeleteEvent += About_DeleteEvent;
164 if(plots.ContainsKey(name))
167 plots.Add(name,
this);
168 App.ApplyStyles(
this);
181 private void SaveCSVMenu_ButtonPressEvent(
object o, ButtonPressEventArgs args)
183 Gtk.FileChooserDialog filechooser =
184 new Gtk.FileChooserDialog(
"Save CSV Plot data.",
186 FileChooserAction.Save,
187 "Cancel", ResponseType.Cancel,
188 "Save", ResponseType.Accept);
189 if (filechooser.Run() != (
int)ResponseType.Accept)
193 foreach (
double[] item
in data)
195 for (
int i = 0; i < data.Count; i++)
199 s += Environment.NewLine;
200 foreach (
double d
in item)
202 s += d +
"," + Environment.NewLine;
205 File.WriteAllText(filechooser.Filename, s);
206 filechooser.Destroy();
222 private void SaveImageMenu_ButtonPressEvent(
object o, ButtonPressEventArgs args)
224 Gtk.FileChooserDialog filechooser =
225 new Gtk.FileChooserDialog(
"Save PNG Image of Plot.",
227 FileChooserAction.Save,
228 "Cancel", ResponseType.Cancel,
229 "Save", ResponseType.Accept);
230 if (filechooser.Run() != (
int)ResponseType.Accept)
232 pixbuf.Save(filechooser.Filename,
"png");
233 filechooser.Destroy();
246 private void ScatterMenu_ButtonPressEvent(
object o, ButtonPressEventArgs args)
248 barMenu.Active =
false;
249 type = PlotType.Scatter;
262 private void BarMenu_ButtonPressEvent(
object o, ButtonPressEventArgs args)
264 scatterMenu.Active =
false;
279 private void Image_ButtonPressEvent(
object o, ButtonPressEventArgs args)
282 BioLib.Recorder.AddLine(
"Plot.SelectedPlot = Plot.Plots[" + name +
"];",
false);
285 System.Threading.Thread th;
286 static Plot selected;
287 public static Plot SelectedPlot
289 get {
return selected; }
292 static void ShowPlot()
304 private void Image_SizeAllocated(
object o, SizeAllocatedArgs args)
317 private void About_DeleteEvent(
object o, DeleteEventArgs args)
332 private void Image_Drawn(
object o, DrawnArgs e)
334 Pixbuf pf = pixbuf.ScaleSimple(image.AllocatedWidth, image.AllocatedHeight, InterpType.Bilinear);
335 Gdk.CairoHelper.SetSourcePixbuf(e.Cr, pf, 0, 0);