/* Copyright (C) 2004 R. Nagel All programs in this directory and subdirectories are published under the GNU General Public License as described below. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Further information about the GNU GPL is available at: http://www.gnu.org/copyleft/gpl.ja.html */ // created by : r.nagel 09.12.2004 // // function : shows the IntegrityMessages produced by IntegrityCheck // // todo : several entries not supported // // modified : package net.sf.jabref.wizard.integrity.gui ; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import net.sf.jabref.*; import net.sf.jabref.undo.UndoableFieldChange; import net.sf.jabref.wizard.integrity.IntegrityCheck; import net.sf.jabref.wizard.integrity.IntegrityMessage; import net.sf.jabref.wizard.text.gui.HintListModel; public class IntegrityMessagePanel extends JPanel implements ListSelectionListener, KeyListener, ActionListener { private JList warnings ; private HintListModel warningData ; private IntegrityCheck validChecker ; private JTextField content ; private JButton applyButton ; private JButton fixButton ; private BasePanel basePanel; public IntegrityMessagePanel(BasePanel basePanel) { this.basePanel = basePanel; validChecker = new IntegrityCheck() ; // errors, warnings, hints // JList -------------------------------------------------------------- warningData = new HintListModel() ; warnings = new JList( warningData ) ; warnings.setCellRenderer( new IntegrityListRenderer() ); warnings.addListSelectionListener(this); JScrollPane paneScrollPane = new JScrollPane( warnings ) ; paneScrollPane.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS ) ; paneScrollPane.setPreferredSize( new Dimension( 540, 255 ) ) ; paneScrollPane.setMinimumSize( new Dimension( 10, 10 ) ) ; // Fix Panel --------------------------------------------------------- JPanel fixPanel = new JPanel() ; // BoxLayout box = new BoxLayout(fixPanel, BoxLayout.LINE_AXIS) ; JLabel label1 = new JLabel(Globals.lang("Field_content")) ; content = new JTextField(40) ; content.addKeyListener(this); applyButton = new JButton(Globals.lang("Apply")) ; applyButton.addActionListener(this) ; applyButton.setEnabled(false); fixButton = new JButton(Globals.lang("Suggest")) ; fixButton.setEnabled(false); fixPanel.add(label1) ; fixPanel.add(content) ; fixPanel.add(applyButton) ; fixPanel.add(fixButton) ; // Main Panel -------------------------------------------------------- this.setLayout( new BorderLayout() ); this.add( paneScrollPane, BorderLayout.CENTER ) ; this.add( fixPanel, BorderLayout.SOUTH) ; } // ------------------------------------------------------------------------ public void updateView( BibtexEntry entry ) { warningData.clear(); IntegrityMessage.setPrintMode( IntegrityMessage.SINLGE_MODE) ; warningData.setData( validChecker.checkBibtexEntry( entry ) ) ; } public void updateView( BibtexDatabase base ) { warningData.clear(); IntegrityMessage.setPrintMode( IntegrityMessage.FULL_MODE) ; warningData.setData( validChecker.checkBibtexDatabase( base ) ) ; } // ------------------------------------------------------------------------ //This method is required by ListSelectionListener. public void valueChanged( ListSelectionEvent e ) { if ( e.getValueIsAdjusting() ) { Object obj = warnings.getSelectedValue() ; String str = "" ; if (obj != null) { IntegrityMessage msg = (IntegrityMessage) obj ; BibtexEntry entry = msg.getEntry() ; if (entry != null) { str = entry.getField(msg.getFieldName()) ; basePanel.highlightEntry(entry); // make the "invalid" field visible .... // EntryEditor editor = basePanel.getCurrentEditor() ; // editor. } } content.setText(str); applyButton.setEnabled(false); } } // -------------------------------------------------------------------------- // This methods are required by KeyListener public void keyPressed( KeyEvent e ) { } public void keyReleased( KeyEvent e ) { applyButton.setEnabled(true); if (e.getKeyCode() == KeyEvent.VK_ENTER) { applyButton.doClick(); } } public void keyTyped( KeyEvent e ) { } public void actionPerformed( ActionEvent e ) { Object obj = e.getSource() ; if (obj == applyButton) { Object data = warnings.getSelectedValue() ; if (data != null) { IntegrityMessage msg = (IntegrityMessage) data ; BibtexEntry entry = msg.getEntry() ; if (entry != null) { // System.out.println("update") ; String oldContent = entry.getField(msg.getFieldName()); UndoableFieldChange edit = new UndoableFieldChange(entry, msg.getFieldName(), oldContent, content.getText()); entry.setField(msg.getFieldName(), content.getText()); basePanel.undoManager.addEdit(edit); basePanel.markBaseChanged(); msg.setFixed(true); // updateView(entry) ; warningData.valueUpdated(warnings.getSelectedIndex()) ; } } applyButton.setEnabled(false); } } // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- class IntegrityListRenderer extends DefaultListCellRenderer { final ImageIcon warnIcon = GUIGlobals.getImage("integrityWarn"); final ImageIcon infoIcon = GUIGlobals.getImage("integrityInfo"); final ImageIcon failIcon = GUIGlobals.getImage("integrityFail"); final ImageIcon fixedIcon = GUIGlobals.getImage("complete"); public Component getListCellRendererComponent( JList list, Object value, // value to display int index, // cell index boolean iss, // is the cell selected boolean chf ) // the list and the cell have the focus { super.getListCellRendererComponent( list, value, index, iss, chf ) ; if (value != null) { IntegrityMessage msg = (IntegrityMessage) value ; if (msg.getFixed()) { setIcon(fixedIcon) ; } else { int id = msg.getType() ; if ( id < 1000 ) setIcon( infoIcon ) ; else if ( id < 2000 ) setIcon( warnIcon ) ; else setIcon( failIcon ) ; } } return this ; } } }