[[BackLinksMenu]] [[TicketQuery(summary=BASE_SKINS_COMMONS_R0, format=table, col=summary|owner|status|type|component|priority|effort|importance, rows=description|analysis_owners|analysis_reviewers|analysis_score|design_owners|design_reviewers|design_score|implementation_owners|implementation_reviewers|implementation_score|test_owners|test_reviewers|test_score|)]] = Analysis = == Overview == Skins define the look and interactions of a visual element. Properties such as size, location, color, keyboard shortcuts and messages to send are all parts of skins. In this task, because Milo has done a lot of the base work, document and write a short tutorial on what is needed to use skins. Include how to code default values for the Internal Skin, as well as how the skin hierarchy works. == Task requirements == ^(List the necessary requirements that the task must fulfill.)^ == Task result == * Document the current skins implementation * Write a short tutorial on how someone uses skins in their visual elements * Document the ENUMs used to define internal skin parts * Document skin naming conventions == Implementation idea == * Watch the discussion 2009-02-17-Design Discussion (Part 1).mpg, 2009-02-17-Design Discussion (Part 2).mpg, 2009-02-17-Design Discussion (Part 3).mpg for more skin details * org.sophie2.base.skins is milo's current implementation * SkinPart defines a piece of a skin. ElementID refers to a class. propID refers to the property in the element and value refers to the property value. * Skins use properties, so changing skin values at runtime should reflect the change in Sophie. * Annotations are used to define the internalSkin values, @SkinPartDef * See class SampleView in /sophie2/trunk/sophie2-platform/modules/org.sophie2.base.visual/src/test/java/org/sophie2/base/visual/interaction/InteractionDemoTest.java * See /sophie2-platform/modules/org.sophie2.base.bound/src/main/java/org/sophie2/base/bound/BaseBoundControl.java for a @SkinPartDef example '''Persistence''' * Skins need to be able to be written to files for the sake of persistence. Skins with media (images) should be stored in an archive. '''Naming Conventions''' * Skins are hierarchical, starting with the InternalSkin, While there is no Sophie restricted naming convention, we should use the following naming convention for our skins: * The base skin file is the name of the skin, for example, "CoolBlueSkin" * Any child skins that define language specific parts of a skin should be named , for example, CoolBlueSkinEN or CoolBlueSkinBG == Related == These links added so that future tasks can refer back to this task. * [wiki:BASE_SKINS_POINT_R0] * [wiki:BASE_SKINS_DEFAULT_SKIN_R0] * [wiki:BASE_SKINS_HACKERS_SKIN_R0] == How to demo == I think it would be great if you could show how a skin is applied, how a value is created and changed. The video discussions cover the big picture, but never gave a concrete example on how to use the skins. = Design = ^(Describe your design here.)^ = Implementation = ^(Describe and link the implementation results here (from the wiki or the repository).)^ = Testing = ^(Place the testing results here.)^ = Comments = ^(Write comments for this or later revisions here.)