Package org.itsnat.feashow

Source Code of org.itsnat.feashow.FeatureShowcaseDocument

/*
* This file is not part of the ItsNat framework.
*
* Original source code use and closed source derivatives are authorized
* to third parties with no restriction or fee.
* The original source code is owned by the author.
*
* This program is distributed AS IS 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.
*
* (C) Innowhere Software a service of Jose Maria Arranz Santamaria, Spanish citizen.
*/

package org.itsnat.feashow;

import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.swing.DefaultComboBoxModel;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import org.itsnat.comp.ItsNatComponentManager;
import org.itsnat.comp.button.toggle.ItsNatHTMLInputCheckBox;
import org.itsnat.comp.inc.ItsNatFreeInclude;
import org.itsnat.comp.list.ItsNatFreeComboBox;
import org.itsnat.comp.list.ItsNatListUI;
import org.itsnat.comp.tree.ItsNatFreeTree;
import org.itsnat.core.ItsNatServletRequest;
import org.itsnat.core.NameValue;
import org.itsnat.core.domutil.ItsNatTreeWalker;
import org.itsnat.core.event.ItsNatEvent;
import org.itsnat.core.event.ItsNatEventListenerChain;
import org.itsnat.core.html.ItsNatHTMLDocument;
import org.itsnat.feashow.features.core.misc.remctrl.RemoteControlTimerMgrGlobalEventListener;
import org.itsnat.feashow.features.core.otherns.EventListenerSerial;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.events.Event;
import org.w3c.dom.events.EventListener;
import org.w3c.dom.html.HTMLAnchorElement;

public class FeatureShowcaseDocument implements TreeSelectionListener,ItemListener
{
    protected ItsNatHTMLDocument itsNatDoc;
    protected String requestURL;
    protected Element titleElement;
    protected Element featureTitleElement;
    protected ItsNatFreeTree tree;
    protected ItsNatHTMLInputCheckBox joystickModeCheck;
    protected ItsNatFreeInclude include;
    protected ItsNatFreeComboBox tabsCombo;
    protected Element exampleTab;
    protected Element docTab;
    protected Element codeTab;
    protected HTMLAnchorElement exampleTabLink;
    protected HTMLAnchorElement docTabLink;
    protected HTMLAnchorElement codeTabLink;
    protected FeatureTreeNode selectedExample;
    protected MainTreeDecorator mainTreeDecorator;
    protected Map<String,FeatureTreeNode> features = new HashMap<String,FeatureTreeNode>();
    protected BrowserAdaptor browserAdaptor;
    protected boolean joystickModePreferred;

    public FeatureShowcaseDocument(ItsNatServletRequest request)
    {
        this.itsNatDoc = (ItsNatHTMLDocument)request.getItsNatDocument();
        this.joystickModePreferred = BrowserUtil.isJoystickModePreferred(request);
        this.requestURL = ((HttpServletRequest)request.getServletRequest()).getRequestURL().toString();
       
        EventListener global = new EventListenerSerial()
        {
            public void handleEvent(Event evt)
            {
                ItsNatEvent itsNatEvt = (ItsNatEvent)evt;
                ItsNatEventListenerChain chain = itsNatEvt.getItsNatEventListenerChain();
                try
                {
                    chain.continueChain();
                }
                catch(Exception ex)
                {
                    ex.printStackTrace();

                    itsNatDoc.addCodeToSend("var res = confirm('Unexpected Error! Reload?');");
                    itsNatDoc.addCodeToSend("if (res) window.location.reload(true);");
                   
                    itsNatDoc.setInvalid();
                    chain.stop();
                }
           }
        };
        itsNatDoc.addEventListener(global); // Comment this sentence to show errors in technical form

        ItsNatComponentManager compMgr = itsNatDoc.getItsNatComponentManager();
        compMgr.setSelectionOnComponentsUsesKeyboard(!BrowserUtil.isMobileBrowser(request));

        Document doc = itsNatDoc.getDocument();

        this.titleElement = doc.getElementById("titleId");
        this.featureTitleElement = doc.getElementById("featureTitleId");

        this.joystickModeCheck = (ItsNatHTMLInputCheckBox)compMgr.createItsNatComponentById("mainTreeJoystickModeId");
        joystickModeCheck.setSelected(joystickModePreferred);
        joystickModeCheck.getToggleButtonModel().addItemListener(this);

        Element tabsParent = doc.getElementById("tabsParentId");
        this.tabsCombo = compMgr.createItsNatFreeComboBox(tabsParent, null, null);
        tabsCombo.setJoystickMode(joystickModeCheck.isSelected());
        DefaultComboBoxModel tabsModel = (DefaultComboBoxModel)tabsCombo.getComboBoxModel();
        tabsModel.addElement(new NameValue("Example ",new Integer(FeatureTreeNode.EXAMPLE_PANEL)));
        tabsModel.addElement(new NameValue("Source Code ",new Integer(FeatureTreeNode.CODE_PANEL)));
        tabsModel.addElement(new NameValue("Explanation ",new Integer(FeatureTreeNode.DOC_PANEL)));

        ItsNatListUI tabsComboUI = tabsCombo.getItsNatListUI();

        this.exampleTab = tabsComboUI.getElementAt(0);
        this.codeTab = tabsComboUI.getElementAt(1);
        this.docTab = tabsComboUI.getElementAt(2);

        this.exampleTabLink = (HTMLAnchorElement)ItsNatTreeWalker.getFirstChildElement(exampleTab);
        this.codeTabLink = (HTMLAnchorElement)ItsNatTreeWalker.getFirstChildElement(codeTab);
        this.docTabLink = (HTMLAnchorElement)ItsNatTreeWalker.getFirstChildElement(docTab);

        Element treeElem = doc.getElementById("examplesTreeId");
        this.tree = compMgr.createItsNatFreeTree(treeElem,null);
        tree.setJoystickMode(joystickModeCheck.isSelected());

        this.include = compMgr.createItsNatFreeInclude(doc.getElementById("featureBoxId"),null);

        buildMainTree();

        SelectFeatureFromURL.selectFeatureNode(this,request);

        itsNatDoc.addEventListener(new RemoteControlTimerMgrGlobalEventListener(itsNatDoc));
    }

