/* Copyright (c) 2009-2011 Olivier Chafik, All Rights Reserved This file is part of JNAerator (http://jnaerator.googlecode.com/). JNAerator 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 3 of the License, or (at your option) any later version. JNAerator 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 JNAerator. If not, see <http://www.gnu.org/licenses/>. */ package com.ochafik.swing; import java.awt.BorderLayout; import java.awt.Component; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.ActionMap; import javax.swing.Box; import javax.swing.InputMap; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.KeyStroke; import javax.swing.text.JTextComponent; import javax.swing.undo.UndoManager; import com.ochafik.beans.BeansController; public class FormUtils { @SuppressWarnings("serial") public static Action createUndoAction(final UndoManager undoManager, String name) { return new AbstractAction(name) { public void actionPerformed(ActionEvent arg0) { if (undoManager.canUndo()) { undoManager.undo(); } } }; } @SuppressWarnings("serial") public static Action createRedoAction(final UndoManager undoManager, String name) { return new AbstractAction(name) { public void actionPerformed(ActionEvent arg0) { if (undoManager.canRedo()) { undoManager.redo(); } } }; } public static void registerUndoRedoActions(JComponent jtc, Action undoAction, Action redoAction) { InputMap inputMap = jtc.getInputMap(); inputMap.put(KeyStroke.getKeyStroke("pressed UNDO"), "undo"); inputMap.put(KeyStroke.getKeyStroke("ctrl pressed Z"), "undo"); inputMap.put(KeyStroke.getKeyStroke("meta pressed Z"), "undo"); inputMap.put(KeyStroke.getKeyStroke("pressed REDO"), "redo"); inputMap.put(KeyStroke.getKeyStroke("ctrl pressed Y"), "redo"); inputMap.put(KeyStroke.getKeyStroke("meta pressed Y"), "redo"); ActionMap actionMap = jtc.getActionMap(); actionMap.put("undo", undoAction); actionMap.put("redo", redoAction); } public final static void addUndoRedoSupport(final JTextComponent jtc) { jtc.addPropertyChangeListener("document", new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { UndoRedoUtils.registerNewUndoManager(jtc); } }); UndoRedoUtils.registerNewUndoManager(jtc); } public final static JPanel makeEntriesPanel(BeansController<?> beansController,int widthMin,FormElement[] formElements) { GridBagLayout gbl = new GridBagLayout(); GridBagConstraints gbc = new GridBagConstraints(); gbc.weighty=1; JPanel panel=new JPanel(gbl);//new GridLayout(captionsAndProperties.length,2)); int space=5,pad=1; Insets labelsInsets=new Insets(pad,space,pad,space); Insets editorsInsets=new Insets(pad,pad,pad,pad); for (int i=0;i<formElements.length;i++) { gbc.gridy=i; FormElement formElement=formElements[i]; JLabel label=new JLabel(formElement.name,JLabel.RIGHT); gbc.fill=GridBagConstraints.NONE; gbc.anchor=GridBagConstraints.NORTHEAST; gbc.gridx=0; gbc.weightx=0; gbc.insets=labelsInsets; gbl.setConstraints(label, gbc); panel.add(label); Component editor= formElement.editorComponent==null ? beansController.createScrollableViewComponent( formElement.propertyName, null, formElement.title, formElement.toolTip, formElement.largeComponent ) : formElement.editorComponent; gbc.fill=GridBagConstraints.HORIZONTAL; gbc.gridx=1; gbc.weightx=6; gbc.insets=editorsInsets; gbl.setConstraints(editor, gbc); panel.add(editor); } JPanel ret=new JPanel(new BorderLayout()); ret.add("Center",panel); ret.add("South",Box.createHorizontalStrut(widthMin)); return ret; } }