2
* Created on 04-ene-2006
4
* TODO To change the template for this generated file go to
5
* Window - Preferences - Java - Code Style - Code Templates
7
package org.herac.tuxguitar.gui.editors.tab.layout;
9
import java.util.ArrayList;
10
import java.util.List;
12
import org.eclipse.swt.graphics.GC;
13
import org.eclipse.swt.graphics.Rectangle;
14
import org.herac.tuxguitar.gui.editors.tab.MeasureCoords;
15
import org.herac.tuxguitar.gui.editors.tab.SongTrackCoords;
16
import org.herac.tuxguitar.gui.editors.tab.Tablature;
17
import org.herac.tuxguitar.song.managers.SongManager;
22
* TODO To change the template for this generated type comment go to
23
* Window - Preferences - Java - Code Style - Code Templates
25
public class PageViewLayout extends ViewLayout{
26
private int displayWidth;
27
private int divisionCount;
29
public PageViewLayout(Tablature tablature,SongManager songManager,boolean multitrack,boolean scoreEnabled,boolean tablatureEnabled){
30
super(tablature,songManager,multitrack,scoreEnabled,tablatureEnabled);
31
this.displayWidth = (getTablature().getDisplay().getBounds().width - getTablature().getVerticalBar().getSize().x);
38
public void paintSong(GC gc,Rectangle clientArea,int fromX,int fromY){
39
clearTrackPositions();
41
paintTracks(getTablature().getCaret().getSongCoords().getTrackCoords(),gc,clientArea,fromX,fromY);
43
List tracksCoords = new ArrayList();
44
tracksCoords.add(getTablature().getCaret().getSongTrackCoords());
45
paintTracks(tracksCoords,gc,clientArea,fromX,fromY);
51
public void paintTracks(List tracksCoords,GC gc,Rectangle clientArea,int fromX,int fromY) {
52
int posY = fromY + getDefaultFirstTrackSpan();
53
int height = getDefaultFirstTrackSpan();
56
SongTrackCoords firstTrack = (SongTrackCoords)tracksCoords.get(0);
57
int measureCount = firstTrack.getMeasuresCoords().size();
58
int nextMeasureIndex = 0;
59
while(measureCount > nextMeasureIndex){
61
for (int trackIdx = 0; trackIdx < tracksCoords.size(); trackIdx++) {
62
SongTrackCoords trackCoords = (SongTrackCoords) tracksCoords.get(trackIdx);
63
TrackSpacing ts = new TrackSpacing(this) ;
64
ts.setSize(TrackSpacing.POSITION_SCORE_MIDDLE_LINES, ((isScoreEnabled())?( (DEFAULT_SCORE_LINE_SPAN * 5) ):0));
66
if(nextMeasureIndex == 0){
67
trackCoords.getLyricPainter().start();
70
line = getTempLines(fromX,trackCoords.getMeasuresCoords(),nextMeasureIndex,ts);
71
if(AUTO_SPACING_ENABLED && isScoreEnabled()){
72
ts.setSize(TrackSpacing.POSITION_SCORE_UP_LINES, Math.abs(line.minY));
73
if(isScoreEnabled() && line.maxY + MIN_SCORE_TAB_SPAN > DEFAULT_SCORE_SPAN){
74
ts.setSize(TrackSpacing.POSITION_SCORE_DOWN_LINES, (line.maxY - (getScoreLineSpan() * 4)) );
77
ts.setSize(TrackSpacing.POSITION_TABLATURE_TOP_SEPARATOR,(isScoreEnabled()?getMinScoreTabSpan():getStringSpan()));
78
ts.setSize(TrackSpacing.POSITION_TABLATURE, ( isTablatureEnabled()?(isScoreEnabled()?trackCoords.getTabHeight() + getStringSpan() +1:trackCoords.getTabHeight() + ((getStringSpan() / 2) * 5) +1 ) :0) );
79
ts.setSize(TrackSpacing.POSITION_LYRIC,10);
82
paintLine(trackCoords,line,gc,fromX,posY,ts,trackIdx,clientArea);
84
lineHeight = ts.getSize();
85
addTrackPosition((int)trackCoords.getTrack().getNumber(),posY,lineHeight);
86
if((line.lastIndex + 1) >= measureCount && line.tempWith < (getMaxWidth() - 20)){
87
paintLines(trackCoords,ts,gc,(fromX + DEFAULT_HORIZONTAL_SPAN + line.tempWith + 2),posY,((getMaxWidth() - 15) - (fromX + line.tempWith)));
90
posY += lineHeight + DEFAULT_TRACK_SPAN;
91
height += lineHeight + DEFAULT_TRACK_SPAN;
93
nextMeasureIndex = line.lastIndex + 1;
100
public void paintLine(SongTrackCoords trackCoords,TempLine line,GC gc,int fromX, int fromY,TrackSpacing ts,int trackIdx,Rectangle clientArea) {
101
int posX = (fromX + DEFAULT_HORIZONTAL_SPAN);
106
//verifico si esta en el area de cliente
107
boolean isAtX = ((posX + fromX) > clientArea.x - 1500 && (posX + fromX) < clientArea.x + clientArea.width + 100);
108
boolean isAtY = (posY + ts.getSize() > clientArea.y && posY < clientArea.y + clientArea.height + 80);
112
int diff = ( getMaxWidth() - line.tempWith);
113
if(diff != 0 && line.measures.size() > 0){
114
measureSpan = diff / line.measures.size();
118
for(int i = 0;i < line.measures.size();i ++){
119
int index = ((Integer)line.measures.get(i)).intValue();
120
MeasureCoords currMeasureCoords = (MeasureCoords)trackCoords.getMeasuresCoords().get(index);
122
//asigno la posicion dentro del compas
123
currMeasureCoords.setPosX(posX);
124
currMeasureCoords.setPosY(posY);
125
currMeasureCoords.setTs(ts);
127
trackCoords.getLyricPainter().setCurrentMeasure(currMeasureCoords);
129
currMeasureCoords.setFirstOfLine(i == 0);
132
paintMeasure(currMeasureCoords,gc,posX, posY,measureSpan,clientArea);
133
trackCoords.getLyricPainter().paintCurrentNoteBeats(gc,this,currMeasureCoords,posX, posY);
135
currMeasureCoords.setOutOfBounds(true);
137
posX += currMeasureCoords.getWidth() + currMeasureCoords.getSpan();
143
setWidth((width > getWidth())?width:getWidth());
147
public TempLine getTempLines(int posX,List measuresCoords,int fromIndex,TrackSpacing ts) {
148
TempLine line = new TempLine();
149
this.divisionCount = 1;
150
for (int measureIdx = fromIndex; measureIdx < measuresCoords.size(); measureIdx++) {
151
MeasureCoords measureCoords = (MeasureCoords) measuresCoords.get(measureIdx);
153
//verifico si tengo que bajar de linea
154
if((line.tempWith + measureCoords.getWidth()) >= getMaxWidth() && !line.measures.isEmpty()){
155
line.fullLine = true;
158
line.tempWith += measureCoords.getWidth();
159
line.maxY = (measureCoords.getMaxY() > line.maxY)?measureCoords.getMaxY():line.maxY;
160
line.minY = (measureCoords.getMinY() < line.minY)?measureCoords.getMinY():line.minY;
162
line.addMeasure(measureIdx);
163
measureCoords.registerEffects(ts);
169
public boolean followMeasure(MeasureCoords measure,boolean redraw){
170
return getTablature().moveScrollVerticalTo(measure,getDefaultFirstTrackSpan(),redraw);
173
public int getMaxWidth(){
174
return (displayWidth - (DEFAULT_HORIZONTAL_SPAN * 2));
177
private class TempLine{
178
private int tempWith;
179
private int lastIndex;
180
private int startBeat;
181
private boolean fullLine;
182
private List measures = new ArrayList();
184
private int maxY = 0;
185
private int minY = 0;
187
private void addMeasure(int index){
188
this.measures.add(new Integer(index));
189
this.lastIndex = index;