Skip to content

Commit

Permalink
Rebuild quotes chart while redraw=false to avoid flickering
Browse files Browse the repository at this point in the history
Issue: #449
  • Loading branch information
buchen committed Mar 1, 2016
1 parent 5f3b8ae commit 6f8323d
Showing 1 changed file with 64 additions and 49 deletions.
Expand Up @@ -174,7 +174,7 @@ protected String getTitle()

if (securities != null)
title.append(" (").append(securities.getColumnHelper().getConfigurationName()).append(")"); //$NON-NLS-1$ //$NON-NLS-2$

return title.toString();
}

Expand Down Expand Up @@ -328,7 +328,7 @@ protected void createTopTable(Composite parent)
securities = new SecuritiesTable(parent, this);
updateTitle();
securities.getColumnHelper().addListener(() -> updateTitle());

securities.addSelectionChangedListener(new ISelectionChangedListener()
{
public void selectionChanged(SelectionChangedEvent event)
Expand Down Expand Up @@ -657,65 +657,82 @@ public void run()

private void updateChart(Security security)
{
ISeries series = chart.getSeriesSet().getSeries(Messages.ColumnQuote);
if (series != null)
chart.getSeriesSet().deleteSeries(Messages.ColumnQuote);
chart.clearMarkerLines();
chart.setRedraw(false);

if (security == null || security.getPrices().isEmpty())
try
{
chart.getTitle().setText(security == null ? "..." : security.getName()); //$NON-NLS-1$
chart.redraw();
return;
}
ISeries series = chart.getSeriesSet().getSeries(Messages.ColumnQuote);
if (series != null)
chart.getSeriesSet().deleteSeries(Messages.ColumnQuote);
chart.clearMarkerLines();

chart.getTitle().setText(security.getName());
if (security == null || security.getPrices().isEmpty())
{
chart.getTitle().setText(security == null ? "..." : security.getName()); //$NON-NLS-1$
chart.redraw();
return;
}

List<SecurityPrice> prices = security.getPrices();
chart.getTitle().setText(security.getName());

int index;
LocalDate[] dates;
double[] values;
List<SecurityPrice> prices = security.getPrices();

if (chartPeriod == null)
{
index = 0;
dates = new LocalDate[prices.size()];
values = new double[prices.size()];
}
else
{
index = Math.abs(Collections.binarySearch(prices, new SecurityPrice(chartPeriod, 0),
new SecurityPrice.ByDate()));
int index;
LocalDate[] dates;
double[] values;

if (index >= prices.size())
if (chartPeriod == null)
{
// no data available
chart.redraw();
return;
index = 0;
dates = new LocalDate[prices.size()];
values = new double[prices.size()];
}
else
{
index = Math.abs(Collections.binarySearch(prices, new SecurityPrice(chartPeriod, 0),
new SecurityPrice.ByDate()));

dates = new LocalDate[prices.size() - index];
values = new double[prices.size() - index];
}
if (index >= prices.size())
{
// no data available
chart.redraw();
return;
}

for (int ii = 0; index < prices.size(); index++, ii++)
{
SecurityPrice p = prices.get(index);
dates[ii] = p.getTime();
values[ii] = p.getValue() / Values.Quote.divider();
}
dates = new LocalDate[prices.size() - index];
values = new double[prices.size() - index];
}

for (int ii = 0; index < prices.size(); index++, ii++)
{
SecurityPrice p = prices.get(index);
dates[ii] = p.getTime();
values[ii] = p.getValue() / Values.Quote.divider();
}

ILineSeries lineSeries = (ILineSeries) chart.getSeriesSet().createSeries(SeriesType.LINE,
Messages.ColumnQuote);
lineSeries.setXDateSeries(TimelineChart.toJavaUtilDate(dates));
lineSeries.setLineWidth(2);
lineSeries.enableArea(true);
lineSeries.setSymbolType(PlotSymbolType.NONE);
lineSeries.setYSeries(values);
lineSeries.setAntialias(SWT.ON);

ILineSeries lineSeries = (ILineSeries) chart.getSeriesSet().createSeries(SeriesType.LINE, Messages.ColumnQuote);
lineSeries.setXDateSeries(TimelineChart.toJavaUtilDate(dates));
lineSeries.setLineWidth(2);
lineSeries.enableArea(true);
lineSeries.setSymbolType(PlotSymbolType.NONE);
lineSeries.setYSeries(values);
lineSeries.setAntialias(SWT.ON);
chart.getAxisSet().adjustRange();

chart.getAxisSet().adjustRange();
addChartMarker(security);

}
finally
{
chart.setRedraw(true);
chart.redraw();
}
}

private void addChartMarker(Security security)
{
for (Portfolio portfolio : getClient().getPortfolios())
{
for (PortfolioTransaction t : portfolio.getTransactions())
Expand Down Expand Up @@ -747,8 +764,6 @@ private void updateChart(Security security)
if (chartPeriod == null || chartPeriod.isBefore(event.getDate()))
chart.addMarkerLine(event.getDate(), new RGB(255, 140, 0), event.getDetails());
}

chart.redraw();
}

// //////////////////////////////////////////////////////////////
Expand Down

0 comments on commit 6f8323d

Please sign in to comment.