Package cli_fmw.utils.chooser

Source Code of cli_fmw.utils.chooser.ChoosePanel

/*
* PanelSheduleIndividual.java
*
*/
package cli_fmw.utils.chooser;

import cli_fmw.delegate.directory.Directory;
import cli_fmw.delegate.directory.DirectoryItemRO;
import cli_fmw.delegate.directory.DirectoryItemRecursive;
import cli_fmw.main.ClipsException;
import cli_fmw.utils.MessageBox;
import cli_fmw.utils.Selector;
import cli_fmw.utils.ModalDialog;
import cli_fmw.utils.table_config_states.StateSaver;
import java.util.ArrayList;
import java.util.LinkedList;
import javax.swing.JLabel;


/**
*
* @author  Axe Ilshat
*/
public class ChoosePanel extends javax.swing.JPanel {

    private ChoosePanelData items[];
    ChoosePanelComboModel boxModel = new ChoosePanelComboModel();

    /**
     * Creates new form PanelSheduleIndividual
     */
    public ChoosePanel() {
        initComponents();
    }

    public void setData(Directory<? extends DirectoryItemRO> dir, DirectoryItemRO current,
            String label) throws ClipsException {
        Selector<?> selector = dir.getItems();
        ArrayList<ChoosePanelData> data = new ArrayList<ChoosePanelData>();
        for(int i=0; i< selector.size(); i++) {
            DirectoryItemRO item = (DirectoryItemRO) selector.get(i);
            /*if(!item.isVisible()) {
                continue;
            }*/
            ChoosePanelData d = buildData(item);
            data.add(d);
        }
        ChoosePanelData array[] = new ChoosePanelData[data.size()];
        data.toArray(array);
        ChoosePanelData currentData = null;
        if (current != null) {
            currentData = find(array, current.getID(), 0);
            if (currentData == null) {
                currentData = buildData(current);
            }
        }
        setData(array, currentData, label);
    StateSaver.attachTo(this);
    }
   
    /**
     *
     * @param dir
     * @param current
     * @param label
     * @param button
     * @throws cli_fmw.main.ClipsException
     */
    public void setData(DirectoryItemRO dir[], DirectoryItemRO current,
            String label) throws ClipsException {
        ArrayList<ChoosePanelData> data = new ArrayList<ChoosePanelData>();
        for(int i=0; i< dir.length; i++) {
            ChoosePanelData d = buildData(dir[i]);
            data.add(d);
        }
        ChoosePanelData array[] = new ChoosePanelData[data.size()];
        data.toArray(array);

        ChoosePanelData currentData = null;
        if (current != null) {
            currentData = find(array, current.getID(), 0);
            if (currentData == null) {
                currentData = buildData(current);
            }
        }
        setData(array, currentData, label);
    StateSaver.attachTo(this);
    }
   
    /**
     *
     * @param item
     * @return
     * @throws cli_fmw.main.ClipsException
     */
    private ChoosePanelData buildData(DirectoryItemRO item) throws ClipsException {
        ChoosePanelData d = new ChoosePanelData();
        d.value = item.getID();
        d.title = item.toString();
        d.canBeSelected = true;
       
        if(item instanceof DirectoryItemRecursive) {
            DirectoryItemRecursive thisItem = (DirectoryItemRecursive)item;
            Selector ii = thisItem.getItems();
            if(ii.size() > 0) {
                LinkedList<ChoosePanelData> ll = new LinkedList<ChoosePanelData>();
                for(int j=0; j<ii.size(); j++) {
                    DirectoryItemRecursive it = (DirectoryItemRecursive) ii.get(j);
                    if(!it.isVisible()) {
                        continue;
                    }
                    ChoosePanelData d2 = buildData(it);
                    ll.add(d2);
                }
                if(ll.size() > 0) {
                    d.items = new ChoosePanelData[ll.size()];
                    ll.toArray(d.items);
                }
            }
        }
        return d;
    }
   
