Package org.itsnat.impl.comp.list

Source Code of org.itsnat.impl.comp.list.ItsNatHTMLSelectImpl

/*
  ItsNat Java Web Application Framework
  Copyright (C) 2007-2011 Jose Maria Arranz Santamaria, Spanish citizen

  This software is free software; you can redistribute it and/or modify it
  under the terms of the GNU Lesser General Public License as
  published by the Free Software Foundation; either version 3 of
  the License, or (at your option) any later version.
  This software 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
  Lesser General Public License for more details. You should have received
  a copy of the GNU Lesser General Public License along with this program.
  If not, see <http://www.gnu.org/licenses/>.
*/

package org.itsnat.impl.comp.list;

import org.itsnat.impl.comp.ItsNatHTMLFormCompChangeBasedSharedImpl;
import org.itsnat.impl.comp.ItsNatHTMLFormCompChangeBased;
import org.itsnat.impl.comp.ItsNatHTMLFormComponentImpl;
import org.itsnat.comp.list.ItsNatListCellEditor;
import org.itsnat.comp.list.ItsNatListCellRenderer;
import org.itsnat.comp.list.ItsNatHTMLSelect;
import org.itsnat.comp.list.ItsNatListUI;
import org.itsnat.core.ItsNatException;
import javax.swing.event.ListDataEvent;
import org.itsnat.comp.list.ItsNatListStructure;
import org.itsnat.comp.list.ItsNatHTMLSelectUI;
import org.itsnat.core.NameValue;
import org.itsnat.impl.comp.listener.ItsNatCompDOMListenersByClientImpl;
import org.itsnat.impl.comp.mgr.ItsNatStfulDocComponentManagerImpl;
import org.itsnat.impl.core.doc.ItsNatStfulDocumentImpl;
import org.itsnat.impl.core.jsren.JSRenderMethodCallImpl;
import org.itsnat.impl.core.domutil.NamespaceUtil;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.events.Event;
import org.w3c.dom.html.HTMLFormElement;
import org.w3c.dom.html.HTMLSelectElement;

/**
*
* @author jmarranz
*/
public abstract class ItsNatHTMLSelectImpl extends ItsNatHTMLFormComponentImpl implements ItsNatHTMLSelect, ItsNatListInternal, ItsNatHTMLFormCompChangeBased
{
    protected ItsNatListCellRenderer renderer;
    protected ItsNatHTMLSelectMarkupDrivenUtil markupDrivenUtil;
    protected ItsNatListSharedImpl listDelegate = createItsNatListShared();
    protected ItsNatHTMLFormCompChangeBasedSharedImpl changeBasedDelegate = new ItsNatHTMLFormSelectCompSharedImpl(this);

    /**
     * Creates a new instance of ItsNatHTMLSelectImpl
     */
    public ItsNatHTMLSelectImpl(HTMLSelectElement selectElem, NameValue[] artifacts, ItsNatStfulDocComponentManagerImpl componentMgr)
    {
        super(selectElem, artifacts, componentMgr);

        this.markupDrivenUtil = ItsNatHTMLSelectMarkupDrivenUtil.initMarkupDriven(this);

        setItsNatListCellRenderer(componentMgr.createDefaultItsNatListCellRenderer());
    }

    public void init()
    {
        changeBasedDelegate.init();

        super.init();
    }

    public void enableEventListenersByDoc()
    {
        super.enableEventListenersByDoc();

        changeBasedDelegate.enableEventListenersByDoc();
    }

    public void enableEventListenersByClient(ItsNatCompDOMListenersByClientImpl domListeners)
    {
        super.enableEventListenersByClient(domListeners);

        changeBasedDelegate.enableEventListenersByClient(domListeners);
    }

    public void processDOMEvent(Event evt)
    {
        changeBasedDelegate.processDOMEvent(evt);

        super.processDOMEvent(evt);
    }

    public void postHandleEventOnChange(Event evt)
    {
        // Nada que hacer
    }

    public ItsNatListStructure getItsNatListStructure()
    {
        // La estructura es fija, no puede tener algo a medida
        return null;
    }

    public HTMLSelectElement getHTMLSelectElement()
    {
        return (HTMLSelectElement)node;
    }

    public HTMLFormElement getHTMLFormElement()
    {
        return getHTMLSelectElement().getForm();
    }

    public ItsNatListUI getItsNatListUI()
    {
        return (ItsNatListUI) compUI;
    }

    public ItsNatListUIInternal getItsNatListUIInternal()
    {
        return (ItsNatListUIInternal)compUI;
    }

    public ItsNatHTMLSelectUI getItsNatHTMLSelectUI()
    {
        return (ItsNatHTMLSelectUI) compUI;
    }

    public ItsNatHTMLSelectUIImpl getItsNatHTMLSelectUIImpl()
    {
        return (ItsNatHTMLSelectUIImpl) compUI;
    }

    public void bindDataModel()
    {
        listDelegate.bindDataModel();
    }

