~ubuntu-branches/ubuntu/oneiric/tuxguitar/oneiric

« back to all changes in this revision

Viewing changes to TuxGuitar/src/org/herac/tuxguitar/gui/clipboard/MeasureTransferable.java

  • Committer: Bazaar Package Importer
  • Author(s): Philippe Coval
  • Date: 2008-06-19 00:30:30 UTC
  • mto: (5.1.2 sid)
  • mto: This revision was merged to the branch mainline in revision 3.
  • Revision ID: james.westby@ubuntu.com-20080619003030-h719szrhsngou7c6
Tags: upstream-1.0
ImportĀ upstreamĀ versionĀ 1.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Created on 09-dic-2005
 
3
 *
 
4
 * TODO To change the template for this generated file go to
 
5
 * Window - Preferences - Java - Code Style - Code Templates
 
6
 */
 
7
package org.herac.tuxguitar.gui.clipboard;
 
8
 
 
9
import java.util.Iterator;
 
10
 
 
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;
 
20
/**
 
21
 * @author julian
 
22
 * 
 
23
 * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
 
24
 */
 
25
public class MeasureTransferable implements Transferable {
 
26
        public static final int TRANSFER_TYPE_REPLACE = 1;
 
27
        public static final int TRANSFER_TYPE_INSERT = 2;
 
28
        
 
29
        private TablatureEditor tablatureEditor;
 
30
        private TGSongSegment segment;
 
31
        private int transferType;
 
32
        
 
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);
 
37
        }
 
38
        
 
39
        private void getTransfer(int p1, int p2,boolean allTracks) {
 
40
                if(allTracks){
 
41
                        this.segment = new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).copyMeasures(p1,p2);
 
42
                }else{
 
43
                        TGTrack track = this.tablatureEditor.getTablature().getCaret().getTrack();
 
44
                        this.segment = new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).copyMeasures(p1,p2,track);
 
45
                }
 
46
                skipMarkers();
 
47
        }
 
48
        
 
49
        public void insertTransfer() throws CannotInsertTransferException {
 
50
                if(this.transferType == TRANSFER_TYPE_REPLACE){
 
51
                        replaceMeasures();
 
52
                }else if(this.transferType == TRANSFER_TYPE_INSERT){
 
53
                        insertMeasures();
 
54
                }
 
55
        }
 
56
        
 
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();
 
62
                }
 
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);
 
66
                
 
67
                //comienza el undoable
 
68
                UndoableInsertMeasure undoable = new UndoableInsertMeasure(toTrack);
 
69
                TuxGuitar.instance().getFileHistory().setUnsavedFile();
 
70
                
 
71
                TGMeasureHeader first = (TGMeasureHeader)this.segment.getHeaders().get(0);
 
72
                int fromNumber = measure.getNumber();
 
73
                long theMove = (measure.getStart() - first.getStart());
 
74
                
 
75
                new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).insertMeasures(this.segment.clone(TuxGuitar.instance().getSongManager().getFactory()),fromNumber,theMove,toTrack);
 
76
                
 
77
                //termia el undoable
 
78
                TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo(this.segment.clone(TuxGuitar.instance().getSongManager().getFactory()),this.segment.getHeaders().size(),fromNumber,theMove));
 
79
        }
 
80
        
 
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();
 
86
                }
 
87
                TGMeasureHeader first = (TGMeasureHeader)this.segment.getHeaders().get(0);
 
88
                
 
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);
 
92
                
 
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());
 
98
                
 
99
                //comienza el undoable
 
100
                UndoableReplaceMeasures undoable = new UndoableReplaceMeasures(current, (current + count) , toTrack);
 
101
                TuxGuitar.instance().getFileHistory().setUnsavedFile();
 
102
                
 
103
                for(int i = freeSpace;i < count;i ++){
 
104
                        TuxGuitar.instance().getSongManager().addNewMeasureBeforeEnd();
 
105
                }
 
106
                new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).replaceMeasures(this.segment.clone(TuxGuitar.instance().getSongManager().getFactory()),theMove,toTrack);
 
107
                
 
108
                //Termina el undoable
 
109
                TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo(this.segment.clone(TuxGuitar.instance().getSongManager().getFactory()),count,freeSpace,theMove));
 
110
        }
 
111
        
 
112
        public void setTransferType(int transferType){
 
113
                this.transferType = transferType;
 
114
        }
 
115
        
 
116
        private void skipMarkers(){
 
117
                Iterator it = this.segment.getHeaders().iterator();
 
118
                while(it.hasNext()){
 
119
                        TGMeasureHeader header = (TGMeasureHeader)it.next();
 
120
                        header.setMarker(null);
 
121
                }
 
122
        }
 
123
}
 
 
b'\\ No newline at end of file'