@startuml package jmri #DDDDDD { interface NewFunction } package jmri.swing #DDDDDD { class NewFunctionPane { NewFunctionPane(NewFunction ..) } note right: This is both a base for\nother classes, and the implementation\nfor generic NewFunctionPane references NewFunction *-- NewFunctionPane : configures } package jmri.implementation #DDDDDD { abstract class AbstractNewFunction NewFunction <|-- AbstractNewFunction class NewFunctionTypeA AbstractNewFunction <|-- NewFunctionTypeA } package jmri.implementation.swing #DDDDDD { class NewFunctionTypeAPane { NewFunctionTypeAPane(NewFunctionTypeA ..) } NewFunctionPane <|-- NewFunctionTypeAPane NewFunctionTypeA *-- NewFunctionTypeAPane : configures } package jmri.jmrit.ToolB #DDDDDD { class NewFunctionTypeB AbstractNewFunction <|-- NewFunctionTypeB } package jmri.jmrit.ToolB.swing #DDDDDD { class NewFunctionTypeBPane { NewFunctionTypeBPane(NewFunctionTypeB ..) } NewFunctionPane <|-- NewFunctionTypeBPane NewFunctionTypeB *-- NewFunctionTypeBPane : configures } @enduml