Package net.datacrow.console.components.panels

Source Code of net.datacrow.console.components.panels.FieldSelectionPanel$ListMouseListener

/******************************************************************************
*                                     __                                     *
*                              <-----/@@\----->                              *
*                             <-< <  \\//  > >->                             *
*                               <-<-\ __ /->->                               *
*                               Data /  \ Crow                               *
*                                   ^    ^                                   *
*                              info@datacrow.net                             *
*                                                                            *
*                       This file is part of Data Crow.                      *
*       Data Crow 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 any later version.               *
*                                                                            *
*        Data Crow 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 this program. If not, see http://www.gnu.org/licenses  *
*                                                                            *
******************************************************************************/

package net.datacrow.console.components.panels;

import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Collection;
import java.util.Vector;

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;

import net.datacrow.console.ComponentFactory;
import net.datacrow.console.Layout;
import net.datacrow.console.components.DcShortTextField;
import net.datacrow.console.components.lists.DcFieldList;
import net.datacrow.console.components.lists.elements.DcFieldListElement;
import net.datacrow.console.components.lists.elements.DcListElement;
import net.datacrow.core.DcRepository;
import net.datacrow.core.modules.DcModule;
import net.datacrow.core.objects.DcField;
import net.datacrow.core.resources.DcResources;

public class FieldSelectionPanel extends JPanel implements KeyListener {
   
    private Vector<DcListElement> elements;
    private DcFieldList listRight;
    private DcFieldList listLeft;
   
    private DcModule module;
   
    public FieldSelectionPanel(DcModule module, Collection<DcField> fields) {
        this.module = module;

        build();

        for (DcField field : fields)
            listLeft.add(field);

        elements = new Vector<DcListElement>();
        elements.addAll(listLeft.getElements());
    }
   
    public FieldSelectionPanel(DcModule module, boolean allowPictureFields, boolean allowUiFields, boolean allowMultiRefFields) {
        this.module = module;

        build();

        for (DcField field : module.getFields()) {
            if (    field.isEnabled() &&
                    (       (!field.isUiOnly() || allowUiFields) ||
                            (field.isUiOnly() && allowMultiRefFields && field.getValueType() == DcRepository.ValueTypes._DCOBJECTCOLLECTION)) &&
                    (allowPictureFields ||
                    (field.getValueType() != DcRepository.ValueTypes._PICTURE &&
                     field.getValueType() != DcRepository.ValueTypes._ICON)))

                listLeft.add(field);
        }

        elements = new Vector<DcListElement>();
        elements.addAll(listLeft.getElements());
    }

    public DcField[] getSelectedFields() {
        return listRight.getFields().toArray(new DcField[0]);
    }
   
    public void setSelectedFields(DcField[] fields) {
        reset();
        for (int i = 0; i < fields.length; i++) {
            listLeft.remove(fields[i]);
            listRight.add(fields[i]);
        }
    }   
   
    public void setSelectedFields(String[] fields) {
        reset();
        DcField field;
        for (int i = 0; i < fields.length; i++) {
            field = module.getField(fields[i]);
            if (field != null) {
                listLeft.remove(field);
                listRight.add(field);
            }
        }
    }
   
    public void setSelectedFields(int[] fields) {
        reset();
        DcField field;
        for (int i = 0; i < fields.length; i++) {
            field = module.getField(fields[i]);
            if (field != null) {
                listLeft.remove(field);
                listRight.add(field);
            }
        }
    }
   
    private void reset() {
        listRight.setListData(new Vector<DcListElement>());
    }
   
    public void clear() {
        if (listLeft != null)
            listLeft.clear();
       
        listLeft = null;
       
        if (listRight != null)
            listRight.clear();
       
        listRight = null;
       
        if (elements != null)
            elements.clear();
       
        elements = null;
        module = null;
    }   
   
