Flex Builder M XML Преобразование файлов в Haxe - PullRequest
0 голосов
/ 27 января 2020

У меня очень большой проект Flex Builder, который мне нужно перенести на Haxe. Все наши файлы ActionScript конвертируются с использованием as3hx. Я читал о HaxeUI, FeathersUI и NME. Делает ли какая-либо из этих опций простой перенос файлов M XML и не является ли их полная перезапись? Важно отметить, что большинство моих файлов M XML содержат много CDATA.

<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"
         bottom="0"
         top="0"
         left="0" 
         right="0"
         implements="com.dstawd.modeler.IDiagramInfoComponent"
         creationComplete="onCreationComplete()">

    <mx:Metadata>
        [ResourceBundle("Modeler")]
        [ResourceBundle("ServiceModeler")]
    </mx:Metadata>

    <mx:Script>
        <![CDATA[

            import com.dstawd.modeler.Diagram;
            import com.dstawd.modeler.assets.Icons;
            import com.dstawd.modeler.component.shape.ShapeUIComponent;
            import com.dstawd.modeler.controller.Controller;
            import com.dstawd.modeler.controller.ValidationErrorMap;
            import com.dstawd.modeler.events.ValidateEvent;
            import com.dstawd.modeler.managers.WorkspaceManager;
//            import com.dstawd.modeler.service.component.shape.Loop;
//            import com.dstawd.modeler.service.LoopDiagram;

            import mx.collections.ArrayCollection;
            import mx.core.Application;

            [Bindable] private var _diagram:Diagram;
            [Bindable] private var _errors:ArrayCollection = new ArrayCollection();

            private function onCreationComplete():void
            {
                validateButton.setStyle("skin", null);
            }

            private function refreshValidations():void
            {
                var application:IModeler = Application.application as IModeler;
                var controller:Controller = application.controller;
                controller.validate();
            }

            public function get diagram():Diagram
            {
                return _diagram;
            }

            public function set diagram(value:Diagram):void
            {
                _diagram = value;
            }

            public function get errors():ArrayCollection
            {
                return _errors;
            }

            public function set errors( errs:ArrayCollection ):void
            {
                _errors = errs || new ArrayCollection();
            }

            private function doClickAsItem( item:ValidationErrorMap ):void
            {
                if ( summary.selectedIndex < summary.maxVerticalScrollPosition )
                {
                    summary.verticalScrollPosition = summary.selectedIndex;
                }

                if (item.component is ShapeUIComponent)
                {
                    diagram.select(item.component as ShapeUIComponent);
                }
            }

            protected function onDoubleClick(event:MouseEvent):void
            {
                var item:ValidationErrorMap = summary.selectedItem as ValidationErrorMap; 
                if (item && item.component)
                {
//                    selectParent( item );
                    doClickAsItem( item );
                }
            }
]]>
    </mx:Script>
    <mx:HBox height="20" 
             width="100%" 
             verticalAlign="middle" 
             paddingRight="5">
        <mx:Label text="{resourceManager.getString('Modeler', 'validPropPage_lbl_validResults')}" 
                  fontWeight="bold"/>
        <mx:Spacer width="100%"/>
        <mx:Image source="{Icons.Refresh}" 
                  buttonMode="true" 
                  toolTip="{resourceManager.getString('ServiceModeler', 'toolTip_refreshValidations')}" 
                  id="validateButton" 
                  height="17" 
                  width="17" 
                  click="refreshValidations()" 
                  mouseDownEffect="Glow"/>
    </mx:HBox>
    <mx:DataGrid id="summary" 
                 width="100%" 
                 height="100%"
                 verticalScrollPolicy="on" 
                 wordWrap="false"
                 paddingBottom="0" 
                 dataProvider="{_errors}"
                 doubleClickEnabled="true" 
                 doubleClick="onDoubleClick(event);">
        <mx:columns>
            <mx:DataGridColumn headerText="{resourceManager.getString('Modeler', 'validPropPage_hdr_element')}" 
                               dataField="name" />
            <mx:DataGridColumn headerText="{resourceManager.getString('Modeler', 'validPropPage_hdr_message')}" 
                               dataField="message" 
                               dataTipField="message" 
                               showDataTips="true"/>
        </mx:columns>
    </mx:DataGrid>
</mx:VBox>

1 Ответ

1 голос
/ 29 января 2020

Я обнаружил, что есть компилятор m xml для перьев, в частности см .: https://github.com/BowlerHatLLC/feathers-sdk/tree/master/modules/compiler/src/java/flex2/compiler/mxml Haxe может генерировать внешние значения для Java библиотек.

Порт довольно легко передать Как и в Haxe, у этого CDATA есть только некоторые методы получения и изменения метода установки, аннулируйте значение Void, изменив protect / private / publi c, а затем используя библиотеку инъекций https://github.com/jasononeil/dodrugs. Возможно, вы могли бы создать макрос для синтаксического анализа созданий компонентов xml .... или, может быть, лучше переписать проект с более простым подходом?

...