package org.herac.tuxguitar.gui.system.plugins.base;
import org.herac.tuxguitar.gui.TuxGuitar;
import org.herac.tuxguitar.gui.system.plugins.TGPluginException;
import org.herac.tuxguitar.player.base.MidiSequencerProvider;
public abstract class TGMidiSequencerProviderPlugin extends TGPluginAdapter {
private boolean loaded;
private MidiSequencerProvider provider;
protected void addPlugin() throws TGPluginException {
if (!this.loaded) {
try {
TuxGuitar.instance().getPlayer().addSequencerProvider(this.provider,
TuxGuitar.instance().isInitialized());
this.loaded = true;
} catch (Throwable throwable) {
throw new TGPluginException(throwable.getMessage(), throwable);
}
}
}
public void close() throws TGPluginException {
try {
this.provider.closeAll();
} catch (Throwable throwable) {
throw new TGPluginException(throwable.getMessage(), throwable);
}
}
protected abstract MidiSequencerProvider getProvider()
throws TGPluginException;
public void init() throws TGPluginException {
this.provider = getProvider();
this.loaded = false;
}
protected void removePlugin() throws TGPluginException {
if (this.loaded) {
try {
TuxGuitar.instance().getPlayer().removeSequencerProvider(this.provider);
this.loaded = false;
} catch (Throwable throwable) {
throw new TGPluginException(throwable.getMessage(), throwable);
}
}
}
public void setEnabled(boolean enabled) throws TGPluginException {
if (enabled) {
addPlugin();
} else {
removePlugin();
}
}
}