All Downloads are FREE. Search and download functionalities are using the official Maven repository.

se.cambio.openehr.view.dialogs.DialogEditorNullValue Maven / Gradle / Ivy

The newest version!
package se.cambio.openehr.view.dialogs;

import org.openehr.rm.datatypes.text.DvCodedText;
import se.cambio.openehr.util.*;
import se.cambio.openehr.view.util.ScreenUtil;

import javax.swing.*;
import javax.swing.text.DefaultEditorKit;
import javax.swing.text.StyledEditorKit;
import java.awt.*;
import java.awt.event.*;

public class DialogEditorNullValue extends JDialog {
    private static final long serialVersionUID = 1L;
    private AceptarCambiosAction acceptChangesAction = null;
    private CancelChangesAction cancelChangesAction = null;
    private boolean _respuesta = false;
    private JComponent _componentWithFirstFocus = null;
    private JPanel mainPanel = null;
    private JPanel bottonPanel;
    private JButton acceptButton;
    private JButton cancelButton;
    private JTextPane jTextPane;
    private JComboBox comboBox;

    public DialogEditorNullValue(Window owner) {
        super(owner, OpenEHRLanguageManager.getMessage("NullValue"), ModalityType.APPLICATION_MODAL);
        init(new Dimension(400, 150));
    }