    private ChoosePanelData find (ChoosePanelData list[], int id, int type) {
        for(int i=0; i<list.length; i++) {
            ChoosePanelData d = list[i];
            if(d.value == id && d.type == type) {
                return d;
            }
            if(d.items != null) {
                d = find(d.items, id, type);
                if(d != null) {
                    return d;
                }
            }
        }
        return null;
    }

    /**
     * инициализирует панель
     * @param list список опций
     * @param current элемент из списка list, который будет выбран после инициализации панели
     * @param label подпись к панели
     * @param button подпись на кнопке
     * @throws ClipsException
     */
    public void setData(ChoosePanelData list[], ChoosePanelData current,
            String label) throws ClipsException {
        this.items = list;
        jLabel1.setText(label);

        int size = list.length;
        if(size == 0) {
            itemsCombo.setEnabled(false);
            selectBtn.setVisible(false);
            add(new JLabel("Нет вариантов для выбора"));
            System.out.println("В панель выбора передан пустой список");
        }
        itemsCombo.removeAllItems();

        for(int i=0; i<items.length; i++) {
            append(items[i]);
        }
        boxModel.setSelectedItem(current);
    }

    public void setEnableChoose(boolean b) {
        itemsCombo.setEnabled(b);
        selectBtn.setEnabled(b);
    }
   
    private void append(ChoosePanelData item) throws ClipsException {
        if(item.canBeSelected) {
            itemsCombo.addItem(item);
        }
        if(item.items != null) {
            for(int i=0; i<item.items.length; i++) {
                append(item.items[i]);
            }           
        }
    }

    public void addChoosePanelListener(ChoosePanelComboListener listener) {
        boxModel.addChoosePanelListener(listener);
    }

    public void removeChoosePanelListener(ChoosePanelComboListener listener) {
        boxModel.removeChoosePanelListener(listener);
    }
   
    /**
     * Назначает текущий выбранный итем, при этом не вызываются слушатели изменений
     * @param type тип каталога (0, если панель сгенерирована по каталогу)
     * @param id идентификатор итема, (-1, если убрать выделение)
     */
    public void setCurrentSelection(int type, int id) {
        boxModel.setSilent(true);
        if(id == -1) {
            itemsCombo.setSelectedIndex(-1);
        } else {
            ChoosePanelData selection = find(items, id, type);
            itemsCombo.setSelectedItem(selection);
        }
        boxModel.setSilent(false);
    }

  public ChoosePanelData getCurrent(){
    return (ChoosePanelData) boxModel.getSelectedItem();
  }
 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        itemsCombo = new javax.swing.JComboBox(boxModel);
        selectBtn = new javax.swing.JButton();

        setLayout(new java.awt.BorderLayout(5, 5));

        jLabel1.setText("Label");
        add(jLabel1, java.awt.BorderLayout.WEST);

        add(itemsCombo, java.awt.BorderLayout.CENTER);

        selectBtn.setText("...");
        selectBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                selectBtnActionPerformed(evt);
            }
        });
        add(selectBtn, java.awt.BorderLayout.EAST);
    }// </editor-fold>//GEN-END:initComponents
    private void selectBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectBtnActionPerformed
        try {
            //fixme default selected
            ChooseDialog dlg = new ChooseDialog(items, false, null);
            dlg.setVisible(true);
            if (dlg.getDlgResult() == ModalDialog.DLG_OK) {
                Selector coll = dlg.getSelectedItems();
                ChoosePanelData selected = (ChoosePanelData) coll.get(0);
                itemsCombo.setSelectedItem(selected);
            }
        } catch (ClipsException ex) {
            MessageBox.showExceptionOnly(ex);
        }
     
}//GEN-LAST:event_selectBtnActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JComboBox itemsCombo;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JButton selectBtn;
    // End of variables declaration//GEN-END:variables
}
TOP

Related Classes of cli_fmw.utils.chooser.ChoosePanel

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.