I have been thinking about that and I have some ideas. But I would like to understand how often that use case actually comes up. I know CSS supports it, but in practice (in Pivot specifically) I wonder how important it is?
On Jul 2, 2010, at 7:30 PM, Michael Allman wrote: > Hi Greg, > > How would one specify multiple named styles for a component element? Like > > <PushButton styles="redButton bigFont"/> > > Cheers, > > Michael > > On Fri, 2 Jul 2010, Greg Brown wrote: > >> Hi all, >> >> I have been thinking about this and I think I have a fairly elegant solution >> that will also significantly extend the capabilities of BXMLSerializer. I am >> thinking of extending the <bxml:include> tag to support loading of arbitrary >> content. Currently, it only supports includes of other BXML files, but there >> is no reason that it couldn't be modified to include other types, such as >> JSON, XML, or even images. All we'd have to do is determine an appropriate >> serializer to use for the include - this could be inferred based on file >> extension or could be specified explicitly via a "mimeType" attribute to the >> include tag. The MIME type-to-serializer mappings could be configurable such >> that an include could literally be used to load any type of object. >> >> One application of such an extension would be styling. <bxml:include> could >> be used to load a "stylesheet" - a JSON file containing a "map of maps". The >> format of this file would be identical to the format I had been considering >> for the "named styles" approach - each key/value pair in the file would >> essentially represent a "style class". For example, the following JSON file >> would define a "redButton" class: >> >> { redButton: { >> backgroundColor: "#aa0000", >> color: "#ffffff" >> } >> } >> >> In a BXML document, this file could be included as follows: >> >> <bxml:include bxml:id="styles" src="styles.json"/> >> >> The "redButton" style could then be applied to a button as follows: >> >> <PushButton styles="$styles.redButton"/> >> >> Unlike the previous solution I proposed, this approach would require no >> changes to the Component or Container classes whatsoever. With the exception >> of extending the <bxml:include> tag, it relies entirely on existing >> functionality (and existing BXML syntax, so developers will already be >> familiar with it). >> >> There are obviously other applications as well. Some simple examples: >> >> <TableView> >> <tableData> >> <bxml:include src="table_data.json"/> >> </tableData> >> </TableView> >> >> <TreeView> >> <treeData> >> <bxml:include src="tree_data.xml"/> >> </treeData> >> </TreeView> >> >> One challenge might be how to specify the MIME/serializer mapping for an >> include (we won't want BXMLSerializer to include all possible mappings by >> default). This could be inherited from the parent serializer, but I think >> that a BXML syntax for specifying it in markup is probably a good idea. >> >> Anyway, I think this would be an extremely flexible and useful addition to >> the serializer, and I think it also handles the styling case pretty well. >> Let me know what you think. >> >> G >> >> >> On Jul 2, 2010, at 1:34 PM, Greg Brown wrote: >> >>> FYI, named styles are turning out to be a lot more challenging than I >>> expected. The solution I proposed the other day doesn't work - elements in >>> BXML aren't added to the parent element until the end tag is processed. So, >>> given the following structure: >>> >>> <Window styleClasses="{foo:{...}}"> >>> <BoxPane> >>> <PushButton styleClass="foo"/> >>> </BoxPane> >>> </Window> >>> >>> when the styleClass attribute of the PushButton is processed, the BoxPane >>> hasn't yet been added to the Window, so the "foo" style class name resolves >>> to null. :-( >>> >>> I'll keep thinking about it, though. Suggestions are welcome. >>> >>> Thanks, >>> G >>> >>