hackedteam/rcs-console

View on GitHub
src/org/un/cava/birdeye/ravis/components/ui/controls/vgraphControls/EdgeRendererSelector.mxml

Summary

Maintainability
Test Coverage
<?xml version="1.0" encoding="utf-8"?>
<!--
*
* The MIT License
*
* Copyright (c) 2008
* United Nations Office at Geneva
* Center for Advanced Visual Analytics
* http://cava.unog.ch
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
* 
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
* 
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
-->
<mx:ComboBox xmlns:mx="http://www.adobe.com/2006/mxml"
    height="20"
    width="100%"
    color="#CCCCCC"
    prompt="Select edge style."
    toolTip="Select the style of line drawn between nodes."
    initialize="initData()"
    change="changeEdgeRenderer()" >
    
    <mx:ArrayCollection id="ervalues">
        <mx:String>Default</mx:String>
        <mx:String>DirectedArrows</mx:String>
        <mx:String>BidirectedArrows</mx:String>
        <mx:String>DirectedBalloons</mx:String>
        <mx:String>Orthogonal</mx:String>
        <mx:String>Flow</mx:String>
        <mx:String>Bezier</mx:String>
        <mx:String>Circular</mx:String>
        <mx:String>Hyperbolic</mx:String>
    </mx:ArrayCollection>
    
    <mx:Script>    
        <![CDATA[
            import mx.utils.ObjectUtil;
            
            import org.un.cava.birdeye.ravis.graphLayout.visual.IVisualGraph;
            import org.un.cava.birdeye.ravis.graphLayout.visual.VisualGraph;
            import org.un.cava.birdeye.ravis.graphLayout.visual.edgeRenderers.BaseEdgeRenderer;
            import org.un.cava.birdeye.ravis.graphLayout.visual.edgeRenderers.CircularEdgeRenderer;
            import org.un.cava.birdeye.ravis.graphLayout.visual.edgeRenderers.DirectedArrowEdgeRenderer;
            import org.un.cava.birdeye.ravis.graphLayout.visual.edgeRenderers.BidirectedArrowEdgeRenderer
            import org.un.cava.birdeye.ravis.graphLayout.visual.edgeRenderers.DirectedBalloonEdgeRenderer;
            import org.un.cava.birdeye.ravis.graphLayout.visual.edgeRenderers.FlowCurveEdgeRenderer;
            import org.un.cava.birdeye.ravis.graphLayout.visual.edgeRenderers.FlowEdgeRenderer;
            import org.un.cava.birdeye.ravis.graphLayout.visual.edgeRenderers.HyperbolicEdgeRenderer;
            import org.un.cava.birdeye.ravis.graphLayout.visual.edgeRenderers.OrthogonalEdgeRenderer;
            import org.un.cava.birdeye.ravis.utils.LogUtil;
            import org.un.cava.birdeye.ravis.utils.events.VGraphEvent;
            
            private static const _LOG:String = "components.ui.controls.vgraphControls.EdgeRendererSelector";
            private var _vgraph:VisualGraph;
            
            /**
             * Provides access to the registered vgraph object.
             * */
            public function set vgraph(v:VisualGraph):void {
                _vgraph = v;
                registerListeners();
            }
            
            
            /**
             * @private
             * */
            public function get vgraph():VisualGraph {
                return _vgraph;
            }
            
            /**
             * When enabling or disabling this component, we also
             * perform some specific tasks.
             * Attention do completely disable interaction
             * there is also the mouseEnabled property.
             * 
             * @inheritDoc
             * */
            override public function set enabled(e:Boolean):void {
                if(e == true) {
                    this.setStyle("color",0x000000);
                    this.alpha=1;
                } else {
                    this.setStyle("color",0xCCCCCC);
                    this.alpha=0.3;
                }
                /* call superclass (ComboBox) */
                super.enabled = e;
            }
            
            /**
             * Set the selected EdgeLabelRenderer.
             * */
            public function changeEdgeRenderer():void {
                
                var er:String;
                var g:IVisualGraph;
                
                if(_vgraph == null) {
                    LogUtil.warn(_LOG, "Cannot change EdgeRenderer, no valid vgraph!");
                    return;
                }
                g = _vgraph;
                
                /* get the currently selected EdgeRenderer */
                er = this.selectedItem as String;
                
                switch(er) {
                case "Default":
                    _vgraph.edgeRendererFactory = new ClassFactory(BaseEdgeRenderer);
                    break;
                case "DirectedArrows":
                    _vgraph.edgeRendererFactory = new ClassFactory(DirectedArrowEdgeRenderer);
                    break;
                case "BidirectedArrows":
                  _vgraph.edgeRendererFactory = new ClassFactory(BidirectedArrowEdgeRenderer);
                  break;
                case "DirectedBalloons":
                    _vgraph.edgeRendererFactory = new ClassFactory(DirectedBalloonEdgeRenderer);
                    break;
                case "Orthogonal":
                    _vgraph.edgeRendererFactory = new ClassFactory(OrthogonalEdgeRenderer);
                    break;
                case "Flow":
                    _vgraph.edgeRendererFactory = new ClassFactory(FlowEdgeRenderer);
                    break;
                case "Bezier":
                    _vgraph.edgeRendererFactory = new ClassFactory(FlowCurveEdgeRenderer);
                    break;
                case "Circular":
                    _vgraph.edgeRendererFactory = new ClassFactory(CircularEdgeRenderer);
                    break;
                case "Hyperbolic":
                    _vgraph.edgeRendererFactory = new ClassFactory(HyperbolicEdgeRenderer);
                    break;
                default:
                    LogUtil.warn(_LOG, "Illegal EdgeRenderer selected:"+er);
                    _vgraph.edgeRendererFactory = new ClassFactory(BaseEdgeRenderer);
                    break;
                }
                _vgraph.refresh();
            }
            
            /**
             * Refresh the selector with the current EdgeLabelRenderer.
             * */
            public function refreshSelector(e:VGraphEvent = null):void {
                
                var erClassName:String;
                
                if(_vgraph == null) {
                    LogUtil.warn(_LOG, "Cannot refresh EdgeRenderer, no valid vgraph!");
                    return;
                }
                
                erClassName = ObjectUtil.getClassInfo(_vgraph.edgeRendererFactory.newInstance()).name;
                erClassName = erClassName.replace(/org.un.cava.birdeye.ravis.graphLayout.visual.edgeRenderers::/,"");
                
                switch(erClassName) {
                case "BaseEdgeRenderer":
                    this.selectedIndex = 0;
                    break;
                case "DirectedArrowEdgeRenderer":
                    this.selectedIndex = 1;
                    break;
                case "BidirectedArrowEdgeRenderer":
                  this.selectedIndex = 2;
                  break;
                case "DirectedBalloonEdgeRenderer":
                    this.selectedIndex = 3;
                    break;
                case "OrthogonalEdgeRenderer":
                    this.selectedIndex = 4;
                    break;
                case "FlowEdgeRenderer":
                    this.selectedIndex = 5;
                    break;
                case "FlowCurveEdgeRenderer":
                    this.selectedIndex = 6;
                    break;
                case "CircularEdgeRenderer":
                    this.selectedIndex = 7;
                    break;
                case "HyperbolicEdgeRenderer":
                    this.selectedIndex = 8;
                    break;
                default:
                    LogUtil.warn(_LOG, "Illegal EdgeRenderer class received:"+erClassName);
                    break;
                }
            }
            
            /**
             * initialise the selection data.
             * It is a bit unclear, why this seems to be necessary.
             * */
            private function initData():void {
                this.dataProvider = ervalues;
            }
            
            /**
             * register event listener
             * */
            private function registerListeners():void {
                _vgraph.addEventListener(VGraphEvent.VGRAPH_CHANGED,refreshSelector);
            }
        ]]>
    </mx:Script>
</mx:ComboBox>