//----------------------------------------------------------------------------// // // // S h e e t 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.sheet.ui; import omr.selection.MouseMovement; import omr.selection.SheetEvent; import omr.sheet.Sheet; import org.bushe.swing.event.EventSubscriber; import org.jdesktop.application.AbstractBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Class {@code SheetDependent} handles the dependency on sheet * availability. * * @author Hervé Bitteur */ public abstract class SheetDependent extends AbstractBean implements EventSubscriber<SheetEvent> { //~ Static fields/initializers --------------------------------------------- /** Usual logger utility */ private static final Logger logger = LoggerFactory.getLogger( SheetDependent.class); /** Name of property linked to sheet availability */ public static final String SHEET_AVAILABLE = "sheetAvailable"; //~ Instance fields -------------------------------------------------------- /** Indicates whether there is a current sheet */ protected boolean sheetAvailable = false; //~ Constructors ----------------------------------------------------------- //----------------// // SheetDependent // //----------------// /** * Creates a new SheetDependent object. */ protected SheetDependent () { // Stay informed on sheet status, in order to enable or disable all // sheet-dependent actions accordingly SheetsController.getInstance() .subscribe(this); } //~ Methods ---------------------------------------------------------------- //------------------// // isSheetAvailable // //------------------// /** * Getter for sheetAvailable property * * @return the current property value */ public boolean isSheetAvailable () { return sheetAvailable; } //---------// // onEvent // //---------// /** * Notification of sheet selection. * * @param sheetEvent the notified sheet event */ @Override public void onEvent (SheetEvent sheetEvent) { try { // Ignore RELEASING if (sheetEvent.movement == MouseMovement.RELEASING) { return; } Sheet sheet = sheetEvent.getData(); setSheetAvailable(sheet != null); } catch (Exception ex) { logger.warn(getClass().getName() + " onEvent error", ex); } } //-------------------// // setSheetAvailable // //-------------------// /** * Setter for sheetAvailable property. * * @param sheetAvailable the new property value */ public void setSheetAvailable (boolean sheetAvailable) { boolean oldValue = this.sheetAvailable; this.sheetAvailable = sheetAvailable; firePropertyChange(SHEET_AVAILABLE, oldValue, this.sheetAvailable); } }