1. Features
1.1. Easy to extend
1.1.1. Consider adding no default graphics
1.2. Easy to align
1.2.1. Group together with layouts
1.2.2. Align based on parent size
1.3. Highlight when focused
1.3.1. use mouse over
1.3.2. use controller input
1.4. Easy to localize
1.4.1. Global event bus to notify for changes of language
1.4.1.1. can be expensive because a lot of listeners that are not usually used
1.4.2. Pass through all UI elements and invalidate the TEXT content state
1.4.3. Keep string ID and handle the text manager directly
1.5. Component LifeCycle
1.5.1. Must have at least
1.5.1.1. init()
1.5.1.2. invalidate(tag)
1.5.1.3. isValid(tag)
1.5.1.4. draw()
1.5.1.5. automatic validation after draw
1.5.1.6. dispose()
2. Features Generic
2.1. Testing
2.1.1. Unit Testing
2.1.1.1. FlexUnit
2.1.1.2. Mockolate
2.1.1.3. Automatic UnitTest code generation as in the MSUnit Visual Studio Unit Testing for C#
2.1.2. Integration Testing
2.1.2.1. Visual tests
2.1.2.1.1. BitmapData.compare()
2.1.2.1.2. BitmapData.draw(img, null, null, DIFFERENCE)
2.1.3. Performance testing
2.1.3.1. What happens during heavy usage
2.2. Controller support
2.3. Localization
2.3.1. Chinese
2.3.1.1. big glyph set
2.3.1.2. support runtime switching font
2.3.2. Arabic
2.3.2.1. right-to-left support
2.4. Strong versioning
2.4.1. GIT versioning
2.4.2. Periodic releases
2.5. Plugin support for main IDE
2.5.1. Code autogeneration
2.5.1.1. Templates
2.5.1.2. Snippets
2.5.1.3. AutoGenerated classes ready to be extended
2.6. STRICT Typed
2.7. Tweening / Animation
2.7.1. Chaining
2.7.2. Time displacement
2.8. Styling
2.8.1. when applying styling, the method might return a styleObject that can be used again and again to easily chain styling properties - like jquery chains
2.8.2. Templates should be easy to assign and create
2.8.3. Or it can be fixed easily by way of cloning with CopyProperties and describe() from AbstractComponent class
3. Components
3.1. AbstractComponent
3.1.1. Get's registered to ComponentsManager
3.1.1.1. Handles Component LifeCycle
3.1.1.2. Automatic disposal and deregistration?
3.1.2. Generic Properties
3.1.2.1. actuallWidth and height
3.1.2.2. padding for elements inside a given container
3.1.2.3. margins same as CSS - outside of element
3.1.2.4. spacing - for lists or groups
3.1.3. describe - to expose properties
3.2. Label
3.3. Button
3.3.1. Toggle
3.3.1.1. Switch - ios style between 2 states
3.3.2. Radio
3.3.3. Check
3.3.4. ExtendedButtons
3.3.4.1. TextButton
3.3.4.2. IconTextButton
3.4. List
3.4.1. Selectable List
3.4.2. GeneratorList from data
3.5. Screen
3.6. LayoutManager ?
3.6.1. registers Transformable elements and repositions them and resizes them inside their parent (which can be a screen)
3.7. Image
3.7.1. NineSlice
3.7.2. ThreeSlice
3.8. Helpers
3.8.1. Random
3.8.1.1. int range - divisible by, (100, 0, 1)
3.8.1.1.1. divisble by
3.8.1.2. float range
3.8.1.2.1. consider adding max value first
3.8.1.3. from array
3.8.1.4. SORT random for array function
3.8.1.5. seeded ?
3.8.2. Iterators
3.8.2.1. over array
3.8.2.2. over range of values
3.8.2.2.1. Range.intValues(0,1) - iterator list filled with values
3.8.3. Colections
3.8.3.1. Stack
3.8.3.2. Queue
3.8.3.3. CollectionUnsorted
3.8.3.3.1. array with quick pop/push methods
3.8.3.4. LinkedList
3.8.4. ObjectPools
3.8.5. CopyObject
3.8.5.1. CopyProperties via describe() methods from components
3.8.5.2. DeepCopy with byteArray write Object
3.8.6. Register elements to be handled directly from CPP
3.8.7. Chaining Tweens
4. Tools
4.1. TextManager
4.1.1. Online editor
4.1.2. Easy export
4.1.3. Easy integration in build process
4.2. DLC Manager for Flash Assets
4.3. Template / Layout generator
4.3.1. Maybe in the form of a plugin
5. Ask about features and workflows
5.1. Vector drawing vs using images vs caching vectors as images (draw at runtime)
5.1.1. Is there support for all basic graphics API?
5.2. Dictionary
5.3. Sending data back and forth Flash-CPP
5.4. How costly is instantiation of new components - makes sense to use Object pooling ?
5.5. Can we use Vector or we need only Array?
5.6. How is controller support handled
5.7. How is localization handled
5.8. How are tutorials handled
5.8.1. How was the awesome circular mask done?
5.9. Are SWCs used?
5.10. How is code completion handled
5.11. How does a swf reaches the build
5.11.1. Does it have additional compile flags
5.11.2. Is it different from the basic swf used when testing ?
5.11.3. Java+Ant or Python+Batch for autogeneration?
5.12. Do we need documentation and code sharing support ?
5.13. Logging at runtime
5.14. Debugging support
5.14.1. Break points
5.14.2. Draw calls
5.14.3. Atlas information
5.15. How are multiple resolution packages handled: HD vs SD graphics.
5.16. How are DLCs handled
5.17. What kind of handling do we need for animations? Speed changing? Tick based?
6. Research
6.1. Lazy loading - don't instantiate unless needed
6.2. How do you handle IconTextButton and TextButton architecture correctly
6.2.1. Decorator Pattern
6.2.2. Just normal extending
6.2.3. Some way of composition using a layout