/* * IIOPreferencesPane.java * * Created on September 23, 2004, 9:13 PM */ package kiyut.ekspos.prefs; import java.util.*; import javax.imageio.*; import javax.imageio.spi.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.table.*; /** * * @author Kiyut */ public class IIOPreferencesPane extends PreferencesPane { /** Creates new form IIOPreferencesPane */ public IIOPreferencesPane() { initComponents(); initCustomComponents(); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ private void initComponents() {//GEN-BEGIN:initComponents java.awt.GridBagConstraints gridBagConstraints; jScrollPane1 = new javax.swing.JScrollPane(); readerTable = new javax.swing.JTable(); setLayout(new java.awt.GridBagLayout()); readerTable.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null, null}, {null, null}, {null, null}, {null, null} }, new String [] { "Format", "Provider" } )); jScrollPane1.setViewportView(readerTable); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; add(jScrollPane1, gridBagConstraints); }//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTable readerTable; // End of variables declaration//GEN-END:variables private void initCustomComponents() { IIOTableModel model = new IIOTableModel(); readerTable.setModel(model); TableColumnModel columnModel = readerTable.getColumnModel(); columnModel.getColumn(0).setPreferredWidth(50); JComboBox editorCombo = new JComboBox(); editorCombo.setEditable(false); columnModel.getColumn(1).setCellEditor(new IIOTableCellEditor(editorCombo)); } /** {@inheritDoc} */ public void loadPrefs() { // do nothing //IIOPreferences prefs = IIOPreferences.getInstance(); } /** {@inheritDoc} */ public void savePrefs() { IIOPreferences prefs = IIOPreferences.getInstance(); Map<String,ImageReaderSpi> readerMap = prefs.getImageReaderWriterPreferences().getPreferredImageReaderSpi(); for (int i=0; i<readerTable.getRowCount(); i++) { String format = (String)readerTable.getValueAt(i,0); String provider = (String)readerTable.getValueAt(i,1); ImageReader reader = getImageReader(format,provider); if (reader != null) { readerMap.put(format,reader.getOriginatingProvider()); } } prefs.save(); } /** Return provider name. It is formated as vendorName + space + version * @return provider name */ public static String getProviderName(ImageReaderWriterSpi spi) { return spi.getVendorName() + " " + spi.getVersion(); } /** Return ImageReader or null * @param format the Format * @param provider the provider name * @return ImageReader or null * @see #getCodecName(ImageReaderWriterSpi) */ public static ImageReader getImageReader(String format, String provider) { ImageReader reader = null; Iterator<ImageReader> it = ImageIO.getImageReadersByFormatName(format); while (it.hasNext()) { ImageReader readerTemp = it.next(); ImageReaderSpi spi = readerTemp.getOriginatingProvider(); if (spi == null) { continue; } String str = getProviderName(spi); if (str.equals(provider)) { //System.err.println(format + "-" + codec + "-" + str + "-equals"); reader = readerTemp; break; } } return reader; } private static class IIOTableModel extends DefaultTableModel { public IIOTableModel() { // setting column addColumn("Format"); addColumn("Provider"); // setting data IIOPreferences prefs = IIOPreferences.getInstance(); Map readerMap = prefs.getImageReaderWriterPreferences().getPreferredImageReaderSpi(); Iterator it = readerMap.entrySet().iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry)it.next(); ImageReaderSpi spi = (ImageReaderSpi)entry.getValue(); String[] dataRow = new String[2]; dataRow[0] = (String)entry.getKey(); dataRow[1] = getProviderName(spi); addRow(dataRow); } } @Override public boolean isCellEditable(int row, int col) { boolean b = false; if (col == 1) { b = true; } return b; } } private static class IIOTableCellEditor extends DefaultCellEditor { public IIOTableCellEditor(JComboBox comboBox) { super(comboBox); } @Override public java.awt.Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { JComboBox comboBox = (JComboBox)getComponent(); comboBox.removeAllItems(); Iterator<ImageReader> it = ImageIO.getImageReadersByFormatName((String)table.getValueAt(row,0)); while (it.hasNext()) { ImageReaderSpi spi = it.next().getOriginatingProvider(); comboBox.addItem(getProviderName(spi)); } return super.getTableCellEditorComponent(table, value, isSelected,row, column); } } }