ro.nextreports.designer.property.FormattingConditionsPanel.java Source code

Java tutorial

Introduction

Here is the source code for ro.nextreports.designer.property.FormattingConditionsPanel.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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 ro.nextreports.designer.property;

import ro.nextreports.engine.condition.FormattingConditions;
import ro.nextreports.engine.condition.BandElementCondition;
import com.jgoodies.looks.Options;
import com.jgoodies.looks.HeaderStyle;

import javax.swing.*;
import javax.swing.table.TableColumn;

import org.jdesktop.swingx.JXTable;

import ro.nextreports.designer.util.I18NSupport;
import ro.nextreports.designer.util.ImageUtil;
import ro.nextreports.designer.util.Show;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

/**
 * User: mihai.panaitescu
 * Date: 23-Apr-2010
 * Time: 12:08:43
 */
public class FormattingConditionsPanel extends JPanel {

    private JXTable table;
    private BandElementConditionTableModel model;
    private String type;
    // for wizard alarm definition (title != null)
    private String title;

    public FormattingConditionsPanel(String type) {
        this.type = type;
        initUI();
    }

    public FormattingConditionsPanel(String type, String title) {
        this.type = type;
        this.title = title;
        initUI();
    }

    public FormattingConditions getFinalRenderConditions() {
        FormattingConditions rc = new FormattingConditions();
        rc.set(model.getElements());
        return rc;
    }

    public void setRenderConditions(FormattingConditions conditions) {
        if (conditions != null) {
            model.addElements(conditions.getConditions());
        }
    }

