/*
* Copyright 2010, 2011 Institut Pasteur.
*
* This file is part of NHerve Main Toolbox, which is an ICY plugin.
*
* NHerve Main Toolbox is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* NHerve Main Toolbox is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with NHerve Main Toolbox. If not, see <http://www.gnu.org/licenses/>.
*/
package plugins.nherve.toolbox.plugin;
import icy.gui.main.MainEvent;
import icy.painter.Painter;
import icy.sequence.Sequence;
/**
* The Class BackupAndPainterManagerSingletonPlugin.
*
* @param <O>
* the generic type
* @param <P>
* the generic type
* @author Nicolas HERVE - nicolas.herve@pasteur.fr
*/
public abstract class BackupAndPainterManagerSingletonPlugin<O, P extends Painter> extends BackupSingletonPlugin<O> implements PainterManager<P>, PainterFactory<P> {
/** The pm. */
protected PainterManager<P> pm;
/**
* Sequence has changed before setting painter.
*/
public abstract void sequenceHasChangedBeforeSettingPainter();
/**
* Sequence has changed after setting painter.
*/
public abstract void sequenceHasChangedAfterSettingPainter();
/* (non-Javadoc)
* @see plugins.nherve.toolbox.plugin.SingletonPlugin#sequenceHasChanged()
*/
@Override
public void sequenceHasChanged() {
sequenceHasChangedBeforeSettingPainter();
if (hasCurrentSequence()) {
if (!currentSequenceHasPainter()) {
addPainterToCurrentSequence();
}
}
sequenceHasChangedAfterSettingPainter();
}
/* (non-Javadoc)
* @see plugins.nherve.toolbox.plugin.PainterFactory#addPainterToCurrentSequence()
*/
public void addPainterToCurrentSequence() {
P newPainter = createNewPainter();
addPainterToCurrentSequence(newPainter);
}
/* (non-Javadoc)
* @see plugins.nherve.toolbox.plugin.PainterFactory#initPainterManager()
*/
@Override
public void initPainterManager() {
PainterManagerImpl<P> pmi = new PainterManagerImpl<P>(this);
pmi.setPainterName(getPainterName());
pm = pmi;
}
/* (non-Javadoc)
* @see plugins.nherve.toolbox.plugin.PainterManager#addPainterToCurrentSequence(icy.painter.Painter)
*/
public void addPainterToCurrentSequence(P newPainter) {
pm.addPainterToCurrentSequence(newPainter);
}
/* (non-Javadoc)
* @see plugins.nherve.toolbox.plugin.PainterManager#currentSequenceHasPainter()
*/
public boolean currentSequenceHasPainter() {
return pm.currentSequenceHasPainter();
}
/* (non-Javadoc)
* @see plugins.nherve.toolbox.plugin.PainterManager#getCurrentSequencePainter()
*/
public P getCurrentSequencePainter() {
return pm.getCurrentSequencePainter();
}
/* (non-Javadoc)
* @see plugins.nherve.toolbox.plugin.PainterManager#getPainterFrom(icy.sequence.Sequence)
*/
public P getPainterFrom(Sequence seq) {
return pm.getPainterFrom(seq);
}
/* (non-Javadoc)
* @see plugins.nherve.toolbox.plugin.PainterManager#hasPainter(icy.sequence.Sequence)
*/
public boolean hasPainter(Sequence seq) {
return pm.hasPainter(seq);
}
/* (non-Javadoc)
* @see plugins.nherve.toolbox.plugin.PainterManager#removePainterFrom(icy.sequence.Sequence)
*/
public void removePainterFrom(Sequence seq) {
pm.removePainterFrom(seq);
}
/* (non-Javadoc)
* @see plugins.nherve.toolbox.plugin.PainterManager#removePainterFromAllSequences()
*/
public void removePainterFromAllSequences() {
pm.removePainterFromAllSequences();
}
/* (non-Javadoc)
* @see plugins.nherve.toolbox.plugin.PainterManager#removePainterFromCurrentSequence()
*/
public void removePainterFromCurrentSequence() {
pm.removePainterFromCurrentSequence();
}
/* (non-Javadoc)
* @see plugins.nherve.toolbox.plugin.BackupSingletonPlugin#startPlugin()
*/
@Override
public void startPlugin() {
initPainterManager();
super.startPlugin();
}
@Override
public void sequenceClosed(MainEvent event) {
removePainterFrom((Sequence)event.getSource());
super.sequenceClosed(event);
}
@Override
public void stopPlugin() {
removePainterFromAllSequences();
super.stopPlugin();
}
}