From c1af17fab4c8cd519f54f572851fc93e7ee8f84a Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Sat, 21 Jul 2018 13:13:35 -0400
Subject: [PATCH] timeline mouse over
---
timeflow/app/TimeflowApp.java | 8
timeflow/views/SummaryView.java | 325 +++++++++++++++++++++++++++--------------------------
timeflow/vis/Mouseover.java | 17 +-
timeflow/vis/timeline/AxisRenderer.java | 1
4 files changed, 177 insertions(+), 174 deletions(-)
diff --git a/timeflow/app/TimeflowApp.java b/timeflow/app/TimeflowApp.java
index 1bdc790..c579393 100755
--- a/timeflow/app/TimeflowApp.java
+++ b/timeflow/app/TimeflowApp.java
@@ -137,18 +137,18 @@
AbstractView[] views =
{
timeline,
- new CalendarView(model),
+ //new CalendarView(model),
new ListView(model),
new TableView(model),
new BarGraphView(model),
- intro,
- new DescriptionView(model),
+ //intro,
new SummaryView(model),
+ new DescriptionView(model),
};
for (int i = 0; i < views.length; i++)
{
- center.addTab(views[i], views[i].getName(), i < 5);
+ center.addTab(views[i], views[i].getName(), true); // i < 5);
displayPanel.addLocalControl(views[i].getName(), views[i].getControls());
}
diff --git a/timeflow/views/SummaryView.java b/timeflow/views/SummaryView.java
index b51b638..ba198d6 100755
--- a/timeflow/views/SummaryView.java
+++ b/timeflow/views/SummaryView.java
@@ -13,169 +13,172 @@
import javax.swing.*;
+public class SummaryView extends AbstractView
+{
-public class SummaryView extends AbstractView {
-
- private JEditorPane analysisDisplay;
- private FieldAnalysis[] fieldAnalyzers=new FieldAnalysis[]
- {
- new MissingValueAnalysis(), new RangeDateAnalysis(),
- new RangeNumberAnalysis(), new FrequencyAnalysis()
- };
- private int numItems;
- private int numFiltered;
- private Interval range;
- private JComponent controls;
-
- public SummaryView(TFModel model)
- {
- super(model);
- analysisDisplay=HtmlDisplay.create();
- JScrollPane scrollPane = new JScrollPane(analysisDisplay);
- setLayout(new GridLayout(1,1));
- add(scrollPane);
-
- controls=new HtmlControls("This report gives a <br> statistical breakdown<br> "+
- "of your data. <p> Reading the summary often helps<br> you find "+
- "data errors.");
- }
-
- @Override
- public JComponent _getControls()
- {
- return controls;
- }
-
- void makeHtml()
- {
- Display d=getModel().getDisplay();
- ActDB db=getModel().getDB();
- ActList acts=getModel().getActs();
- StringBuffer page=new StringBuffer();
- page.append("<blockquote>");
- if (getModel().getDB()==null)
- {
- page.append("<h1><font color=#003399>No data loaded.</font></h1>");
- }
- else
- {
- page.append("<BR><BR><BR>File: "+getModel().getDbFile()+"<br>");
- page.append("Source: "+getModel().getDB().getSource()+"<br><br>");
- page.append("Description: "+getModel().getDB().getDescription()+"<br><br>");
- page.append("<br><br>");
- page.append("<table border=0>");
-
-
- page.append("<tr><td valign=top align=left width=100><b>");
- page.append("<font size=+1>Data</font><br>");
-
- page.append("</td><td align=top>");
- append(page, "Total events", ""+numItems);
-
- if (numItems>0)
- {
- append(page, "Total selected", ""+numFiltered);
- if (numFiltered>0)
- {
- append(page, "Earliest", new Date(range.start).toString());
- append(page, "Latest", new Date(range.end).toString());
- }
- }
- page.append("<br></td></tr>");
-
- page.append("<tr><td valign=top align=left width=100><b>");
- page.append("<font size=+1>Fields</font><br>");
-
- page.append("</td><td align=top>");
- for (Field f: getModel().getDB().getFields())
- {
- append(page, f.getName(),FieldFormatCatalog.humanName(f.getType())+fieldLabel(f));
- }
- page.append("<br></td></tr>");
-
-
- page.append("</table>");
+ private JEditorPane analysisDisplay;
+ private FieldAnalysis[] fieldAnalyzers = new FieldAnalysis[]
+ {
+ new MissingValueAnalysis(), new RangeDateAnalysis(),
+ new RangeNumberAnalysis(), new FrequencyAnalysis()
+ };
+ private int numItems;
+ private int numFiltered;
+ private Interval range;
+ private JComponent controls;
- if (numFiltered>0)
- {
- page.append("<h1>Statistics (for "+acts.size()+" items)</h1>");
- for (Field field: db.getFields())
- {
- page.append("<h2>"+field.getName()+"</h2>");
- page.append("<ul>");
- for (int i=0; i<fieldAnalyzers.length; i++)
- {
- FieldAnalysis fa=fieldAnalyzers[i];
- if (fa.canHandleType(field.getType()))
- {
- page.append("<li>");
- page.append("<b><font color=#808080>"+fa.getName()+"</font></b><br>");
- fa.perform(acts, field);
- String[] s=fa.getResultDescription();
- for (int j=0; j<s.length; j++)
- {
- page.append(s[j]);
- page.append("<br>");
- }
- page.append("</li>");
- }
- }
- page.append("</ul>");
- }
- }
- }
- page.append("</blockquote>");
- analysisDisplay.setText(page.toString());
- analysisDisplay.setCaretPosition(0);
- }
-
- static void append(StringBuffer page, String label, String value)
- {
- page.append("<b><font color=#808080>"+label+"</font></b> ");
- page.append(value);
- page.append("<br>");
- }
-
- @Override
- protected void onscreen(boolean majorChange)
- {
- _note(null);
- }
+ public SummaryView(TFModel model)
+ {
+ super(model);
+ analysisDisplay = HtmlDisplay.create();
+ JScrollPane scrollPane = new JScrollPane(analysisDisplay);
+ setLayout(new GridLayout(1, 1));
+ add(scrollPane);
- protected void _note(TFEvent e) {
- recalculate();
- makeHtml();
- repaint();
- }
-
- String fieldLabel(Field f)
- {
- StringBuffer b=new StringBuffer("<b>");
- ActDB db=getModel().getDB();
- for (String v: VirtualField.list())
- {
- if (db.getField(v)!=null && db.getField(v).getName().equals(f.getName()))
- b.append(" (Shown in visualization as "+VirtualField.humanName(v)+")");
- }
- b.append("</b>");
- return b.toString();
- }
-
- void recalculate()
- {
- ActList acts=getModel().getActs();
- if (acts==null)
- {
- numItems=0;
- return;
- }
- numFiltered=acts.size();
- numItems=getModel().getDB().size();
- range=DBUtils.range(acts, VirtualField.START);
- }
+ controls = new HtmlControls("This report gives a <br> statistical breakdown<br> "
+ + "of your data. <p> Reading the summary often helps<br> you find "
+ + "data errors.");
+ }
- @Override
- public String getName() {
- return "Summary";
- }
+ @Override
+ public JComponent _getControls()
+ {
+ return controls;
+ }
+
+ void makeHtml()
+ {
+ Display d = getModel().getDisplay();
+ ActDB db = getModel().getDB();
+ ActList acts = getModel().getActs();
+ StringBuffer page = new StringBuffer();
+ page.append("<blockquote>");
+ if (getModel().getDB() == null)
+ {
+ page.append("<h1><font color=#003399>No data loaded.</font></h1>");
+ } else
+ {
+ page.append("<BR><BR><BR>File: " + getModel().getDbFile() + "<br>");
+ page.append("Source: " + getModel().getDB().getSource() + "<br><br>");
+ page.append("Description: " + getModel().getDB().getDescription() + "<br><br>");
+ page.append("<br><br>");
+ page.append("<table border=0>");
+
+
+ page.append("<tr><td valign=top align=left width=100><b>");
+ page.append("<font size=+1>Data</font><br>");
+
+ page.append("</td><td align=top>");
+ append(page, "Total events", "" + numItems);
+
+ if (numItems > 0)
+ {
+ append(page, "Total selected", "" + numFiltered);
+ if (numFiltered > 0)
+ {
+ append(page, "Earliest", new Date(range.start).toString());
+ append(page, "Latest", new Date(range.end).toString());
+ }
+ }
+ page.append("<br></td></tr>");
+
+ page.append("<tr><td valign=top align=left width=100><b>");
+ page.append("<font size=+1>Fields</font><br>");
+
+ page.append("</td><td align=top>");
+ for (Field f : getModel().getDB().getFields())
+ {
+ append(page, f.getName(), FieldFormatCatalog.humanName(f.getType()) + fieldLabel(f));
+ }
+ page.append("<br></td></tr>");
+
+
+ page.append("</table>");
+
+ if (numFiltered > 0)
+ {
+ page.append("<h1>Statistics (for " + acts.size() + " items)</h1>");
+ for (Field field : db.getFields())
+ {
+ page.append("<h2>" + field.getName() + "</h2>");
+ page.append("<ul>");
+ for (int i = 0; i < fieldAnalyzers.length; i++)
+ {
+ FieldAnalysis fa = fieldAnalyzers[i];
+ if (fa.canHandleType(field.getType()))
+ {
+ page.append("<li>");
+ page.append("<b><font color=#808080>" + fa.getName() + "</font></b><br>");
+ fa.perform(acts, field);
+ String[] s = fa.getResultDescription();
+ for (int j = 0; j < s.length; j++)
+ {
+ page.append(s[j]);
+ page.append("<br>");
+ }
+ page.append("</li>");
+ }
+ }
+ page.append("</ul>");
+ }
+ }
+ }
+ page.append("</blockquote>");
+ analysisDisplay.setText(page.toString());
+ analysisDisplay.setCaretPosition(0);
+ }
+
+ static void append(StringBuffer page, String label, String value)
+ {
+ page.append("<b><font color=#808080>" + label + "</font></b> ");
+ page.append(value);
+ page.append("<br>");
+ }
+
+ @Override
+ protected void onscreen(boolean majorChange)
+ {
+ _note(null);
+ }
+
+ protected void _note(TFEvent e)
+ {
+ recalculate();
+ makeHtml();
+ repaint();
+ }
+
+ String fieldLabel(Field f)
+ {
+ StringBuffer b = new StringBuffer("<b>");
+ ActDB db = getModel().getDB();
+ for (String v : VirtualField.list())
+ {
+ if (db.getField(v) != null && db.getField(v).getName().equals(f.getName()))
+ {
+ b.append(" (Shown in visualization as " + VirtualField.humanName(v) + ")");
+ }
+ }
+ b.append("</b>");
+ return b.toString();
+ }
+
+ void recalculate()
+ {
+ ActList acts = getModel().getActs();
+ if (acts == null)
+ {
+ numItems = 0;
+ return;
+ }
+ numFiltered = acts.size();
+ numItems = getModel().getDB().size();
+ range = DBUtils.range(acts, VirtualField.START);
+ }
+
+ @Override
+ public String getName()
+ {
+ return "Summary";
+ }
}
diff --git a/timeflow/vis/Mouseover.java b/timeflow/vis/Mouseover.java
index eb2b74b..7f58071 100755
--- a/timeflow/vis/Mouseover.java
+++ b/timeflow/vis/Mouseover.java
@@ -45,21 +45,22 @@
}
- boxW = Math.min(350, boxW);
- int boxH = 18 * numLines + 10;
- int mx = this.x + this.width + 5;
- int my = this.y + this.height + 35;
+ //boxW = Math.min(350, boxW);
+ int boxH = 18 * numLines; // + 10;
+ int mx = this.x + this.width; // + 5;
+ int my = this.y + this.height; // + 35;
// put box in a place where it does not obscure the data
// or go off screen.
- if (my + boxH > maxH - 10)
+ if (my + boxH > maxH) // - 10)
{
- my = Math.max(10, this.y - boxH - 5);
+// my = Math.max(10, this.y - boxH - 5);
}
- if (mx + boxW > maxW - 10)
+ if (mx + boxW > maxW) // - 10)
{
- mx = Math.max(10, this.x - boxW - 10);
+// mx = Math.max(10, this.x - boxW - 10);
}
+
int ty = my;
g.setColor(new Color(0, 0, 0, 70));
g.fillRoundRect(mx - 11, my - 16, boxW, boxH, 12, 12);
diff --git a/timeflow/vis/timeline/AxisRenderer.java b/timeflow/vis/timeline/AxisRenderer.java
index 0372be6..9e69341 100755
--- a/timeflow/vis/timeline/AxisRenderer.java
+++ b/timeflow/vis/timeline/AxisRenderer.java
@@ -46,7 +46,6 @@
int n = t.tics.size();
for (int i = 0; i < n - 1; i++)
{
-
long start = t.tics.get(i);
long end = t.tics.get(i + 1);
--
Gitblit v1.6.2