    private void initUI() {
        setLayout(new BorderLayout());

        JToolBar toolBar = new JToolBar();
        toolBar.putClientProperty("JToolBar.isRollover", Boolean.TRUE); // hide buttons borders
        toolBar.putClientProperty(Options.HEADER_STYLE_KEY, HeaderStyle.BOTH);
        if (title == null) {
            toolBar.setBorderPainted(false);
        }

        toolBar.add(new AbstractAction() {

            public Object getValue(String key) {
                if (AbstractAction.SMALL_ICON.equals(key)) {
                    return ImageUtil.getImageIcon("add");
                } else if (AbstractAction.SHORT_DESCRIPTION.equals(key)) {
                    return I18NSupport.getString("condition.add");
                }

                return super.getValue(key);
            }

            public void actionPerformed(ActionEvent e) {
                add();
            }

        });

        toolBar.add(new AbstractAction() {

            public Object getValue(String key) {
                if (AbstractAction.SMALL_ICON.equals(key)) {
                    return ImageUtil.getImageIcon("edit");
                } else if (AbstractAction.SHORT_DESCRIPTION.equals(key)) {
                    return I18NSupport.getString("condition.edit");
                }

                return super.getValue(key);
            }

            public void actionPerformed(ActionEvent e) {
                modify();
            }

        });

        toolBar.add(new AbstractAction() {

            public Object getValue(String key) {
                if (AbstractAction.SMALL_ICON.equals(key)) {
                    return ImageUtil.getImageIcon("delete");
                } else if (AbstractAction.SHORT_DESCRIPTION.equals(key)) {
                    return I18NSupport.getString("condition.delete");
                }

                return super.getValue(key);
            }

            public void actionPerformed(ActionEvent e) {
                delete();
            }

        });

        if (title != null) {
            toolBar.add(new JLabel(title));
        }

        add(toolBar, BorderLayout.NORTH);

        createTable();

        table.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent event) {
                if (event.getClickCount() == 2) {
                    modify();
                }
            }

        });
        table.addKeyListener(new KeyAdapter() {

            @Override
            public void keyPressed(KeyEvent event) {
                int keyCode = event.getKeyCode();
                if (keyCode == KeyEvent.VK_ENTER) {
                    modify();
                    // don't let anyone else handle the event
                    event.consume();
                } else if (keyCode == KeyEvent.VK_INSERT) {
                    add();
                    // don't let anyone else handle the event
                    event.consume();
                } else if (keyCode == KeyEvent.VK_DELETE) {
                    delete();
                    // don't let anyone else handle the event
                    event.consume();
                }
            }

        });
        add(new JScrollPane(table), BorderLayout.CENTER);
        if (title != null) {
            table.setPreferredScrollableViewportSize(new Dimension(300, 200));
        } else {
            table.setPreferredScrollableViewportSize(new Dimension(400, 200));
        }
        if (title == null) {
            setPrefferedColumnsSize();
        }
    }

    private void setPrefferedColumnsSize() {
        TableColumn col = table.getColumnModel().getColumn(0);
        int width = 110;
        col.setMinWidth(width);
        col.setMaxWidth(width);
        col.setPreferredWidth(width);

        col = table.getColumnModel().getColumn(1);
        width = 90;
        col.setMinWidth(width);
        col.setMaxWidth(width);
        col.setPreferredWidth(width);

        col = table.getColumnModel().getColumn(2);
        width = 200;
        col.setMinWidth(width);
        col.setMaxWidth(width);
        col.setPreferredWidth(width);

    }

    private void createTable() {
        model = new BandElementConditionTableModel();
        table = new JXTable(model);
        table.setSortable(false);
    }

    public void addAll(java.util.List<BandElementCondition> conditions) {
        for (BandElementCondition condition : conditions) {
            model.addElement(condition);
        }
    }

    public void addCondition(BandElementCondition condition) {
        model.addElement(condition);
    }

    private void add() {
        boolean lockBackground = (title != null);
        BandElementConditionEditPanel panel = new BandElementConditionEditPanel(null, type, lockBackground);
        BandElementConditionEditDialog dlg = new BandElementConditionEditDialog(panel,
                I18NSupport.getString("condition.add"), true);
        dlg.pack();
        Show.centrateComponent(SwingUtilities.getWindowAncestor(FormattingConditionsPanel.this), dlg);
        dlg.setVisible(true);

        if (dlg.okPressed() && (dlg.getCondition() != null)) {
            model.addElement(dlg.getCondition());
        }
    }

    private void modify() {
        boolean lockBackground = (title != null);
        int[] selectedRows = table.getSelectedRows();
        if (selectedRows.length != 1) {
            Show.info(SwingUtilities.getWindowAncestor(FormattingConditionsPanel.this),
                    I18NSupport.getString("condition.select"));
            return;
        }

        BandElementCondition oldCond = model.getObjectForRow(selectedRows[0]);

        BandElementConditionEditPanel panel = new BandElementConditionEditPanel(oldCond, type, lockBackground);
        BandElementConditionEditDialog dlg = new BandElementConditionEditDialog(panel,
                I18NSupport.getString("condition.edit"), true);
        dlg.pack();
        Show.centrateComponent(SwingUtilities.getWindowAncestor(FormattingConditionsPanel.this), dlg);
        dlg.setVisible(true);

        if (!dlg.okPressed()) {
            return;
        }

        BandElementCondition newCond = dlg.getCondition();

        updateObject(selectedRows[0], newCond);
    }

    public void updateObject(int row, BandElementCondition object) {
        row = table.convertRowIndexToModel(row);
        model.updateObject(row, object);
    }

    private void delete() {
        int[] selectedRows = table.getSelectedRows();
        if (selectedRows.length == 0) {
            Show.info(SwingUtilities.getWindowAncestor(FormattingConditionsPanel.this),
                    I18NSupport.getString("condition.select"));
            return;
        }

        if (JOptionPane.showConfirmDialog(SwingUtilities.getWindowAncestor(FormattingConditionsPanel.this),
                I18NSupport.getString("condition.askDelete")) != JOptionPane.OK_OPTION) {
            return;
        }

        for (int i = selectedRows.length - 1; i >= 0; i--) {
            model.deleteElement(selectedRows[i]);
        }
    }

    public void setType(String type) {
        this.type = type;
    }

}