/*
* This file is part of jHaushalt.
* jHaushalt 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.
* jHaushalt 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 jHaushalt; if not, see <http://www.gnu.org/licenses/>.
* (C)opyright 2002-2010 Dr. Lars H. Hahn
*/
package haushalt.auswertung.planung;
import haushalt.daten.Euro;
import haushalt.gui.DeleteableTextField;
import haushalt.gui.EuroField;
import haushalt.gui.EuroRenderer;
import haushalt.gui.TextResource;
import haushalt.gui.generischerdialog.AbstractGDPane;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableCellRenderer;
/**
* @author Dr. Lars H. Hahn
* @version 2.5/2007.07.05
* @since 2.1
*/
/*
* 2007.07.05 Internationalisierung
* 2006.04.21 BugFix: Auswahl Unterkategorien/Hochrechnen nach
* dem Laden richtig setzen
*/
public class PlanungGDP extends AbstractGDPane {
private static final long serialVersionUID = 1L;
private static final TextResource RES = TextResource.get();
private final JTable table;
private final Planung planung;
private final JCheckBox unterkategorien = new JCheckBox(RES.getString("use_subcategories"));
private final JCheckBox hochrechnen = new JCheckBox(RES.getString("extrapolation_actual_values"));
public PlanungGDP(final String text, final Planung planung) {
super(text);
this.planung = planung;
this.unterkategorien.setSelected(planung.isUnterkategorien());
this.hochrechnen.setSelected(planung.isHochrechnen());
final PlanungTableModel tableModel = new PlanungTableModel(planung);
this.table = new JTable(tableModel);
final JPanel paneButton = new JPanel();
final JButton buttonAlle = new JButton(RES.getString("all_categories"));
final JButton buttonKeine = new JButton(RES.getString("no_categories"));
this.unterkategorien.addItemListener(new ItemListener() {
public void itemStateChanged(final ItemEvent e) {
planung.setUnterkategorien(PlanungGDP.this.unterkategorien.isSelected());
tableModel.fireTableDataChanged();
}
});
this.hochrechnen.addItemListener(new ItemListener() {
public void itemStateChanged(final ItemEvent e) {
planung.setHochrechnen(PlanungGDP.this.hochrechnen.isSelected());
}
});
this.table.setSurrendersFocusOnKeystroke(true);
this.table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
// Cell-Editoren erzeugen
final DeleteableTextField textField = new DeleteableTextField();
final DefaultCellEditor cellEditor = new DefaultCellEditor(textField);
this.table.setDefaultEditor(String.class, cellEditor);
this.table.setDefaultEditor(Euro.class, new DefaultCellEditor(new EuroField()));
// Cell-Renderer erzeugen
this.table.setDefaultRenderer(String.class, new DefaultTableCellRenderer());
this.table.setDefaultRenderer(Euro.class, new EuroRenderer());
paneButton.add(buttonAlle, null);
paneButton.add(buttonKeine, null);
buttonAlle.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
planung.alleVerwenden(true);
tableModel.fireTableDataChanged();
}
});
buttonKeine.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
planung.alleVerwenden(false);
tableModel.fireTableDataChanged();
}
});
setLayout(new BorderLayout());
final JPanel northPane = new JPanel();
northPane.add(this.unterkategorien);
northPane.add(this.hochrechnen);
this.add(northPane, BorderLayout.NORTH);
this.add(new JScrollPane(this.table), BorderLayout.CENTER);
this.add(paneButton, BorderLayout.SOUTH);
}
@Override
protected void refreshWert() {
this.planung.kategorienAbgleichen();
setWert(this.planung);
}
@Override
protected JComponent getZentraleKomponente() {
return this.table;
}
@Override
public void laden(final DataInputStream in) throws IOException {
this.planung.laden(in);
this.unterkategorien.setSelected(this.planung.isUnterkategorien());
this.hochrechnen.setSelected(this.planung.isHochrechnen());
}
@Override
public void speichern(final DataOutputStream out) throws IOException {
this.planung.speichern(out);
}
}