// Near Infinity - An Infinity Engine Browser and Editor
// Copyright (C) 2001 - 2005 Jon Olav Hauglid
// See LICENSE.txt for license information
package org.infinity.resource.other;
import java.nio.ByteBuffer;
import javax.swing.JButton;
import javax.swing.JComponent;
import org.infinity.datatype.DecNumber;
import org.infinity.datatype.ResourceRef;
import org.infinity.gui.ButtonPanel;
import org.infinity.gui.StructViewer;
import org.infinity.gui.hexview.BasicColorMap;
import org.infinity.gui.hexview.ResourceDataProvider;
import org.infinity.gui.hexview.StructHexViewer;
import org.infinity.resource.AbstractStruct;
import org.infinity.resource.Closeable;
import org.infinity.resource.HasViewerTabs;
import org.infinity.resource.Resource;
import org.infinity.resource.key.ResourceEntry;
import org.infinity.util.io.StreamUtils;
public final class FntResource extends AbstractStruct implements Resource, Closeable, HasViewerTabs
{
// FNT-specific field labels
public static final String FNT_NUM_EXTRA_LETTERS = "# extra letters";
public static final String FNT_LETTERS = "Letters";
public static final String FNT_EXTRA_LETTERS = "Extra letters";
private StructHexViewer hexViewer;
public FntResource(ResourceEntry entry) throws Exception
{
super(entry);
}
@Override
public void close() throws Exception
{
// don't save changes
}
@Override
public int read(ByteBuffer buffer, int startoffset) throws Exception
{
String resName = getResourceEntry().getResourceName();
if (resName.lastIndexOf('.') > 0)
resName = resName.substring(0, resName.lastIndexOf('.'));
byte[] b = new byte[8];
System.arraycopy(resName.getBytes(), 0, b, 0, resName.length());
ByteBuffer buf = StreamUtils.getByteBuffer(b);
addField(new DecNumber(buffer, startoffset, 4, FNT_NUM_EXTRA_LETTERS));
addField(new ResourceRef(buf, 0, FNT_LETTERS, "BAM"));
addField(new ResourceRef(buf, 0, FNT_EXTRA_LETTERS, "BMP"));
return buffer.limit();
}
//--------------------- Begin Interface HasViewerTabs ---------------------
@Override
public int getViewerTabCount()
{
return 1;
}
@Override
public String getViewerTabName(int index)
{
return StructViewer.TAB_RAW;
}
@Override
public JComponent getViewerTab(int index)
{
if (hexViewer == null) {
hexViewer = new StructHexViewer(this, new BasicColorMap(this, true),
new ResourceDataProvider(getResourceEntry()));
}
return hexViewer;
}
@Override
public boolean viewerTabAddedBefore(int index)
{
return false;
}
//--------------------- End Interface HasViewerTabs ---------------------
@Override
protected void viewerInitialized(StructViewer viewer)
{
viewer.addTabChangeListener(hexViewer);
// disabling 'Save' button
JButton bSave = (JButton)viewer.getButtonPanel().getControlByType(ButtonPanel.Control.SAVE);
if (bSave != null) {
bSave.setEnabled(false);
}
}
}