/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.measure; import java.awt.AWTEvent; import java.awt.Point; import java.awt.event.MouseEvent; import java.util.Iterator; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl; import org.herac.tuxguitar.gui.editors.tab.Tablature; import org.herac.tuxguitar.song.models.TGBeat; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SelectMeasureAction extends Action{ public static final String NAME = "action.measure.select"; public SelectMeasureAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK ); } protected int execute(AWTEvent e){ if( e instanceof MouseEvent){ Point p = ((MouseEvent)e).getPoint(); Tablature tablature = getEditor().getTablature(); if(p.x >= 0 && p.y >= 0){ TGTrackImpl track = tablature.getCaret().getTrack(); if (track != null) { TGMeasureImpl measure = findSelectedMeasure(track, p.x, p.y); if (measure != null) { TGBeat beat = tablature.getSongManager().getMeasureManager().getFirstBeat( measure.getBeats() ); if( beat != null ){ tablature.getCaret().moveTo(track, measure, beat, 1); TuxGuitar.instance().setFocus(); return AUTO_UPDATE; } } } } } return 0; } public TGMeasureImpl findSelectedMeasure(TGTrackImpl track,int x,int y){ Tablature tablature = getEditor().getTablature(); TGMeasureImpl measure = null; int minorDistance = 0; Iterator it = track.getMeasures(); while(it.hasNext()){ TGMeasureImpl m = (TGMeasureImpl)it.next(); if(!m.isOutOfBounds() && m.getTs() != null){ boolean isAtX = (x >= m.getPosX() && x <= m.getPosX() + m.getWidth(tablature.getViewLayout()) + m.getSpacing()); if(isAtX){ int measureHeight = m.getTs().getSize(); int distanceY = Math.min(Math.abs(y - (m.getPosY())),Math.abs(y - ( m.getPosY() + measureHeight - 10))); if(measure == null || distanceY < minorDistance){ measure = m; minorDistance = distanceY; } } } } return measure; } }