    public void unbindDataModel()
    {
        listDelegate.unbindDataModel();
    }

    public void initialSyncUIWithDataModel()
    {
        listDelegate.initialSyncUIWithDataModel();

        if (markupDrivenUtil != null)
            markupDrivenUtil.initialSyncUIWithDataModel();
    }

    public int indexOf(Object obj)
    {
        return ItsNatListSharedImpl.indexOf(obj, getListModel());
    }

    public void intervalAdded(ListDataEvent e)
    {
        listDelegate.intervalAdded(e);
    }

    public void intervalRemoved(ListDataEvent e)
    {
        listDelegate.intervalRemoved(e);
    }

    public void contentsChanged(ListDataEvent e)
    {
        listDelegate.contentsChanged(e);
    }

    public void insertElementAtInternal(int i, Object item)
    {
        if (!isUIEnabled()) return;

        ItsNatHTMLSelectUIImpl compUI = getItsNatHTMLSelectUIImpl();
        compUI.insertElementAt(i, item);
    }

    public void removeElementRangeInternal(int fromIndex, int toIndex)
    {
        if (!isUIEnabled()) return;
  
        ItsNatHTMLSelectUIImpl compUI = getItsNatHTMLSelectUIImpl();
        compUI.removeElementRange(fromIndex, toIndex);
    }

    public void blur()
    {
        ItsNatStfulDocumentImpl itsNatDoc = (ItsNatStfulDocumentImpl)getItsNatDocumentImpl();
        JSRenderMethodCallImpl.addCallMethodHTMLFormControlCode(getHTMLElement(),"blur",itsNatDoc);
    }

    public void focus()
    {
        ItsNatStfulDocumentImpl itsNatDoc = (ItsNatStfulDocumentImpl)getItsNatDocumentImpl();
        JSRenderMethodCallImpl.addCallMethodHTMLFormControlCode(getHTMLElement(),"focus",itsNatDoc);
    }

    public ItsNatListCellRenderer getItsNatListCellRenderer()
    {
        return renderer;
    }

    public void setItsNatListCellRenderer(ItsNatListCellRenderer renderer)
    {
        this.renderer = renderer;
    }

    public ItsNatListCellEditor getItsNatListCellEditor()
    {
        return null;
    }

    public void setItsNatListCellEditor(ItsNatListCellEditor cellEditor)
    {
        throw new ItsNatException("<select> options can not be graphically edited",this);
    }

    public void startEditingAt(int index)
    {
        throw new ItsNatException("<select> options can not be graphically edited",this);
    }

    public boolean isEditing()
    {
        return false;
    }

    public int getEditingIndex()
    {
        return -1;
    }

    public String getEditorActivatorEvent()
    {
        throw new ItsNatException("<select> options can not be graphically edited",this);
    }

    public void setEditorActivatorEvent(String event)
    {
        throw new ItsNatException("<select> options can not be graphically edited",this);
    }

    public boolean isEditingEnabled()
    {
        return false;
    }

    public void setEditingEnabled(boolean value)
    {
        if (value)
            throw new ItsNatException("<select> options can not be graphically edited",this);
    }

    public Node createDefaultNode()
    {
        Document doc = getItsNatDocument().getDocument();
        HTMLSelectElement elem = (HTMLSelectElement)doc.createElementNS(NamespaceUtil.XHTML_NAMESPACE,"select");
        elem.setMultiple(!isCombo());
        return elem;
    }

    public abstract boolean isCombo();

    public void setDefaultDataModel(Object dataModel)
    {
        if (markupDrivenUtil != null)
            markupDrivenUtil.preSetDefaultDataModel(dataModel);

        super.setDefaultDataModel(dataModel);
    }

    public void disposeEffective(boolean updateClient)
    {
        super.disposeEffective(updateClient);

        if (markupDrivenUtil != null)
        {
            markupDrivenUtil.dispose();
            this.markupDrivenUtil = null;
        }
    }

    public boolean isMarkupDriven()
    {
        return markupDrivenUtil != null;
    }

    public void setMarkupDriven(boolean value)
    {
        ItsNatHTMLSelectMarkupDrivenUtil old = markupDrivenUtil;
        this.markupDrivenUtil = ItsNatHTMLSelectMarkupDrivenUtil.setMarkupDriven(this, markupDrivenUtil, value);
        if (markupDrivenUtil != old)
        {
            // Ha cambiado (de markup driven a no markup driven o viceversa)
            // Hay que recrear el UI porque el modo markup driven exige
            // modo slave del UI y si no es modo markup es mejor el modo master (m�s r�pido)
            setDefaultItsNatComponentUI();
        }
    }

    public boolean isEnabled()
    {
        HTMLSelectElement element = getHTMLSelectElement();
        return !element.getDisabled();
    }

    public void setEnabled(boolean b)
    {
        HTMLSelectElement element = getHTMLSelectElement();
        element.setDisabled( ! b );
    }
}
TOP

Related Classes of org.itsnat.impl.comp.list.ItsNatHTMLSelectImpl

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.