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.undo.undoables.measure.UndoableInsertMeasure;
14
import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableReplaceMeasures;
15
import org.herac.tuxguitar.song.helpers.TGSongSegment;
16
import org.herac.tuxguitar.song.helpers.TGSongSegmentHelper;
17
import org.herac.tuxguitar.song.models.TGMeasure;
18
import org.herac.tuxguitar.song.models.TGMeasureHeader;
19
import org.herac.tuxguitar.song.models.TGTrack;
23
* TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
25
public class MeasureTransferable implements Transferable {
26
public static final int TRANSFER_TYPE_REPLACE = 1;
27
public static final int TRANSFER_TYPE_INSERT = 2;
29
private TablatureEditor tablatureEditor;
30
private TGSongSegment segment;
31
private int transferType;
33
public MeasureTransferable(TablatureEditor tablatureEditor, int p1, int p2,boolean allTracks) {
34
this.tablatureEditor = tablatureEditor;
35
this.transferType = TRANSFER_TYPE_REPLACE;
36
this.getTransfer(p1, p2,allTracks);
39
private void getTransfer(int p1, int p2,boolean allTracks) {
41
this.segment = new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).copyMeasures(p1,p2);
43
TGTrack track = this.tablatureEditor.getTablature().getCaret().getTrack();
44
this.segment = new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).copyMeasures(p1,p2,track);
49
public void insertTransfer() throws CannotInsertTransferException {
50
if(this.transferType == TRANSFER_TYPE_REPLACE){
52
}else if(this.transferType == TRANSFER_TYPE_INSERT){
57
public void insertMeasures() throws CannotInsertTransferException {
58
TGMeasure measure = this.tablatureEditor.getTablature().getCaret().getMeasure();
59
TGTrack track = this.tablatureEditor.getTablature().getCaret().getTrack();
60
if (measure == null || this.segment.isEmpty()) {
61
throw new CannotInsertTransferException();
63
//Si el segmento tiene una sola pista,
64
//la pego en la pista seleccionada
65
int toTrack = ((this.segment.getTracks().size() == 1)?track.getNumber():0);
67
//comienza el undoable
68
UndoableInsertMeasure undoable = new UndoableInsertMeasure(toTrack);
69
TuxGuitar.instance().getFileHistory().setUnsavedFile();
71
TGMeasureHeader first = (TGMeasureHeader)this.segment.getHeaders().get(0);
72
int fromNumber = measure.getNumber();
73
long theMove = (measure.getStart() - first.getStart());
75
new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).insertMeasures(this.segment.clone(TuxGuitar.instance().getSongManager().getFactory()),fromNumber,theMove,toTrack);
78
TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo(this.segment.clone(TuxGuitar.instance().getSongManager().getFactory()),this.segment.getHeaders().size(),fromNumber,theMove));
81
public void replaceMeasures() throws CannotInsertTransferException {
82
TGMeasure measure = this.tablatureEditor.getTablature().getCaret().getMeasure();
83
TGTrack track = this.tablatureEditor.getTablature().getCaret().getTrack();
84
if (measure == null || this.segment.isEmpty()) {
85
throw new CannotInsertTransferException();
87
TGMeasureHeader first = (TGMeasureHeader)this.segment.getHeaders().get(0);
89
//Si el segmento tiene una sola pista,
90
//la pego en la pista seleccionada
91
int toTrack = ((this.segment.getTracks().size() == 1)?track.getNumber():0);
93
//si no existen los compases los creo
94
int count = this.segment.getHeaders().size();
95
int current = measure.getNumber();
96
int freeSpace = (track.countMeasures() - (current - 1));
97
long theMove = (measure.getStart() - first.getStart());
99
//comienza el undoable
100
UndoableReplaceMeasures undoable = new UndoableReplaceMeasures(current, (current + count) , toTrack);
101
TuxGuitar.instance().getFileHistory().setUnsavedFile();
103
for(int i = freeSpace;i < count;i ++){
104
TuxGuitar.instance().getSongManager().addNewMeasureBeforeEnd();
106
new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).replaceMeasures(this.segment.clone(TuxGuitar.instance().getSongManager().getFactory()),theMove,toTrack);
108
//Termina el undoable
109
TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo(this.segment.clone(TuxGuitar.instance().getSongManager().getFactory()),count,freeSpace,theMove));
112
public void setTransferType(int transferType){
113
this.transferType = transferType;
116
private void skipMarkers(){
117
Iterator it = this.segment.getHeaders().iterator();
119
TGMeasureHeader header = (TGMeasureHeader)it.next();
120
header.setMarker(null);
b'\\ No newline at end of file'