1
package org.herac.tuxguitar.gui.table;
3
import org.eclipse.swt.SWT;
4
import org.eclipse.swt.events.PaintEvent;
5
import org.eclipse.swt.events.PaintListener;
6
import org.eclipse.swt.graphics.Color;
7
import org.herac.tuxguitar.gui.TuxGuitar;
8
import org.herac.tuxguitar.gui.editors.TGPainter;
9
import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
10
import org.herac.tuxguitar.song.models.TGTrack;
12
public class TGTableCanvasPainter implements PaintListener{
14
private TGTableViewer viewer;
15
private TGTrack track;
17
public TGTableCanvasPainter(TGTableViewer viewer,TGTrack track){
22
public void paintControl(PaintEvent e) {
23
TGPainter painter = new TGPainter(e.gc);
27
protected void paintTrack(TGPainter painter){
28
if(!TuxGuitar.instance().isLocked()){
29
TuxGuitar.instance().lock();
31
int x = -this.viewer.getHScrollSelection();
33
int size = this.viewer.getTable().getRowHeight();
34
int width = painter.getGC().getDevice().getBounds().width;
35
boolean playing = TuxGuitar.instance().getPlayer().isRunning();
37
painter.setBackground(painter.getGC().getDevice().getSystemColor(SWT.COLOR_GRAY));
38
painter.initPath(TGPainter.PATH_FILL);
39
painter.addRectangle(0,y,width,size);
42
Color trackColor = new Color(painter.getGC().getDevice(),this.track.getColor().getR(),this.track.getColor().getG(),this.track.getColor().getB());
43
painter.setBackground(trackColor);
44
painter.setForeground(trackColor);
46
int count = this.track.countMeasures();
47
for(int j = 0;j < count;j++){
48
TGMeasureImpl measure = (TGMeasureImpl)this.track.getMeasure(j);
49
if(isRestMeasure(measure)){
51
painter.addRectangle(x,y,size - 2,size - 1);
54
painter.initPath(TGPainter.PATH_FILL);
55
painter.addRectangle(x,y,size - 1,size );
58
boolean hasCaret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getMeasure().equals(measure);
59
if((playing && measure.isPlaying(this.viewer.getEditor().getTablature().getViewLayout())) || (!playing && hasCaret)){
60
painter.setBackground(painter.getGC().getDevice().getSystemColor(SWT.COLOR_BLACK));
61
painter.initPath(TGPainter.PATH_FILL);
62
painter.addRectangle(x + 4,y + 4,size - 9,size - 8);
64
painter.setBackground(trackColor);
70
TuxGuitar.instance().unlock();
74
private boolean isRestMeasure(TGMeasureImpl measure){
75
int beatCount = measure.countBeats();
76
for(int i = 0; i < beatCount; i++){
77
if( !measure.getBeat(i).isRestBeat() ){