What I've come up with as a solution is that I decided to use the 
IStyleManager2 of the Main RSLs loader SWF which has all the class selectors 
for the skins.

I've changed the code for the [ExtensionPoint] class as follow:

public function instanciateExtensionUnits():void{
                        if (container){
                                for each(var extensionUnit:ExtensionUnit in 
extensionUnits){
                                        if (!extensionUnit.instance){
                                                var uiElement:UIComponent = 
extensionUnit.newInstance();
                                                var className:String = 
getQualifiedClassName(extensionUnit.infos.type.clazz).replace("::", ".");
                                                var 
skinStyle:CSSStyleDeclaration = 
styleManager.getMergedStyleDeclaration(className);
                                                if (!skinStyle){
                                                        className = 
getQualifiedSuperclassName(extensionUnit.infos.type.clazz).replace("::", ".");
                                                        skinStyle = 
styleManager.getMergedStyleDeclaration(className);  
                                                }
                                                if (skinStyle){
                                                        if 
(uiElement.getStyle("skinClass") == null){
                                                                var 
inheritedStyleClass:Class = skinStyle.getStyle("skinClass") as Class;           
                                            
                                                                
uiElement.setStyle("skinClass", inheritedStyleClass);
                                                        }
                                                        if (container is 
IVisualElementContainer)
                                                                
IVisualElementContainer(container).addElement(uiElement);
                                                        else
                                                                
container.addChild(uiElement);
                                                }
                                        }
                                }
                        }
                }

So I'm handling manually the skin of the first object and it is shown as it is 
supposed to but the second problem that I have is the Popup that is created by 
that button is missing it own skinClass and the background of the 
[TitleWindows] is black. How can I make it that everything is handled 
automatically?

Screenshot link : https://pasteboard.co/ICLWnzG.png

19.10.2019, 20:42, "Ramazan Ergüder Bekrek" <e.bek...@yandex.com>:
> Greetings to all again!
>
> I'm developing something similar to Eclipse Extension Points with Annotations 
> [ExtensionPoint] and [Extension] for dynamic
> sparks and mx control injection at runtime. The whole thing is running inside 
> of an OSGi framework built with AS3 and the problem that I'm having is 
> concerning
> the keep-all-type-selectors=true which is not working. Let me explain the 
> structure.
>
> The UI is loading different Modules as the container for "Toolbar", 
> "Timeline", "PropertiesWindow", which are all independant <s:Module> handled 
> by the OSGi runtime.
> The runtime creates for each bundle their own ApplicationDomain.
>
> I created another bundle which is an Actionscript project which check at 
> runtime in each bundles in the OSGi framework if there is any class 
> containing the
> [ExtensionPoint] and [Extension] metadata. If it finds something then they 
> are gathered and built in Parent/Children relationship.
>
> This [ExtensionPointsManager] (in its own ApplicationDomain) is also scouting 
> the Stage.ADDED event to check when ever a UIComponent which has 
> [ExtensionPoint] is added.
>
> [ExtensionPointManager class]
>
> private function scoutAllExtensionUnitsByBundle(bundle:IBundle):void{
>
>                         var applicationDomain:ApplicationDomain = 
> ApplicationDomain(Object(bundle).applicationDomain);
>                         var domainClasses:Vector.<String> = 
> applicationDomain.getQualifiedDefinitionNames();
>                         for each(var className:String in domainClasses){
>                                 try{
>                                         var infosExtensionUnit:ExtensionInfos 
> = infosExtensionUnitFromClassName(className);
>                                         var extensionPoint:ExtensionPoint = 
> getExtensionPointByName(infosExtensionUnit.name);
>                                         if (extensionPoint && 
> infosExtensionUnit)
>                                                 var parented:Boolean = 
> addExtensionUnitFromClass(infosExtensionUnit.type.clazz);
>                                         if (!parented)
>                                                 
> unparentedExtensionUnits.push(new ExtensionUnit(null, infosExtensionUnit));
>                                 }catch(e:Error){
>                                         trace(e.message);
>                                 }
>                         }
>                         try{
>                                 extensionPoint.instanciateExtensionUnits();
>                         }catch(e:Error){
>                         }
>                 }
>
> [ExtensionPoint class]
>
> public function instanciateExtensionUnits():void{
>                         if (container){
>                                 for each(var extensionUnit:ExtensionUnit in 
> extensionUnits){
>                                         if (!extensionUnit.instance){
>                                                 var uiElement:UIComponent = 
> extensionUnit.newInstance();
>                                                 if (container is 
> IVisualElementContainer)
>                                                         
> IVisualElementContainer(container).addElement(uiElement);
>                                                 else
>                                                         
> container.addChild(uiElement);
>                                         }
>                                 }
>                         }
>                 }
>
> My problem is that I have a bundle which contains an <s:Button> (contains 
> [Extension(target="toolbar")] metadata)with an icons that I would like to be 
> automatically inserted in the "Toolbar" <s:Module> which has the 
> [ExtensionPoint(name="toolbar")] metadata. That button in its own code would 
> create a PopupManager.createPopup when it is clicked. Right now when that 
> button doesn't have the (skinClass="spark.skins.spark.ButtonSkin") property 
> it throws an error as follow:
>
> Error: Skin for 
> instance1.instance2.instance18.instance19.instance20.rsls_loader0.ApplicationSkin2.containerGrp.contentGroup.SharedUIService6.instance167.UIServiceProxy8.MultiversesMainUI7.SkinnableContainerSkin9.contentGroup.toolbar.instance234.UIServiceProxy59.MultiversesMenuRoot58.SkinnableContainerSkin60.contentGroup.PluginsSettingsButton74
>  cannot be found.
>
> So the "Toolbar" <s:Module> I've compiled with keep-all-type-selectors=true 
> seems to not recognize the (SkinClasses).
>
> Right now I don't understand why 
> IVisualElementContainer(container).addElement(uiElement) always throws this 
> big line of exception...
>
> When I add the (skinClass="spark.skins.spark.ButtonSkin") to that button and 
> recompile then its get added in the "toolbar" but another problem happens 
> when I click the button:
>
> Error: Skin for 
> instance1.instance2.instance18.instance19.instance20.PluginsSettingsView92.ResizableTitleWindowSkin93._ResizableTitleWindowSkin_Group1.contents.contentGroup.parentDivider.pluginsCategories
>  cannot be found.
>
> How do I fix this problem?
>
> Best regards
>
> Ergü

Reply via email to