[chronojump] Encoder: added colors in treeview



commit aaae6d3ba27624b8d89ec4c5614bc113982fc57c
Author: Xavier de Blas <xaviblas gmail com>
Date:   Sat Mar 31 19:14:45 2012 +0800

    Encoder: added colors in treeview

 encoder/graph.R       |    6 +-
 src/encoder.cs        |   33 ++++++++
 src/gui/chronojump.cs |    1 -
 src/gui/encoder.cs    |  194 ++++++++++++++++++++++++++++++++++++++++---------
 src/util.cs           |    8 ++-
 5 files changed, 203 insertions(+), 39 deletions(-)
---
diff --git a/encoder/graph.R b/encoder/graph.R
index f956326..7e63e62 100644
--- a/encoder/graph.R
+++ b/encoder/graph.R
@@ -368,9 +368,9 @@ if(length(args) < 3) {
 	}
 	if(curvesPlot) {
 		arrows(x0=curves[,1],y0=min(rawdata.cumsum),x1=curves[,2],y1=min(rawdata.cumsum),
-				col="red",code=3,length=0.1)
+				col="blue",code=3,length=0.1)
 		for(i in 1:length(curves[,1])) 
-			text(x=(curves[i,1]+curves[i,2])/2,y=min(rawdata.cumsum),labels=i, adj=c(0.5,0),cex=1,col="red")
+			text(x=(curves[i,1]+curves[i,2])/2,y=min(rawdata.cumsum),labels=i, adj=c(0.5,0),cex=1,col="blue")
 	}
 
 	print(curves)
@@ -426,7 +426,7 @@ if(length(args) < 3) {
 			paf=cbind(curves[,2]-curves[,1],rawdata.cumsum[curves[,2]]-curves[,3],paf)
 			colnames(paf)=c("width","height","meanSpeed","maxSpeed","meanPower","peakPower","peakPowerT")
 			print(paf)
-			write.csv(paf, outputData1)
+			write.csv(paf, outputData1, quote=FALSE)
 		}
 	}
 	if(analysis=="others") {
diff --git a/src/encoder.cs b/src/encoder.cs
index f7d8078..0df7324 100644
--- a/src/encoder.cs
+++ b/src/encoder.cs
@@ -69,6 +69,12 @@ public class EncoderParams
 		return minHeight + " " + isJump + " " + mass + " " + eccon + " " + analysis + " " + 
 			smooth + " " + curve + " " + width + " " + height;
 	}
+	
+	public string Analysis
+	{
+		get { return analysis; }
+	}
+
 
 	~EncoderParams() {}
 }
@@ -96,3 +102,30 @@ public class EncoderStruct
 
 	~EncoderStruct() {}
 }
+
+//used on TreeView
+public class EncoderCurve
+{
+	public EncoderCurve (string n, string width, string height, string meanSpeed, string maxSpeed, 
+			string meanPower, string peakPower, string peakPowerT)
+	{
+		this.N = n;
+		this.Width = width;
+		this.Height = height;
+		this.MeanSpeed = meanSpeed;
+		this.MaxSpeed = maxSpeed;
+		this.MeanPower = meanPower;
+		this.PeakPower = peakPower;
+		this.PeakPowerT = peakPowerT;
+	}
+
+	public string N;
+	public string Width;
+	public string Height;
+	public string MeanSpeed;
+	public string MaxSpeed;
+	public string MeanPower;
+	public string PeakPower;
+	public string PeakPowerT;
+}
+
diff --git a/src/gui/chronojump.cs b/src/gui/chronojump.cs
index 310bb55..6e56690 100644
--- a/src/gui/chronojump.cs
+++ b/src/gui/chronojump.cs
@@ -475,7 +475,6 @@ public partial class ChronoJumpWindow
 		//changeTestImage("", "", "LOGO");
 
 		notebook_main_encoder_and_server_hide();
-		CreateTreeViewEncoder();
 
 		//We have no session, mark some widgets as ".Sensitive = false"
 		sensitiveGuiNoSession();
diff --git a/src/gui/encoder.cs b/src/gui/encoder.cs
index 69305ab..710c9be 100644
--- a/src/gui/encoder.cs
+++ b/src/gui/encoder.cs
@@ -23,6 +23,8 @@ using System.IO;
 using Gtk;
 using Gdk;
 using Glade;