    private void build() {
        setLayout(Layout.getGBL());
       
        JTextField txtFilter = ComponentFactory.getShortTextField(255);
        txtFilter.addKeyListener(this);

        listLeft = new DcFieldList();
        listLeft.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
        listLeft.addMouseListener(new ListMouseListener(ListMouseListener._RIGHT));

        listRight = new DcFieldList();
        listRight.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
        listRight.addMouseListener(new ListMouseListener(ListMouseListener._LEFT));

        NavigationPanel panelNav = new NavigationPanel(listRight);
        JScrollPane scrollerLeft = new JScrollPane(listLeft);
        scrollerLeft.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        scrollerLeft.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
       
        JScrollPane scrollerRight = new JScrollPane(listRight);
        scrollerRight.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        scrollerRight.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
       
        JPanel panelFilter = new JPanel();
        panelFilter.setLayout(Layout.getGBL());
       
        panelFilter.add(ComponentFactory.getLabel(DcResources.getText("lblFilter")),
                 Layout.getGBC( 0, 0, 1, 1, 1.0, 1.0
                ,GridBagConstraints.NORTHWEST, GridBagConstraints.NONE,
                 new Insets( 0, 0, 0, 0), 0, 0));
        panelFilter.add(txtFilter,     Layout.getGBC( 1, 0, 1, 1, 20.0, 20.0
                ,GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL,
                 new Insets( 0, 0, 0, 0), 0, 0));
       
        add(panelFilter,  Layout.getGBC( 0, 0, 2, 1, 1.0, 1.0
                ,GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL,
                 new Insets( 5, 0, 0, 0), 0, 0));
        add(ComponentFactory.getLabel(DcResources.getText("lblAvailableFields")),  Layout.getGBC( 0, 1, 1, 1, 1.0, 1.0
                ,GridBagConstraints.NORTHWEST, GridBagConstraints.NONE,
                 new Insets( 5, 0, 0, 0), 0, 0));
        add(ComponentFactory.getLabel(DcResources.getText("lblSelectedFields")), Layout.getGBC( 1, 1, 1, 1, 1.0, 1.0
                ,GridBagConstraints.NORTHWEST, GridBagConstraints.NONE,
                 new Insets( 5, 0, 0, 0), 0, 0));
        add(scrollerLeft,  Layout.getGBC( 0, 2, 1, 1, 20.0, 20.0
                ,GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH,
                 new Insets( 0, 0, 0, 0), 0, 0));
        add(scrollerRight, Layout.getGBC( 1, 2, 1, 1, 20.0, 20.0
                ,GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH,
                 new Insets( 0, 0, 0, 0), 0, 0));

        add(panelNav,  Layout.getGBC(2, 2, 1, 1, 1.0, 1.0,
                GridBagConstraints.CENTER, GridBagConstraints.NONE,
                new Insets(0, 5, 5, 5), 0, 0));

    }
   
    private class ListMouseListener implements MouseListener {
       
        public static final int _LEFT = 0;
        public static final int _RIGHT = 1;
       
        int direction;
       
        public ListMouseListener(int direction) {
            this.direction = direction;
        }
       
        @Override
        public void mouseReleased(MouseEvent e) {
            if (e.getClickCount() == 2) {
                if (direction == _LEFT) {
                    DcField field = listRight.getSelected();
                   
                    if (field == null) return;
                   
                    listLeft.add(field);
                    listRight.remove();
                    listRight.clearSelection();
                } else {
                    DcField field =  listLeft.getSelected();
                   
                    if (field == null) return;
                   
                    listRight.add(field);
                    listLeft.remove();
                    listLeft.clearSelection();
                }
            } 
        }
       
        @Override
        public void mouseEntered(MouseEvent e) {}
        @Override
        public void mouseExited(MouseEvent e) {}
        @Override
        public void mousePressed(MouseEvent e) {}
        @Override
        public void mouseClicked(MouseEvent e) {}
    }
   
    @Override
    public void keyPressed(KeyEvent e) {}
    @Override
    public void keyTyped(KeyEvent e) {}

    @Override
    public void keyReleased(KeyEvent e) {
        DcShortTextField txtFilter = (DcShortTextField) e.getSource();
        String filter = txtFilter.getText();
       
        if (filter.trim().length() == 0) {
            listLeft.setListData(elements);
        } else {
            Vector<DcListElement> newElements = new Vector<DcListElement>();
            String displayValue;
            for (DcListElement element : elements) {
                displayValue = ((DcFieldListElement) element).getField().getLabel();
                if (displayValue.toLowerCase().startsWith(filter.toLowerCase()))
                    newElements.add(element);
            }
            listLeft.setListData(newElements);
        }
    }

    @Override
    protected void finalize() throws Throwable {
        super.finalize();
        clear();
        removeAll();
    }
}
TOP

Related Classes of net.datacrow.console.components.panels.FieldSelectionPanel$ListMouseListener

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.