Package net.sourceforge.marathon.checklist

Source Code of net.sourceforge.marathon.checklist.CheckListForm

/*******************************************************************************
*  Copyright (C) 2010 Jalian Systems Private Ltd.
*  Copyright (C) 2010 Contributors to Marathon OSS Project
*
*  This library is free software; you can redistribute it and/or
*  modify it under the terms of the GNU Library General Public
*  License as published by the Free Software Foundation; either
*  version 2 of the License, or (at your option) any later version.
*
*  This library 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
*  Library General Public License for more details.
*
*  You should have received a copy of the GNU Library General Public
*  License along with this library; if not, write to the Free Software
*  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*
*  Project website: http://www.marathontesting.com
*  Help: Marathon help forum @ http://groups.google.com/group/marathon-testing
*
*******************************************************************************/
package net.sourceforge.marathon.checklist;

import java.awt.Color;
import java.awt.GridLayout;
import java.util.Iterator;
import java.util.StringTokenizer;

import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;

import net.sourceforge.marathon.checklist.CheckList.CommentBox;
import net.sourceforge.marathon.checklist.CheckList.FailureNote;
import net.sourceforge.marathon.checklist.CheckList.Header;

import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;

public class CheckListForm extends JPanel {
    private static final long serialVersionUID = 1L;

    private transient DefaultFormBuilder builder;
    private CheckList checkList;

    private final Mode mode;

    private boolean dirty = false;

    public static enum Mode {
        DISPLAY(false, false), EDIT(true, false), ENTER(false, true);
        private boolean selectable;
        private boolean editable;

        Mode(boolean selectable, boolean editable) {
            this.setSelectable(selectable);
            this.setEditable(editable);
        }

        public void setSelectable(boolean selectable) {
            this.selectable = selectable;
        }

        public boolean isSelectable() {
            return selectable;
        }

        public void setEditable(boolean editable) {
            this.editable = editable;
        }

        public boolean isEditable() {
            return editable;
        }

    }

    public CheckListForm(CheckList checklist, Mode mode) {
        this.mode = mode;
        this.checkList = checklist;
        buildPanel();
    }

    private void buildPanel() {
        FormLayout layout = new FormLayout("pref:grow");
        builder = new DefaultFormBuilder(layout, this);
        builder.setDefaultDialogBorder();
        if (mode.isSelectable()) {
            builder.append("Name");
            builder.append(getNameField());
            builder.append("Description");
            JScrollPane pane = new JScrollPane(getDescriptionField());
            pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            builder.append(pane);
        } else {
            if (checkList.getName().equals(""))
                builder.appendSeparator("<No Name>");
            else
                builder.appendSeparator(checkList.getName());
            JPanel panel = new JPanel();
            panel.setLayout(new GridLayout(0, 1));
            panel.setBackground(Color.LIGHT_GRAY);
            panel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
            String text = checkList.getDescription();
            if (text.equals(""))
                text = "<No Description>";
            StringTokenizer tok = new StringTokenizer(text, "\n");
            while (tok.hasMoreTokens()) {
                JLabel label = new JLabel(tok.nextToken());
                panel.add(label);
            }
            builder.append(panel);
            builder.appendRow("3dlu");
            builder.nextRow();
        }
        Iterator<CheckList.CheckListItem> items = checkList.getItems();
        while (items.hasNext())
            builder.append(items.next().getPanel(mode.isSelectable(), mode.isEditable()));
    }

    private JTextArea getDescriptionField() {
        JTextArea textArea = new JTextArea(checkList.getDescription(), 5, 0);
        textArea.getDocument().addDocumentListener(new DocumentListener() {
            public void changedUpdate(DocumentEvent e) {
                updateDescription(e);
            }

            public void insertUpdate(DocumentEvent e) {
                updateDescription(e);
            }

            public void removeUpdate(DocumentEvent e) {
                updateDescription(e);
            }

            private void updateDescription(DocumentEvent e) {
                dirty = true;
                Document document = e.getDocument();
                try {
                    checkList.setDescription(document.getText(0, document.getLength()));
                } catch (BadLocationException e1) {
                    e1.printStackTrace();
                }
            }

        });
        textArea.setEditable(mode.isSelectable());
        return textArea;
    }

    private JTextField getNameField() {
        JTextField textField = new JTextField(checkList.getName(), 30);
        textField.getDocument().addDocumentListener(new DocumentListener() {
            public void changedUpdate(DocumentEvent e) {
                updateName(e);
            }

            public void insertUpdate(DocumentEvent e) {
                updateName(e);
            }

            public void removeUpdate(DocumentEvent e) {
                updateName(e);
            }

            private void updateName(DocumentEvent e) {
                dirty = true;
                Document document = e.getDocument();
                try {
                    checkList.setName(document.getText(0, document.getLength()));
                } catch (BadLocationException e1) {
                    e1.printStackTrace();
                }
            }

        });
        textField.setEditable(mode.isSelectable());
        return textField;
    }

    public void addTextArea(String label) {
        CommentBox commentBox = checkList.createCommentBox(label);
        builder.append(commentBox.getPanel(mode.isSelectable(), mode.isEditable()));
    }

    public void addChecklistItem(String label) {
        FailureNote failureNote = checkList.createFailureNote(label);
        builder.append(failureNote.getPanel(mode.isSelectable(), mode.isEditable()));
    }

    public void addHeader(String label) {
        Header header = checkList.createHeader(label);
        builder.append(header.getPanel(mode.isSelectable(), mode.isEditable()));
    }

    public CheckList getCheckList() {
        return checkList;
    }

    public void deleteSelected() {
        checkList.deleteSelected();
        rebuildPanel();
    }

    private void rebuildPanel() {
        removeAll();
        buildPanel();
        repaint();
    }

    public void moveUpSelected() {
        checkList.moveUpSelected();
        rebuildPanel();
    }

    public void moveDownSelected() {
        checkList.moveDownSelected();
        rebuildPanel();
    }

    public boolean isSelectable() {
        return mode.isSelectable();
    }

    public Mode getMode() {
        return mode;
    }

    public boolean isDirty() {
        return dirty;

    }
}
TOP

Related Classes of net.sourceforge.marathon.checklist.CheckListForm

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.