2
* Created on 09-dic-2005
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.clipboard;
9
import java.util.Iterator;
11
import org.herac.tuxguitar.gui.TuxGuitar;
12
import org.herac.tuxguitar.gui.editors.TablatureEditor;
13
import org.herac.tuxguitar.gui.editors.tab.MeasureCoords;
14
import org.herac.tuxguitar.gui.editors.tab.SongCoords;
15
import org.herac.tuxguitar.gui.editors.tab.SongTrackCoords;
16
import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableInsertMeasure;
17
import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableReplaceMeasures;
18
import org.herac.tuxguitar.song.helpers.TracksMeasures;
19
import org.herac.tuxguitar.song.models.MeasureHeader;
24
* TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
26
public class MeasureTransferable implements Transferable {
27
public static final int TRANSFER_TYPE_REPLACE = 1;
28
public static final int TRANSFER_TYPE_INSERT = 2;
30
private TablatureEditor tablatureEditor;
31
private TracksMeasures tracksMeasures;
34
private int transferType;
36
public MeasureTransferable(TablatureEditor tablatureEditor, long p1, long p2,boolean allTracks) {
37
this.tablatureEditor = tablatureEditor;
38
this.transferType = TRANSFER_TYPE_REPLACE;
41
this.getTransfer(p1, p2,allTracks);
44
private void getTransfer(long p1, long p2,boolean allTracks) {
46
this.tracksMeasures = TuxGuitar.instance().getSongManager().copyMeasures(p1,p2);
48
SongTrackCoords trackCoords = tablatureEditor.getTablature().getCaret().getSongTrackCoords();
49
this.tracksMeasures = TuxGuitar.instance().getSongManager().copyMeasures(p1,p2,trackCoords.getTrack());
54
public void insertTransfer() throws CannotInsertTransferException {
55
if(this.transferType == TRANSFER_TYPE_REPLACE){
57
}else if(this.transferType == TRANSFER_TYPE_INSERT){
62
public void insertMeasures() throws CannotInsertTransferException {
63
MeasureCoords measureCoords = tablatureEditor.getTablature().getCaret().getMeasureCoords();
64
SongCoords songCoords = tablatureEditor.getTablature().getCaret().getSongCoords();
65
if (measureCoords == null || songCoords == null || this.tracksMeasures.isEmpty()) {
66
throw new CannotInsertTransferException();
68
//comienza el undoable
69
UndoableInsertMeasure undoable = new UndoableInsertMeasure();
71
int fromNumber = measureCoords.getMeasure().getNumber();
72
long theMove = (measureCoords.getMeasure().getStart() - p1);
74
TuxGuitar.instance().getSongManager().insertMeasures((TracksMeasures)this.tracksMeasures.clone(),fromNumber,theMove);
77
tablatureEditor.getUndoManager().addEdit(undoable.endUndo((TracksMeasures)this.tracksMeasures.clone(),this.tracksMeasures.getMeasureHeaders().size(),fromNumber,theMove));
82
public void replaceMeasures() throws CannotInsertTransferException {
83
MeasureCoords measureCoords = tablatureEditor.getTablature().getCaret().getMeasureCoords();
84
SongTrackCoords trackCoords = tablatureEditor.getTablature().getCaret().getSongTrackCoords();
85
SongCoords songCoords = tablatureEditor.getTablature().getCaret().getSongCoords();
86
if (measureCoords == null || songCoords == null || this.tracksMeasures.isEmpty()) {
87
throw new CannotInsertTransferException();
90
//si no existen los compases los creo
91
int count = this.tracksMeasures.getMeasureHeaders().size();
92
int current = measureCoords.getMeasure().getNumber();
93
int freeSpace = (trackCoords.getMeasuresCoords().size() - (current - 1));
94
long theMove = (measureCoords.getMeasure().getStart() - p1);
96
//comienza el undoable
97
UndoableReplaceMeasures undoable = new UndoableReplaceMeasures(p1 + theMove,p2 + theMove);
99
for(int i = freeSpace;i < count;i ++){
100
tablatureEditor.getSongManager().addNewMeasureBeforeEnd();
102
tablatureEditor.getSongManager().replaceMeasures((TracksMeasures)this.tracksMeasures.clone(),theMove);
104
//Termina el undoable
105
tablatureEditor.getUndoManager().addEdit(undoable.endUndo((TracksMeasures)this.tracksMeasures.clone(),count,freeSpace,theMove));
108
public void setTransferType(int transferType){
109
this.transferType = transferType;
112
private void skipMarkers(){
113
Iterator it = this.tracksMeasures.getMeasureHeaders().iterator();
115
MeasureHeader header = (MeasureHeader)it.next();
116
header.setMarker(null);
b'\\ No newline at end of file'