+using System.Collections;
+
 
 public partial class ChronoJumpWindow 
 {
@@ -50,7 +52,11 @@ public partial class ChronoJumpWindow
 	[Widget] Gtk.Viewport viewport_image_encoder_analyze;
 	[Widget] Gtk.Image image_encoder_analyze;
 
-	TreeStore store;
+	TreeStore encoderStore;
+
+	ArrayList encoderCurves;
+        Gtk.ListStore encoderListStore;
+
 
 	private string encoderAnalysis="powerBars";
 
@@ -202,23 +208,163 @@ public partial class ChronoJumpWindow
 		string [] columnsString = {"n","Width","Height","MeanSpeed","MaxSpeed",
 			"MeanPower","PeakPower","PeakPowerT"};
 
-		int columns=8;
-		Type [] types = new Type [columns];
-		int i;
-		for (i=0; i < columns; i++) {
-			types[i] = typeof (string);
+		string contents = Util.ReadFile(Util.GetEncoderCurvesTempFileName());
+		if (contents == null) 
+			return;
+
+		encoderCurves = new ArrayList ();
+
+		string line;
+		using (StringReader reader = new StringReader (contents)) {
+			line = reader.ReadLine ();	//headers
+			Log.WriteLine(line);
+			do {
+				line = reader.ReadLine ();
+				Log.WriteLine(line);
+				if (line == null)
+					break;
+
+				string [] cells = line.Split(new char[] {','});
+				cells = fixDecimals(cells);
+				//iter = encoderStore.AppendValues(cells);
+
+				encoderCurves.Add (new EncoderCurve (cells[0], cells[1], cells[2], 
+							cells[3], cells[4], cells[5], cells[6],cells[7]));
+
+			} while(true);
+		}
+
+		encoderListStore = new Gtk.ListStore (typeof (EncoderCurve));
+		foreach (EncoderCurve curve in encoderCurves) {
+			encoderListStore.AppendValues (curve);
 		}
-		store = new TreeStore(types);
 
-		treeview_encoder_curves.Model = store;
-		
-		//prepareHeaders
+		treeview_encoder_curves.Model = encoderListStore;
+
 		treeview_encoder_curves.HeadersVisible=true;
-		i=0;
+
+		int i=0;
 		foreach(string myCol in columnsString) {
-			treeview_encoder_curves.AppendColumn (myCol, new CellRendererText(), "text", i++);
+			Gtk.TreeViewColumn aColumn = new Gtk.TreeViewColumn ();
+			CellRendererText aCell = new CellRendererText();
+			aColumn.Title=myCol;
+			aColumn.PackStart (aCell, true);
+
+			//crt1.Foreground = "red";
+			//crt1.Background = "blue";
+		
+			switch(i){	
+				case 0:
+					aColumn.SetCellDataFunc (aCell, new Gtk.TreeCellDataFunc (RenderN));
+					break;
+				case 1:
+					aColumn.SetCellDataFunc (aCell, new Gtk.TreeCellDataFunc (RenderWidth));
+					break;
+				case 2:
+					aColumn.SetCellDataFunc (aCell, new Gtk.TreeCellDataFunc (RenderHeight));
+					break;
+				case 3:
+					aColumn.SetCellDataFunc (aCell, new Gtk.TreeCellDataFunc (RenderMeanSpeed));
+					break;
+				case 4:
+					aColumn.SetCellDataFunc (aCell, new Gtk.TreeCellDataFunc (RenderMaxSpeed));
+					break;
+				case 5:
+					aColumn.SetCellDataFunc (aCell, new Gtk.TreeCellDataFunc (RenderMeanPower));
+					break;
+				case 6:
+					aColumn.SetCellDataFunc (aCell, new Gtk.TreeCellDataFunc (RenderPeakPower));
+					break;
+				case 7:
+					aColumn.SetCellDataFunc (aCell, new Gtk.TreeCellDataFunc (RenderPeakPowerT));
+					break;
+			}
+			
+
+			treeview_encoder_curves.AppendColumn (aColumn);
+			i++;
 		}
 	}
+
+
+	/* rendering columns */
+
+	string colorGood= "ForestGreen"; //more at System.Drawing.Color (Monodoc)
+	string colorBad= "red";
+	private void RenderN (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)
+	{
+		EncoderCurve curve = (EncoderCurve) model.GetValue (iter, 0);
+		(cell as Gtk.CellRendererText).Text = curve.N;
+	}
+	private void RenderWidth (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)
+	{
+		EncoderCurve curve = (EncoderCurve) model.GetValue (iter, 0);
+		(cell as Gtk.CellRendererText).Text = curve.Width;
+	}
+	private void RenderHeight (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)
+	{
+		EncoderCurve curve = (EncoderCurve) model.GetValue (iter, 0);
+		(cell as Gtk.CellRendererText).Text = curve.Height;
+	}
+	
+	private void RenderMeanSpeed (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)
+	{
+		EncoderCurve curve = (EncoderCurve) model.GetValue (iter, 0);
+		if (Convert.ToDouble(curve.MeanSpeed) >= 2.5) 
+			(cell as Gtk.CellRendererText).Foreground = colorGood;
+		else 
+			(cell as Gtk.CellRendererText).Foreground = colorBad;
+
+		(cell as Gtk.CellRendererText).Text = curve.MeanSpeed;
+	}
+
+	private void RenderMaxSpeed (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)
+	{
+		EncoderCurve curve = (EncoderCurve) model.GetValue (iter, 0);
+		if (Convert.ToDouble(curve.MaxSpeed) >= 2.5) 
+			(cell as Gtk.CellRendererText).Foreground = colorGood;
+		else 
+			(cell as Gtk.CellRendererText).Foreground = colorBad;
+
+		(cell as Gtk.CellRendererText).Text = curve.MaxSpeed;
+	}
+
+	private void RenderMeanPower (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)
+	{
+		EncoderCurve curve = (EncoderCurve) model.GetValue (iter, 0);
+		if (Convert.ToDouble(curve.MeanPower) >= 1700) 
+			(cell as Gtk.CellRendererText).Foreground = colorGood;
+		else 
+			(cell as Gtk.CellRendererText).Foreground = colorBad;
+
+		(cell as Gtk.CellRendererText).Text = curve.MeanPower;
+	}
+
+	private void RenderPeakPower (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)
+	{
+		EncoderCurve curve = (EncoderCurve) model.GetValue (iter, 0);
+		if (Convert.ToDouble(curve.PeakPower) >= 1700) 
+			(cell as Gtk.CellRendererText).Foreground = colorGood;
+		else 
+			(cell as Gtk.CellRendererText).Foreground = colorBad;
+
+		(cell as Gtk.CellRendererText).Text = curve.PeakPower;
+	}
+
+	private void RenderPeakPowerT (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)
+	{
+		EncoderCurve curve = (EncoderCurve) model.GetValue (iter, 0);
+		if (Convert.ToDouble(curve.PeakPowerT) <= 100) 
+			(cell as Gtk.CellRendererText).Foreground = colorGood;
+		else 
+			(cell as Gtk.CellRendererText).Foreground = colorBad;
+
+		(cell as Gtk.CellRendererText).Text = curve.PeakPowerT;
+	}
+
+	/* end of rendering cols */
+
+
 	
 	private void removeColumns() {
 		Gtk.TreeViewColumn [] myColumns = treeview_encoder_curves.Columns;
@@ -229,32 +375,12 @@ public partial class ChronoJumpWindow
 	private void updateTreeView() {
 		removeColumns();
 		CreateTreeViewEncoder();
-		fillTreeView();
 	}
 
-	private void fillTreeView()
-	{
-		TreeIter iter = new TreeIter();
-		
-		string contents = Util.ReadFile(Util.GetEncoderCurvesTempFileName());
-		string line;
-		if (contents != null) {
-			using (StringReader reader = new StringReader (contents)) {
-				line = reader.ReadLine ();	//headers
-				do {
-					line = reader.ReadLine ();
-					if (line == null)
-						break;
-
-					string [] cells = line.Split(new char[] {','});
-					cells = fixDecimals(cells);
-					iter = store.AppendValues(cells);
-				} while(true);
-			}
-		}
-	}
 	
 	private string [] fixDecimals(string [] cells) {
+		for(int i=1; i <= 2; i++)
+			cells[i] = Util.TrimDecimals(Convert.ToDouble(Util.ChangeDecimalSeparator(cells[i])),1);
 		for(int i=3; i <= 6; i++)
 			cells[i] = Util.TrimDecimals(Convert.ToDouble(Util.ChangeDecimalSeparator(cells[i])),3);
 		return cells;
diff --git a/src/util.cs b/src/util.cs
index f49a23a..7c7b875 100644
--- a/src/util.cs
+++ b/src/util.cs
@@ -951,7 +951,13 @@ public class Util
 		} else {
 			pinfo.Arguments = pythonScript + " " + es.InputData + " " + 
 				es.OutputGraph + " " + es.OutputData1 + " " + es.OutputData2 + " " + es.Ep.ToString2();
-			outputFileCheck = es.OutputGraph;
+
+			//curves does first graph and then csv curves. 
+			//Wait until this to update encoder gui (if don't wait then treeview will be outdated)
+			if(es.Ep.Analysis == "curves")
+				outputFileCheck = es.OutputData1; 
+			else
+				outputFileCheck = es.OutputGraph;
 		}
 
 		pinfo.CreateNoWindow = true;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]