ComboBoxCellEdit.java :  » XML-UI » gui4j » org » gui4j » core » swing » Java Open Source

Java Open Source » XML UI » gui4j 
gui4j » org » gui4j » core » swing » ComboBoxCellEdit.java
package org.gui4j.core.swing;

import java.awt.Component;
import java.awt.Font;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;

import javax.swing.CellEditor;
import javax.swing.DefaultCellEditor;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JList;
import javax.swing.plaf.basic.BasicComboBoxEditor;

import org.gui4j.Gui4jCallBase;
import org.gui4j.core.Gui4jCall;
import org.gui4j.core.util.ComboBoxNullItem;


public class ComboBoxCellEdit extends DefaultCellEditor
{
    private final JComboBox mComboBox;
    private final CellComboBoxModel mComboBoxModel;
    protected final Gui4jCallBase mGui4jController;
    protected final String mParamName;
    protected final Gui4jCall mValue;
    protected final Gui4jCall mStringConvert;
    private Font mFont;
    protected Map mParamMap;

    public static ComboBoxCellEdit getInstance(
        final Gui4jCallBase gui4jController,
        final Gui4jCall value,
        final Gui4jCall stringConvert,
        final String paramName,
        Font font)
    {
        ComboBoxHorizontalScroll comboBox = new ComboBoxHorizontalScroll();
        ComboBoxCellEdit comboBoxCellEdit =
            new ComboBoxCellEdit(comboBox, gui4jController, value, stringConvert, paramName, font);
        comboBox.setCellEditor(comboBoxCellEdit);
        return comboBoxCellEdit;
    }

    public void setEditable(boolean editable)
    {
        mComboBox.setEditable(editable);
    }

    public void setContent(Collection collection, String nullItemText)
    {
        int idx = mComboBox.getSelectedIndex();
        mComboBoxModel.setContent(collection, nullItemText);
        if (idx != -1 && idx < collection.size())
        {
            mComboBox.setSelectedIndex(idx);
        }
        else
        {
            Object item = getCellEditorValue();
            idx = mComboBoxModel.getIndexOf(item);
            if (idx != -1)
            {
                mComboBox.setSelectedIndex(idx);
            }
            else
            {
            }
        }

    }

    public void setParamMap(Map paramMap)
    {
        mParamMap = paramMap;
    }

    public void setSelectedItem(Object item)
    {
        if (item != null)
        {
            mComboBox.setSelectedItem(item);
        }
        else if (mComboBox.getItemCount() > 0)
        {
            for (int index = 0; index < mComboBox.getItemCount(); index++)
            {
                if (mComboBox.getItemAt(index) instanceof ComboBoxNullItem)
                {
                    mComboBox.setSelectedIndex(index);
                    return;
                }
            }
        }

    }

    private ComboBoxCellEdit(
        final JComboBox comboBox,
        final Gui4jCallBase gui4jController,
        final Gui4jCall value,
        final Gui4jCall stringConvert,
        final String paramName,
        Font font)
    {
        super(comboBox);
        mFont = font;
        mGui4jController = gui4jController;
        mComboBox = comboBox;
        mParamName = paramName;
        mValue = value;
        mStringConvert = stringConvert;
        ComboBoxCellEditFocus editor = new ComboBoxCellEditFocus();
        comboBox.setFont(mFont);
        comboBox.setEditor(editor);
        editor.setCellEditor(this);

        final TransformValue transformValue = new TransformValue()
        {
            public Object transform(Object pValue)
            {
                if (pValue instanceof ComboBoxNullItem)
                {
                    return ((ComboBoxNullItem) pValue).getText();
                }
                if (mParamMap != null)
                {
                    Object oldValue = mParamMap.get(paramName);
                    mParamMap.put(paramName, pValue);
                    Object val = mValue.getValue(mGui4jController, mParamMap, pValue);
                    if (oldValue == null)
                    {
                        mParamMap.remove(paramName);
                    }
                    else
                    {
                        mParamMap.put(paramName, oldValue);
                    }
                    return val;
                }
                else
                {
                    return pValue;
                }
            }
        };

        comboBox.setKeySelectionManager(new Gui4jKeySelectionManager(transformValue));
        DefaultListCellRenderer cellRenderer = new DefaultListCellRenderer()
        {
            public Component getListCellRendererComponent(
                JList list,
                Object pValue,
                int index,
                boolean isSelected,
                boolean cellHasFocus)
            {
                return super.getListCellRendererComponent(
                    list,
                    transformValue.transform(pValue),
                    index,
                    isSelected,
                    cellHasFocus);
            }
        };
        mComboBox.setRenderer(cellRenderer);
        mComboBoxModel = new CellComboBoxModel();
        mComboBox.setModel(mComboBoxModel);
    }

    public void setFont(Font font)
    {
        mFont = font;
        mComboBox.setFont(font);
    }

    // *******************************************************************************

    private class CellComboBoxModel extends DefaultComboBoxModel
    {
        public void setContent(Collection collection, String nullItemText)
        {
            removeAllElements();
            if (nullItemText != null)
            {
                addElement(new ComboBoxNullItem(nullItemText));
            }
            if (collection != null)
            {
                for (Iterator it = collection.iterator(); it.hasNext();)
                {
                    Object element = it.next();
                    addElement(element);
                }
            }
        }

    }

    public final class ComboBoxCellEditFocus extends BasicComboBoxEditor
    {
        private final org.gui4j.core.swing.Gui4jCellEditor.CellEditorTextField cellEditorTextField;
        public ComboBoxCellEditFocus()
        {
            super();
            cellEditorTextField = new org.gui4j.core.swing.Gui4jCellEditor.CellEditorTextField(false);
            editor = cellEditorTextField;
        }

        /**
         * @see javax.swing.ComboBoxEditor#getItem()
         */
        public Object getItem()
        {
            Object object = super.getItem();
            if (object != null && String.class.isAssignableFrom(object.getClass()) && mStringConvert != null)
            {
                return mStringConvert.getValueUseDefaultParam(mGui4jController, object, null);
            }
            return object;
        }

        /**
         * @see javax.swing.ComboBoxEditor#setItem(Object)
         */
        public void setItem(Object anObject)
        {
            // System.out.println("setItem: anObject=" + anObject);
            if ((anObject != null) && (mParamMap != null) && !(String.class.isAssignableFrom(anObject.getClass())))
            {
                mParamMap.put(mParamName, anObject);
                anObject = mValue.getValue(mGui4jController, mParamMap, null);
            }
            super.setItem(anObject);
        }

        public void setCellEditor(CellEditor cellEditor)
        {
            cellEditorTextField.setCellEditor(cellEditor);
        }
    }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.