// Near Infinity - An Infinity Engine Browser and Editor // Copyright (C) 2001 - 2005 Jon Olav Hauglid // See LICENSE.txt for license information package org.infinity.gui; import java.awt.BorderLayout; import java.awt.Component; import javax.swing.JPanel; import org.infinity.NearInfinity; import org.infinity.resource.AbstractStruct; import org.infinity.resource.Closeable; import org.infinity.resource.Resource; import org.infinity.resource.StructEntry; import org.infinity.resource.TextResource; import org.infinity.resource.Viewable; import org.infinity.resource.ViewableContainer; import org.infinity.resource.graphics.BamResource; import org.infinity.resource.key.Keyfile; import org.infinity.resource.key.ResourceEntry; public final class ViewFrame extends ChildFrame implements ViewableContainer { private final StatusBar statusBar = new StatusBar(); private Viewable viewable; public ViewFrame(Component parent, Viewable viewable) { super(viewable.getClass().getName(), true); setViewable(viewable); if (viewable instanceof AbstractStruct || viewable instanceof TextResource || viewable instanceof BamResource) setSize(NearInfinity.getInstance().getWidth() - 200, NearInfinity.getInstance().getHeight() - 45); else pack(); Center.center(this, parent.getBounds()); setVisible(true); } // --------------------- Begin Interface ViewableContainer --------------------- @Override public StatusBar getStatusBar() { return statusBar; } @Override public Viewable getViewable() { return viewable; } @Override public void setViewable(Viewable viewable) { this.viewable = viewable; if (viewable instanceof Resource && ((Resource)viewable).getResourceEntry() != null) { ResourceEntry entry = ((Resource)viewable).getResourceEntry(); setTitle(entry.toString()); setIconImage(entry.getIcon().getImage()); statusBar.setMessage(entry.getActualPath().toString()); } else { setIconImage(Keyfile.ICON_STRUCT.getImage()); setTitle(((StructEntry)viewable).getName()); if (((AbstractStruct)viewable).getSuperStruct() != null) statusBar.setMessage("Parent structure: " + ((AbstractStruct)viewable).getSuperStruct().getName()); } JPanel pane = (JPanel)getContentPane(); pane.setLayout(new BorderLayout()); pane.removeAll(); pane.add(viewable.makeViewer(this), BorderLayout.CENTER); pane.add(statusBar, BorderLayout.SOUTH); pane.invalidate(); pane.revalidate(); } // --------------------- End Interface ViewableContainer --------------------- @Override protected boolean windowClosing(boolean forced) throws Exception { if (viewable instanceof Closeable) ((Closeable)viewable).close(); this.viewable = null; this.getContentPane().removeAll(); return super.windowClosing(forced); } }