/* * Copyright 2011 Uwe Krueger. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.mandelsoft.mand.tool; import com.mandelsoft.mand.MandelData; import java.awt.Font; import java.awt.Window; import java.beans.PropertyChangeListener; import java.math.BigDecimal; import javax.swing.BorderFactory; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.event.ChangeListener; import com.mandelsoft.mand.MandelInfo; import com.mandelsoft.swing.ChangeListenerSupport; import com.mandelsoft.swing.GBC; import com.mandelsoft.swing.GBCPanel; import com.mandelsoft.swing.NumberField; import javax.swing.JFormattedTextField; /** * * @author Uwe Krüger */ public abstract class MandelSpecDialog<P extends MandelSpecDialog.Panel> extends JDialog { private ChangeListenerSupport listeners; protected P panel; public MandelSpecDialog(Window parent, String title, String name, boolean change) { super(parent); this.listeners=new ChangeListenerSupport(); setName(name); setTitle(title); setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE); this.panel=createPanel(name,change); add(panel); pack(); this.setResizable(false); } protected abstract P createPanel(String name, boolean change); public void setEditable(boolean b) { panel.setEditable(b); } protected P getPanel() { return panel; } public void removeChangeListener(ChangeListener h) { listeners.removeChangeListener(h); } public void addChangeListener(ChangeListener h) { listeners.addChangeListener(h); } protected void fireChangeEvent() { listeners.fireChangeEvent(this); } protected MandelWindowAccess getMandelWindowAccess() { return MandelWindowAccess.Access.getMandelWindowAccess(this); } public void updateInfo(MandelInfo info) { panel.updateInfo(info); } public void setInfo(MandelInfo info) { panel.setInfo(info); } public void setData(MandelData data) { panel.setData(data); } @Override public void setName(String name) { super.setName(name); if (panel!=null) panel.setName(name); } public abstract class Panel extends GBCPanel { private boolean change; private JLabel label; protected boolean inupdate; protected PropertyChangeListener updateListener; protected Panel(String name, boolean change) { this.change=change; setName(name); setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); add(label=new JLabel(getName()), new GBC(0, 0, 2, 1).setLayout(GBC.HORIZONTAL,GBC.CENTER). setBottomInset(10)); label.setHorizontalAlignment(JLabel.CENTER); label.setFont(label.getFont().deriveFont(Font.BOLD, label.getFont().getSize()+2)); } @Override public void setName(String name) { super.setName(name); if (label!=null) label.setText(name); } public void setInfo(MandelInfo info) { inupdate=true; _setInfo(info); inupdate=false; } public void setData(MandelData data) { setInfo(data.getInfo()); } protected void _setInfo(MandelInfo info) { } public boolean updateInfo(MandelInfo info) { return false; } public void setEditable(boolean b) { change=b; } protected NumberField createNumberField(String txt,int y) { JLabel label=new JLabel(txt); label.setHorizontalAlignment(JTextField.LEFT); add(label, new GBC(0, y, 1, 1).setWeight(0, 0).setAnchor(GBC.WEST)); NumberField field=new NumberField(BigDecimal.class); field.setEditable(change); if (!change) { field.setBorder(null); } field.setHorizontalAlignment(JTextField.TRAILING); field.setColumns(50); if (updateListener!=null) field.addPropertyChangeListener("value", updateListener); label.setLabelFor(field); add(field,new GBC(1,y,1,1).setLeftInset(10)); return field; } protected JFormattedTextField createTextField(String txt,int y) { JLabel fieldlabel=new JLabel(txt); fieldlabel.setHorizontalAlignment(JTextField.LEFT); add(fieldlabel, new GBC(0, y, 1, 1).setWeight(0, 0).setAnchor(GBC.WEST)); JFormattedTextField field=new JFormattedTextField(); field.setBorder(null); field.setHorizontalAlignment(JTextField.TRAILING); field.setColumns(20); field.setEditable(false); fieldlabel.setLabelFor(field); add(field,new GBC(1,y,1,1).setLeftInset(10)); return field; } } }