//----------------------------------------------------------------------------//
// //
// S c o r e D e p e n d e n t //
// //
//----------------------------------------------------------------------------//
// <editor-fold defaultstate="collapsed" desc="hdr"> //
// Copyright © Hervé Bitteur and others 2000-2013. All rights reserved. //
// This software is released under the GNU General Public License. //
// Goto http://kenai.com/projects/audiveris to report bugs or suggestions. //
//----------------------------------------------------------------------------//
// </editor-fold>
package omr.score.ui;
import omr.selection.MouseMovement;
import omr.selection.SheetEvent;
import omr.sheet.Sheet;
import omr.sheet.ui.SheetDependent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Class {@code ScoreDependent} handles the dependency on score
* availability
*
* @author Hervé Bitteur
*/
public abstract class ScoreDependent
extends SheetDependent
{
//~ Static fields/initializers ---------------------------------------------
/** Usual logger utility */
private static final Logger logger = LoggerFactory.getLogger(
ScoreDependent.class);
/** Is a Score available. */
protected static final String SCORE_AVAILABLE = "scoreAvailable";
/** Is the Score idle. (available, but not being processed by a step) */
protected static final String SCORE_IDLE = "scoreIdle";
//~ Instance fields --------------------------------------------------------
//
/** Indicates whether there is a current score. */
protected boolean scoreAvailable = false;
/** Indicates whether there the current score is non busy. */
protected boolean scoreIdle = false;
//~ Constructors -----------------------------------------------------------
//
//----------------//
// ScoreDependent //
//----------------//
/**
* Creates a new ScoreDependent object.
*/
protected ScoreDependent ()
{
}
//~ Methods ----------------------------------------------------------------
//
//------------------//
// isScoreAvailable //
//------------------//
/**
* Getter for scoreAvailable property
*
* @return the current property value
*/
public boolean isScoreAvailable ()
{
return scoreAvailable;
}
//-------------//
// isScoreIdle //
//-------------//
/**
* Getter for scoreIdle property
*
* @return the current property value
*/
public boolean isScoreIdle ()
{
return scoreIdle;
}
//---------//
// onEvent //
//---------//
/**
* Notification of sheet selection (and thus related score if any).
*
* @param event the notified sheet event
*/
@Override
public void onEvent (SheetEvent event)
{
try {
// Ignore RELEASING
if (event.movement == MouseMovement.RELEASING) {
return;
}
// This updates sheetAvailable
super.onEvent(event);
Sheet sheet = event.getData();
// Update scoreAvailable
setScoreAvailable((sheet != null) && (sheet.getScore() != null));
// Update scoreIdle
if (isScoreAvailable()) {
setScoreIdle(sheet.getScore().isIdle());
} else {
setScoreIdle(false);
}
} catch (Exception ex) {
logger.warn(getClass().getName() + " onEvent error", ex);
}
}
//-------------------//
// setScoreAvailable //
//-------------------//
/**
* Setter for scoreAvailable property
*
* @param scoreAvailable the new property value
*/
public void setScoreAvailable (boolean scoreAvailable)
{
boolean oldValue = this.scoreAvailable;
this.scoreAvailable = scoreAvailable;
firePropertyChange(SCORE_AVAILABLE, oldValue, this.scoreAvailable);
}
//--------------//
// setScoreIdle //
//--------------//
/**
* Setter for scoreIdle property
*
* @param scoreIdle the new property value
*/
public void setScoreIdle (boolean scoreIdle)
{
boolean oldValue = this.scoreIdle;
this.scoreIdle = scoreIdle;
firePropertyChange(SCORE_IDLE, oldValue, this.scoreIdle);
}
}