Save This Page
Home » openjdk-7 » net » sf » bibkeeper » [javadoc | source]
    1   package net.sf.bibkeeper;
    2   
    3   import java.awt.event;
    4   //import java.awt.datatransfer.*;
    5   import javax.swing;
    6   import javax.swing.table;
    7   import java.awt.Dimension;
    8   import java.io;
    9   
   10   public class EntryTable extends JTable {
   11   
   12       final int PREFERRED_WIDTH = 400, PREFERRED_HEIGHT = 30;
   13   
   14       JScrollPane sp = new JScrollPane((JTable)this);
   15       JPopupMenu rightClickMenu = null;
   16       EntryTableModel tableModel;
   17       BibkeeperPrefs prefs;
   18       protected boolean showingSearchResults = false,
   19   	showingGroup = false;    
   20       private EntryTable ths = this;
   21   
   22       public EntryTable(EntryTableModel tm_, BibkeeperPrefs prefs_) {
   23   	super(tm_);
   24   	this.tableModel = tm_;
   25   	prefs = prefs_;
   26   
   27   	getTableHeader().setReorderingAllowed(false); // To prevent color bugs. Must be fixed.
   28   	setShowVerticalLines(true);
   29   	setShowHorizontalLines(true);
   30   	setColumnSelectionAllowed(true);
   31   	setAutoResizeMode(prefs.getInt("autoResizeMode"));
   32   	DefaultCellEditor dce = new DefaultCellEditor(new JTextField());
   33   	dce.setClickCountToStart(2);
   34   	setDefaultEditor(String.class, dce);
   35   	getTableHeader().addMouseListener(new MouseAdapter() {
   36   		public void mouseClicked(MouseEvent e) {
   37   		    int col = getTableHeader().columnAtPoint(e.getPoint());
   38   		    if (col > 0) { // A valid column, but not the first.
   39   			String s = tableModel.getColumnName(col).toLowerCase();
   40   
   41   			// Change sort field ...
   42   			if (!s.equals(prefs.get("priSort")))
   43   			    prefs.put("priSort", s); 
   44   			// ... or change sort direction
   45   			else prefs.putBoolean("priDescending",
   46   				       !prefs.getBoolean("priDescending"));
   47   			tableModel.remap();
   48   			repaint();
   49   		    }
   50   
   51   							     
   52   		}
   53   	    });
   54   	addMouseListener(new MouseAdapter() {
   55   		public void mouseClicked(MouseEvent e) {
   56   		    if (e.getButton() == MouseEvent.BUTTON3) {
   57   			if (rightClickMenu != null)
   58   			    rightClickMenu.show(ths, e.getX(), e.getY());
   59   		    }
   60   							     
   61   		}
   62   	    });
   63   	setWidths();
   64   	sp.getViewport().setBackground(GUIGlobals.tableBackground);
   65       }
   66   
   67       public void setWidths() {
   68   	// Setting column widths:
   69   
   70   	TableColumnModel cm = getColumnModel();
   71   	for (int i=0; i<getModel().getColumnCount(); i++) {
   72   	    cm.getColumn(i).setPreferredWidth(GUIGlobals.getPreferredFieldLength(getModel().getColumnName(i)));
   73   	}
   74       }
   75   
   76       public JScrollPane getPane() {
   77   	return sp;
   78       }
   79   
   80       public void setShowingSearchResults(boolean search,
   81   					boolean group) {
   82   	showingSearchResults = search;
   83   	showingGroup = group;
   84       }
   85   
   86       public void setRightClickMenu(JPopupMenu rcm) {
   87   	rightClickMenu = rcm;
   88       }
   89   
   90       public TableCellRenderer getCellRenderer(int row, int column) {
   91   	// This method asks the table model whether the given cell represents a
   92   	// required or optional field, and returns the appropriate renderer.
   93   	int score = -3;
   94   	if (!showingSearchResults ||
   95   	    tableModel.nonZeroField(row, DatabaseSearch.SEARCH))
   96   	    score++;
   97   	if (!showingGroup ||
   98   	    tableModel.nonZeroField(row, DatabaseSearch.GROUPSEARCH))
   99   	    score+=2;
  100   
  101   	// Now, a grayed out renderer is for entries with -1, and
  102   	// a very grayed out one for entries with -2
  103   	if (score < -1)
  104   	    return veryGrayedOutRenderer;
  105   	if (score == -1)
  106   	    return grayedOutRenderer;
  107   
  108   	if (!prefs.getBoolean("tableColorCodesOn"))	
  109   	    return defRenderer;
  110   	if (column == 0) {
  111   	    // Return a renderer with red background if the entry is incomplete.
  112   	    if (tableModel.isComplete(row))
  113   		return defRenderer;
  114   	    else {
  115   		if (tableModel.hasCrossRef(row))
  116   		    return maybeIncRenderer;
  117   		else
  118   		    return incRenderer;
  119   	    }
  120   	    //return (tableModel.isComplete(row) ? defRenderer: incRenderer); 
  121   	}
  122   	int status;
  123   	try { // This try clause is here to contain a bug.
  124   	    status = tableModel.getCellStatus(row, column);
  125   	} catch (ArrayIndexOutOfBoundsException ex) {
  126   	    return defRenderer; // This should not occur.
  127   	}
  128   
  129   	//if (column == 1)
  130   	//    Util.pr(""+status);
  131   	if (status == EntryTableModel.REQUIRED)
  132   	    return reqRenderer;
  133   	else if (status == EntryTableModel.OPTIONAL)
  134   	    return optRenderer;
  135   	else return defRenderer;
  136       }
  137   
  138       public void scrollTo(int y) {
  139   	JScrollBar scb = sp.getVerticalScrollBar();
  140   	scb.setValue(y*scb.getUnitIncrement(1));
  141       }
  142   
  143       public BibtexEntry[] getSelectedEntries() {
  144   	BibtexEntry[] bes = null;
  145   	int[] rows = getSelectedRows();
  146   	int[] cols = getSelectedColumns();	    
  147   	// Entries are selected if only the first or multiple
  148   	// columns are selected.
  149   	if (((cols.length == 1) && (cols[0] == 0)) ||
  150   	    (cols.length > 1)) { // entryTable.getColumnCount())) {
  151   	    if (rows.length > 0) {
  152   		bes = new BibtexEntry[rows.length];
  153   		for (int i=0; i<rows.length; i++) {
  154   		    bes[i] = tableModel.db.getEntryByID(tableModel.getNameFromNumber(rows[i]));
  155   		}
  156   		
  157   
  158   	    }
  159   	}
  160   	
  161   	return bes;
  162       }
  163   	
  164   
  165       // The following classes define the renderers used to render required
  166       // and optional fields in the table. The purpose of these renderers is
  167       // to visualize which fields are needed for each entry.
  168       private DefaultTableCellRenderer defRenderer = new DefaultTableCellRenderer(); 
  169       private RequiredRenderer reqRenderer = new RequiredRenderer();
  170       private OptionalRenderer optRenderer = new OptionalRenderer();
  171       private IncompleteEntryRenderer incRenderer = new IncompleteEntryRenderer();
  172       private GrayedOutRenderer grayedOutRenderer = new GrayedOutRenderer();
  173       private VeryGrayedOutRenderer veryGrayedOutRenderer 
  174   	= new VeryGrayedOutRenderer();
  175       private MaybeIncompleteEntryRenderer 
  176   	maybeIncRenderer = new MaybeIncompleteEntryRenderer();
  177   
  178       public class RequiredRenderer extends DefaultTableCellRenderer {
  179   	public RequiredRenderer() {
  180   	    super();
  181   	    setBackground(GUIGlobals.tableReqFieldBackground);
  182   	}
  183       }
  184       public class OptionalRenderer extends DefaultTableCellRenderer {
  185   	public OptionalRenderer() {
  186   	    super();
  187   	    setBackground(GUIGlobals.tableOptFieldBackground);
  188   	}
  189       }    
  190       public class IncompleteEntryRenderer extends DefaultTableCellRenderer {
  191   	public IncompleteEntryRenderer() {
  192   	    super();
  193   	    setBackground(GUIGlobals.tableIncompleteEntryBackground);
  194   	}
  195       }
  196       public class MaybeIncompleteEntryRenderer extends DefaultTableCellRenderer {
  197   	public MaybeIncompleteEntryRenderer() {
  198   	    super();
  199   	    setBackground(GUIGlobals.maybeIncompleteEntryBackground);
  200   	}
  201       }
  202   
  203       public class GrayedOutRenderer extends DefaultTableCellRenderer {
  204   	public GrayedOutRenderer() {
  205   	    super();
  206   	    setBackground(GUIGlobals.grayedOutBackground);
  207   	    setForeground(GUIGlobals.grayedOutText);
  208   	}
  209       }
  210   
  211       public class VeryGrayedOutRenderer extends DefaultTableCellRenderer {
  212   	public VeryGrayedOutRenderer() {
  213   	    super();
  214   	    setBackground(GUIGlobals.veryGrayedOutBackground);
  215   	    setForeground(GUIGlobals.veryGrayedOutText);
  216   	}
  217       }
  218   
  219   }

Save This Page
Home » openjdk-7 » net » sf » bibkeeper » [javadoc | source]