    private void init(Dimension size) {
        this.setSize(size);
        ScreenUtil.centerComponentOnScreen(this, this.getOwner());
        this.setResizable(false);
        this.addWindowListener(getCancelChangesAction());
        this.setContentPane(getMainPanel());
    /* Enter KeyStroke */
        KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, true);
        getComboBox().registerKeyboardAction(getAcceptChangesAction(), enter, JComponent.WHEN_IN_FOCUSED_WINDOW);
        KeyStroke esc = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, true);
        getComboBox().registerKeyboardAction(getCancelChangesAction(), esc, JComponent.WHEN_IN_FOCUSED_WINDOW);
    }

    private JPanel getMainPanel() {
        if (mainPanel == null) {
            mainPanel = new JPanel(new BorderLayout());
            JPanel panelAux1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
            JLabel label = new JLabel(OpenEHRLanguageManager.getMessage("NullValue") + ":");
            label.setIcon(OpenEHRDataValuesUI.getIcon(OpenEHRDataValues.DV_CODED_TEXT));
            panelAux1.add(label);
            panelAux1.add(getComboBox());
            JPanel panelAux2 = new JPanel(new BorderLayout());
            panelAux2.add(getTextPane(), BorderLayout.CENTER);
            panelAux2.add(panelAux1, BorderLayout.SOUTH);
            mainPanel.add(panelAux2, BorderLayout.CENTER);
            mainPanel.add(getBottonPanel(), BorderLayout.SOUTH);
        }
        return mainPanel;
    }

    private JTextPane getTextPane() {
        if (jTextPane == null) {
            jTextPane = new JTextPane();
            StyledEditorKit kit = new StyledEditorKit();
            jTextPane.setEditorKit(kit);
            jTextPane.getDocument().putProperty(DefaultEditorKit.EndOfLineStringProperty, "\n");
            jTextPane.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 12));
            jTextPane.setText(OpenEHRLanguageManager.getMessage("NullValueDesc"));
            jTextPane.setEditable(false);
            jTextPane.setBackground(null);
            jTextPane.setPreferredSize(new java.awt.Dimension(250, 70));
        }
        return jTextPane;
    }

    public void setNullValue(DvCodedText codedTextDV) {
        if (codedTextDV != null) {
            getComboBox().setSelectedItem(codedTextDV.getDefiningCode().getCodeString());
        }
    }

    public DvCodedText getSelectedNullValue() {
        return OpenEHRConstUI.NULL_FLAVOUR_MAP.get(getComboBox().getSelectedItem());
    }

    protected JComboBox getComboBox() {
        if (comboBox == null) {
            comboBox = new JComboBox();
            comboBox.setRenderer(new DVComboBoxRendered());
            for (String nullFlavourCode : OpenEHRConstUI.NULL_FLAVOUR_MAP.keySet()) {
                comboBox.addItem(nullFlavourCode);
            }
            SwingUtilities.invokeLater(() -> comboBox.requestFocus());
        }
        return comboBox;
    }

    private static class DVComboBoxRendered extends JLabel implements ListCellRenderer {

        private static final long serialVersionUID = 1L;

        public DVComboBoxRendered() {
            setOpaque(true);
            setHorizontalAlignment(LEFT);
            setVerticalAlignment(CENTER);
        }


        public Component getListCellRendererComponent(JList list, Object value,
                                                      int index, boolean isSelected, boolean cellHasFocus) {
            if (isSelected) {
                setBackground(list.getSelectionBackground());
                setForeground(list.getSelectionForeground());
            } else {
                setBackground(list.getBackground());
                setForeground(list.getForeground());
            }
            if (OpenEHRConstUI.NULL_FLAVOUR_MAP.containsKey(value)) {
                String desc = OpenEHRConstUI.NULL_FLAVOUR_MAP.get(value).getValue();
                setText(desc);
                setToolTipText(desc);
            } else {
                setText(" ");
                setToolTipText("");
            }
            return this;
        }
    }

    private JPanel getBottonPanel() {
        if (bottonPanel == null) {
            bottonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
            bottonPanel.add(getAcceptButton());
            bottonPanel.add(getCancelButton());
        }
        return bottonPanel;
    }

    private JButton getAcceptButton() {
        if (acceptButton == null) {
            acceptButton = new JButton();
            acceptButton.setText(OpenEHRLanguageManager.getMessage("Accept"));
            acceptButton.setIcon(OpenEHRImageUtil.ACCEPT_ICON);
            acceptButton.setEnabled(true);
            acceptButton.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
            acceptButton.addActionListener(getAcceptChangesAction());
        }
        return acceptButton;
    }

    private JButton getCancelButton() {
        if (cancelButton == null) {
            cancelButton = new JButton();
            cancelButton.setText(OpenEHRLanguageManager.getMessage("Cancel"));
            cancelButton.setIcon(OpenEHRImageUtil.CANCEL_ICON);
            cancelButton.setEnabled(true);
            cancelButton.addActionListener(getCancelChangesAction());
        }
        return cancelButton;
    }

    protected AceptarCambiosAction getAcceptChangesAction() {
        if (acceptChangesAction == null) {
            acceptChangesAction = new AceptarCambiosAction();
        }
        return acceptChangesAction;
    }

    protected CancelChangesAction getCancelChangesAction() {
        if (cancelChangesAction == null) {
            cancelChangesAction = new CancelChangesAction();
        }
        return cancelChangesAction;
    }

    protected class CancelChangesAction extends WindowAdapter implements ActionListener {

        public void windowOpened(WindowEvent ex) {
            if (_componentWithFirstFocus != null) {
                _componentWithFirstFocus.requestFocus();
            }
        }

        public void actionPerformed(ActionEvent ex) {
            exit();
        }

        public void windowClosing(WindowEvent we) {
            exit();
        }
    }

    public class AceptarCambiosAction extends AbstractAction {

        private static final long serialVersionUID = -8058749276509227718L;

        public void actionPerformed(ActionEvent ex) {
            accept();
        }
    }

    protected final void accept() {
        if (acceptDialog()) {
            _respuesta = true;
            setVisible(false);
        }
    }

    protected final void exit() {
        if (cancelDialog()) {
            _respuesta = false;
            setVisible(false);
        }
    }

    public final boolean getAnswer() {
        return _respuesta;
    }

    protected void registerComponentWithFirstFocus(JComponent componentWithFirstFocus) {
        _componentWithFirstFocus = componentWithFirstFocus;
    }

    protected final void setRespuesta(boolean respuesta) {
        _respuesta = respuesta;
    }

    protected boolean cancelDialog() {
        return true;
    }

    protected boolean acceptDialog() {
        return true;
    }
}
/*
 *  ***** BEGIN LICENSE BLOCK *****
 *  Version: MPL 2.0/GPL 2.0/LGPL 2.1
 *
 *  The contents of this file are subject to the Mozilla Public 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.mozilla.org/MPL/
 *
 *  Software distributed under the License is distributed on an 'AS IS' basis,
 *  WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 *  for the specific language governing rights and limitations under the
 *  License.
 *
 *
 *  The Initial Developers of the Original Code are Iago Corbal and Rong Chen.
 *  Portions created by the Initial Developer are Copyright (C) 2012-2013
 *  the Initial Developer. All Rights Reserved.
 *
 *  Contributor(s):
 *
 * Software distributed under the License is distributed on an 'AS IS' basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 *  ***** END LICENSE BLOCK *****
 */




© 2015 - 2024 Weber Informatics LLC | Privacy Policy