[HexEditor] / HexEditor / trunk / src / org / fife / ui / hex / swing / HexTable.java Repository:
ViewVC logotype

Diff of /HexEditor/trunk/src/org/fife/ui/hex/swing/HexTable.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 25, Tue Mar 22 02:49:55 2011 UTC revision 26, Sat Dec 31 15:40:34 2011 UTC
# Line 33  Line 33 
33  import java.awt.Font;  import java.awt.Font;
34  import java.awt.FontMetrics;  import java.awt.FontMetrics;
35  import java.awt.Graphics;  import java.awt.Graphics;
36    import java.awt.Graphics2D;
37  import java.awt.Point;  import java.awt.Point;
38  import java.awt.Rectangle;  import java.awt.Rectangle;
39  import java.awt.event.FocusEvent;  import java.awt.event.FocusEvent;
# Line 40  Line 41 
41  import java.awt.event.KeyEvent;  import java.awt.event.KeyEvent;
42  import java.io.IOException;  import java.io.IOException;
43  import java.io.InputStream;  import java.io.InputStream;
44    import java.util.Map;
45  import javax.swing.DefaultCellEditor;  import javax.swing.DefaultCellEditor;
46  import javax.swing.JTable;  import javax.swing.JTable;
47  import javax.swing.JTextField;  import javax.swing.JTextField;
# Line 77  Line 79 
79    
80          private static final Color ANTERNATING_CELL_COLOR = new Color(240,240,240);          private static final Color ANTERNATING_CELL_COLOR = new Color(240,240,240);
81    
82            private CellEditor cellEditor = new CellEditor();
83    
84          /**          /**
85           * Creates a new table to display hex data.           * Creates a new table to display hex data.
# Line 95  Line 98 
98  //setRowHeight(28);  //setRowHeight(28);
99                  setCellSelectionEnabled(true);                  setCellSelectionEnabled(true);
100                  setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);                  setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
101                  setDefaultEditor(Object.class, new CellEditor());                  setDefaultEditor(Object.class, cellEditor);
102                  setDefaultRenderer(Object.class, new CellRenderer());                  setDefaultRenderer(Object.class, new CellRenderer());
103                  getTableHeader().setReorderingAllowed(false);                  getTableHeader().setReorderingAllowed(false);
104                  setShowGrid(false);                  setShowGrid(false);
# Line 332  Line 335 
335    
336    
337          /**          /**
338             * Returns the rendering hints for text that will most accurately reflect
339             * those of the native windowing system.
340             *
341             * @return The rendering hints, or <code>null</code> if they cannot be
342             *         determined.
343             */
344            private Map getDesktopAntiAliasHints() {
345                    return (Map)getToolkit().getDesktopProperty("awt.font.desktophints");
346            }
347    
348    
349            /**
350           * Returns the largest selection index.           * Returns the largest selection index.
351           *           *
352           * @return The largest selection index.           * @return The largest selection index.
# Line 544  Line 559 
559          }          }
560    
561    
562            /**
563             * Toggles whether the cells in the hex editor are editable by clicking
564             * in them.
565             *
566             * @param Whether individual hex editor cells should be editable.
567             */
568            public void setCellEditable(boolean cellEditable) {
569                    cellEditor.setEditable(cellEditable);
570            }
571    
572    
573          public void setSelectedRows(int min, int max) {          public void setSelectedRows(int min, int max) {
574                  if (min<0 || min>=getRowCount() ||                  if (min<0 || min>=getRowCount() ||
575                                  max<0 || max>=getRowCount()) {                                  max<0 || max>=getRowCount()) {
# Line 611  Line 637 
637          /**          /**
638           * Table cell editor that restricts input to byte values           * Table cell editor that restricts input to byte values
639           * (<code>0 - 255</code>).           * (<code>0 - 255</code>).
          *  
          * @author Robert Futrell  
          * @version 1.0  
640           */           */
641          private static class CellEditor extends DefaultCellEditor          private static class CellEditor extends DefaultCellEditor
642                                                                          implements FocusListener {                                                                          implements FocusListener {
643    
644                  private static final long serialVersionUID = 1L;                  private static final long serialVersionUID = 1L;
645    
646                    private boolean editable;
647    
648                  public CellEditor() {                  public CellEditor() {
649                          super(new JTextField());                          super(new JTextField());
650                          AbstractDocument doc = (AbstractDocument)                          AbstractDocument doc = (AbstractDocument)
651                                                  ((JTextComponent)editorComponent).getDocument();                                                  ((JTextComponent)editorComponent).getDocument();
652                          doc.setDocumentFilter(new EditorDocumentFilter());                          doc.setDocumentFilter(new EditorDocumentFilter());
653                          getComponent().addFocusListener(this);                          getComponent().addFocusListener(this);
654                            editable = true;
655                  }                  }
656    
657                  public void focusGained(FocusEvent e) {                  public void focusGained(FocusEvent e) {
# Line 636  Line 662 
662                  public void focusLost(FocusEvent e) {                  public void focusLost(FocusEvent e) {
663                  }                  }
664    
665                    public Component getTableCellEditorComponent(JTable table, Object value,
666                                                                            boolean selected, int row, int column) {
667                            if (editable) {
668                                    return super.getTableCellEditorComponent(table, value, selected,
669                                                                            row, column);
670                            }
671                            return null;
672                    }
673    
674                    public void setEditable(boolean editable) {
675                            this.editable = editable;
676                    }
677    
678                  public boolean stopCellEditing() {                  public boolean stopCellEditing() {
679                          // Prevent the user from entering empty string as a value.                          // Prevent the user from entering empty string as a value.
680                          String value = (String)getCellEditorValue();                          String value = (String)getCellEditorValue();
# Line 665  Line 704 
704                  private static final long serialVersionUID = 1L;                  private static final long serialVersionUID = 1L;
705    
706                  private Point highlight;                  private Point highlight;
707                    private Map desktopAAHints;
708    
709                  public CellRenderer() {                  public CellRenderer() {
710                          highlight = new Point();                          highlight = new Point();
711                            desktopAAHints = getDesktopAntiAliasHints();
712                  }                  }
713    
714                  public Component getTableCellRendererComponent(JTable table,                  public Component getTableCellRendererComponent(JTable table,
# Line 721  Line 762 
762                          g.fillRect(x, 0, (highlight.y-highlight.x+1)*w, getRowHeight());                          g.fillRect(x, 0, (highlight.y-highlight.x+1)*w, getRowHeight());
763                      }                      }
764    
765                            Graphics2D g2d = (Graphics2D)g;
766                            Object oldHints = null;
767                            if (desktopAAHints!=null) {
768                                    oldHints = g2d.getRenderingHints();
769                                    g2d.addRenderingHints(desktopAAHints);
770                            }
771    
772                      g.setColor(getForeground());                      g.setColor(getForeground());
773                      int x = 2;                      int x = 2;
774                      String text = getText();                      String text = getText();
# Line 730  Line 778 
778                      }                      }
779                          g.drawString(text, x,11);                          g.drawString(text, x,11);
780    
781                            // Restore rendering hints appropriately.
782                            if (desktopAAHints!=null) {
783                                    g2d.addRenderingHints((Map)oldHints);
784                            }
785    
786                  }                  }
787    
788          }          }

Legend:
Removed from v.25  
changed lines
  Added in v.26

Contact webmaster
ViewVC Help
Powered by ViewVC 1.0.5