    public void buildMainTree()
    {
        this.mainTreeDecorator = new MainTreeDecorator(tree);
        mainTreeDecorator.bind();

        tree.setItsNatTreeCellRenderer(new MainTreeRenderer(tree.getItsNatTreeCellRenderer()));

        tree.setItsNatTreeCellEditor(null); // to avoid edition

        TreeSelectionModel selModel = tree.getTreeSelectionModel();
        selModel.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
        selModel.addTreeSelectionListener(this);

        FeatureTreeBuilder treeBuilder = new FeatureTreeBuilder(this);
        FeatureTreeNode rootNode = treeBuilder.buildFeatureTreeModel();
        treeBuilder.buildSwingTree(rootNode);
    }

    public String getRequestURLOfDocument()
    {
        return requestURL;
    }

    public boolean isJoystickModePreferred()
    {
        return joystickModePreferred;
    }

    public ItsNatHTMLDocument getItsNatHTMLDocument()
    {
        return itsNatDoc;
    }

    public ItsNatFreeComboBox getTabsComboBox()
    {
        return tabsCombo;
    }

    public Map<String,FeatureTreeNode> getFeaturesMap()
    {
        return features;
    }

    public Element getFeatureBoxElement()
    {
        return include.getElement();
    }

    public ItsNatFreeTree getItsNatFreeTree()
    {
        return tree;
    }

    public Element getTitleElement()
    {
        return titleElement;
    }

    public Element getFeatureTitleElement()
    {
        return featureTitleElement;
    }

    public Element getExampleTabElement()
    {
        return exampleTab;
    }

    public Element getDocTabElement()
    {
        return docTab;
    }

    public Element getCodeTabElement()
    {
        return codeTab;
    }

    public HTMLAnchorElement getExampleTabPermalinkElement()
    {
        return exampleTabLink;
    }

    public HTMLAnchorElement getDocTabPermalinkElement()
    {
        return docTabLink;
    }

    public HTMLAnchorElement getCodeTabPermalinkElement()
    {
        return codeTabLink;
    }

    public ItsNatFreeInclude getItsNatFreeInclude()
    {
        return include;
    }

    public DefaultMutableTreeNode getDefaultMutableTreeNode(String featureName)
    {
        FeatureTreeNode feature = features.get(featureName);
        if (feature == null)
            return null;
        return feature.getDefaultMutableTreeNode();
    }

    public BrowserAdaptor getBrowserAdaptor()
    {
        return browserAdaptor;
    }

    public ItsNatHTMLInputCheckBox getJoystickModeCheckBox()
    {
        return joystickModeCheck;
    }

    public void valueChanged(TreeSelectionEvent e)
    {
//        TreeSelectionModel selModel = (TreeSelectionModel)e.getSource();

        TreePath[] paths = e.getPaths();

        DefaultMutableTreeNode dataNode = (DefaultMutableTreeNode)paths[0].getLastPathComponent();
        FeatureTreeNode example = (FeatureTreeNode)dataNode.getUserObject();

        if (selectedExample == example)
            return;
        if (selectedExample != null)
            selectedExample.exitFeature();

        this.selectedExample = example;

        selectedExample.selectFeature();
    }

    public void itemStateChanged(ItemEvent e)
    {
        boolean selected = e.getStateChange() == ItemEvent.SELECTED;
        tree.setJoystickMode(selected);
        tabsCombo.setJoystickMode(selected);
    }
}
TOP

Related Classes of org.itsnat.feashow.FeatureShowcaseDocument

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.