package tk.amberide.ide.gui;
import tk.amberide.ide.data.io.FileIO;
import tk.amberide.ide.gui.misc.FileSystemIcon;
import java.io.File;
import java.util.HashMap;
import javax.swing.*;
/**
*
* @author Tudor
*/
public abstract class FileViewerPanel extends JPanel {
protected File file;
private static HashMap<String, Class<? extends FileViewerPanel>> panels = new HashMap<String, Class<? extends FileViewerPanel>>();
public FileViewerPanel(File file) {
this.file = file;
}
public abstract JMenu[] getContextMenus();
public File getFile() {
return file;
}
public Icon getTabIcon() {
return FileSystemIcon.getIcon(file);
}
public boolean modified() {
return false;
}
public void save() {}
public JComponent getStatusBar() { return null; }
public static void registerPanel(Class<? extends FileViewerPanel> panel, String extension) {
registerPanel(panel, new String[]{extension});
}
public static void registerPanel(Class<? extends FileViewerPanel> panel, String... extensions) {
for (String ext : extensions) {
panels.put(ext, panel);
}
}
public static void setDefaultPanel(Class<? extends FileViewerPanel> panel) {
panels.put(null, panel);
}
public static FileViewerPanel fileViewerPanelFor(File file) {
Class<? extends FileViewerPanel> clazz = panels.get(FileIO.getFileExtension(file));
if (clazz == null) {
clazz = panels.get(null);
}
if (clazz != null) {
try {
return clazz.getConstructor(File.class).newInstance(file);
} catch (Exception ex) {
ex.printStackTrace();
}
}
return null;
}
}