@startuml
package "layout" #DDDDDD {
  class LayoutDefault
}

package "controltab" #DDDDDD {
  TabDefault <|-- TabSettings
}

package "m2com" #DDDDDD {
  class ControllerCell
}

package "widget" #DDDDDD {
  class QMessageBoxAsync
}

MainWindow *-- Model
MainWindow *-- ControlTabs
MainWindow *-- TabSettings
MainWindow "1" *-- "3" LayoutDefault
MainWindow *-- SignalMessage
MainWindow ..> LogWindowHandler
MainWindow ..> QMessageBoxAsync

Model *-- FaultManager
Model *-- UtilityMonitor
Model *-- SignalControl : emit()
Model *-- SignalPowerSystem : emit()
Model *-- SignalStatus : emit()
Model *-- SignalConfig : emit()
Model *-- SignalScript : emit()
Model ..> Config
Model *-- ControllerCell

FaultManager *-- SignalError : emit()
FaultManager *-- SignalLimitSwitch : emit()

UtilityMonitor *-- SignalUtility : emit()
UtilityMonitor *-- SignalDetailedForce : emit()
UtilityMonitor *-- SignalPosition : emit()

UtilityMonitor *-- ActuatorForceAxial
UtilityMonitor *-- ActuatorForceTangent
UtilityMonitor *-- ForceErrorTangent

UtilityMonitor *-- SignalNetForceMoment : emit()

LayoutDefault *-- Model
LayoutDefault --> SignalControl : connect()

LogWindowHandler *-- SignalMessage : emit()

ControlTabs ..> Model
ControlTabs "1" *-- "12" TabDefault

TabDefault *-- Model
@enduml
