@startuml

  abstract class SliceTrackerPlugin {
    + {abstract} LogicClass
  }

  class SliceTrackerLogicBase
  SliceTrackerLogicBase <.. SliceTrackerPlugin::LogicClass: uses instance of


package "SliceTracker Plugins" #DDDDDD {

  package "Training Management" #FDADDF {

    class SliceTrackerTrainingPlugin {
    }

    SliceTrackerPlugin <|-- SliceTrackerTrainingPlugin
  }

  package "Registration Results Management" #FDADDF {

    class SliceTrackerRegistrationResultsPlugin {
      + LogicClass
      + onLayoutChanged()
    }

    class SliceTrackerRegistrationResultsLogic

    SliceTrackerPlugin <|-- SliceTrackerRegistrationResultsPlugin
    SliceTrackerRegistrationResultsPlugin::LogicClass ..> SliceTrackerRegistrationResultsLogic: uses

  }

  package "Target Management" #FDDDDD {

    class SliceTrackerTargetTablePlugin {
      + LogicClass
    }

    class SliceTrackerTargetTableLogic {
    }

    SliceTrackerPlugin <|-- SliceTrackerTargetTablePlugin
    SliceTrackerTargetTablePlugin::LogicClass ..> SliceTrackerTargetTableLogic: uses

  }

  package "Case Management" #DDF0DD {

    class SliceTrackerCaseManagerPlugin {
      + LogicClass
    }

    class SliceTrackerCaseManagerLogic {
    }

    SliceTrackerPlugin <|-- SliceTrackerCaseManagerPlugin
    SliceTrackerCaseManagerPlugin::LogicClass ..> SliceTrackerCaseManagerLogic: uses
  }

  package "Future Plugins" #DDFFDD {
    class SliceTrackerNeedleSegmentationPlugin {
      + LogicClass
    }

    SliceTrackerPlugin <|-- SliceTrackerNeedleSegmentationPlugin
    SliceTrackerNeedleSegmentationPlugin::LogicClass ..> SliceTrackerNeedleSegmentationLogic: uses
  }

}

SliceTrackerWidgetBase <|-- SliceTrackerPlugin


@enduml