layout enum and layout factory