Author: kmorin Date: 2013-01-09 19:40:51 +0100 (Wed, 09 Jan 2013) New Revision: 2556 Url: http://nuiton.org/projects/jaxx/repository/revisions/2556 Log: refs #2504 Create a button to show a popup with a validation table Added: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageWidget.java trunk/jaxx-validator/src/main/resources/icons/ trunk/jaxx-validator/src/main/resources/icons/action-table-error.png Added: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageWidget.java =================================================================== --- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageWidget.java (rev 0) +++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageWidget.java 2013-01-09 18:40:51 UTC (rev 2556) @@ -0,0 +1,109 @@ + +package jaxx.runtime.validator.swing; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import javax.swing.AbstractAction; +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JRootPane; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.JToggleButton; +import javax.swing.KeyStroke; +import javax.swing.ListSelectionModel; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import jaxx.runtime.SwingUtil; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Button which opens a popup containing a table with the errors found + * by registered validators. + * + * @author kmorin <kmorin@codelutin.com> + * @since 2.5.10 + */ +public class SwingValidatorMessageWidget extends JToggleButton { + + private static final Log log = LogFactory.getLog(SwingValidatorMessageWidget.class); + + protected SwingValidatorMessageTableModel errorTableModel = new SwingValidatorMessageTableModel(); + + protected JDialog popup = new JDialog(); + + protected JTable errorTable = new JTable(); + + public SwingValidatorMessageWidget() { + super(SwingUtil.createActionIcon("table-error")); + + errorTable.setModel(errorTableModel); + errorTable.setRowSelectionAllowed(true); + errorTable.setAutoCreateRowSorter(true); + errorTable.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS); + errorTable.setCellSelectionEnabled(false); + errorTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + errorTable.setFillsViewportHeight(true); + + SwingValidatorUtil.installUI(errorTable, + new SwingValidatorMessageTableRenderer()); + + JScrollPane scrollPanel = new JScrollPane(errorTable); + scrollPanel.setColumnHeaderView(errorTable.getTableHeader()); + popup.add(scrollPanel); + popup.setSize(800, 300); + + addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if(isSelected()) { + popup.setVisible(true); + } else { + popup.dispose(); + } + } + }); + popup.addWindowListener(new WindowAdapter() { + + @Override + public void windowClosing(WindowEvent e) { + setSelected(false); + } + + }); + + // add a auto-close action + JRootPane rootPane = popup.getRootPane(); + + KeyStroke shortcutClosePopup = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0); + + rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + shortcutClosePopup, "close"); + rootPane.getActionMap().put("close", new AbstractAction() { + private static final long serialVersionUID = 1L; + + @Override + public void actionPerformed(ActionEvent e) { + popup.dispose(); + setSelected(false); + } + }); + } + + public void registerValidator(SwingValidator validator) { + errorTableModel.registerValidator(validator); + } + + public void clearValidators() { + errorTableModel.clearValidators(); + } + +} Added: trunk/jaxx-validator/src/main/resources/icons/action-table-error.png =================================================================== (Binary files differ) Property changes on: trunk/jaxx-validator/src/main/resources/icons/action-table-error.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream