package org.herac.tuxguitar.gui.table;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Color;
import org.herac.tuxguitar.gui.TuxGuitar;
import org.herac.tuxguitar.gui.editors.TGPainter;
import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
import org.herac.tuxguitar.song.models.TGTrack;
public class TGTableCanvasPainter implements PaintListener {
private TGTrack track;
private TGTableViewer viewer;
public TGTableCanvasPainter(TGTableViewer viewer, TGTrack track) {
this.viewer = viewer;
this.track = track;
}
private boolean isRestMeasure(TGMeasureImpl measure) {
int beatCount = measure.countBeats();
for (int i = 0; i < beatCount; i++) {
if (!measure.getBeat(i).isRestBeat()) {
return false;
}
}
return true;
}
public void paintControl(PaintEvent e) {
TGPainter painter = new TGPainter(e.gc);
paintTrack(painter);
}
protected void paintTrack(TGPainter painter) {
if (!TuxGuitar.instance().isLocked()) {
TuxGuitar.instance().lock();
int x = -this.viewer.getHScrollSelection();
int y = 0;
int size = this.viewer.getTable().getRowHeight();
int width = painter.getGC().getDevice().getBounds().width;
boolean playing = TuxGuitar.instance().getPlayer().isRunning();
painter.setBackground(painter.getGC().getDevice().getSystemColor(
SWT.COLOR_GRAY));
painter.initPath(TGPainter.PATH_FILL);
painter.setAntialias(false);
painter.addRectangle(0, y, width, size);
painter.closePath();
Color trackColor = new Color(painter.getGC().getDevice(), this.track
.getColor().getRed(), this.track.getColor().getGreen(), this.track
.getColor().getBlue());
painter.setBackground(trackColor);
painter.setForeground(trackColor);
int count = this.track.countMeasures();
for (int j = 0; j < count; j++) {
TGMeasureImpl measure = (TGMeasureImpl) this.track.getMeasure(j);
if (isRestMeasure(measure)) {
painter.initPath();
painter.setAntialias(false);
painter.addRectangle(x, y, size - 2, size - 1);
painter.closePath();
} else {
painter.initPath(TGPainter.PATH_FILL);
painter.setAntialias(false);
painter.addRectangle(x, y, size - 1, size);
painter.closePath();
}
boolean hasCaret = TuxGuitar.instance().getTablatureEditor()
.getTablature().getCaret().getMeasure().equals(measure);
if ((playing && measure.isPlaying(this.viewer.getEditor()
.getTablature().getViewLayout()))
|| (!playing && hasCaret)) {
painter.setBackground(painter.getGC().getDevice().getSystemColor(
SWT.COLOR_BLACK));
painter.initPath(TGPainter.PATH_FILL);
painter.setAntialias(false);
painter.addRectangle(x + 4, y + 4, size - 9, size - 8);
painter.closePath();
painter.setBackground(trackColor);
}
x += size;
}
trackColor.dispose();
TuxGuitar.instance().unlock();
}
}
}