//——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
//  THIS FILE IS GENERATED BY EASY BINDINGS, DO NOT MODIFY IT
//——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

import Cocoa

//——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
//    ReadOnlyObject_ArtworkFileGenerationParameters
//——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

class ReadOnlyObject_ArtworkFileGenerationParameters : ReadOnlyAbstractObjectProperty <ArtworkFileGenerationParameters> {

  //····················································································································

  internal override func notifyModelDidChangeFrom (oldValue inOldValue : ArtworkFileGenerationParameters?) {
    super.notifyModelDidChangeFrom (oldValue: inOldValue)
  //--- Remove observers from removed objects
    if let oldValue = inOldValue {
      oldValue.drawBoardLimits_property.removeEBObserver (self.drawBoardLimits_property) // Stored property
      oldValue.drawInternalBoardLimits_property.removeEBObserver (self.drawInternalBoardLimits_property) // Stored property
      oldValue.drawComponentNamesTopSide_property.removeEBObserver (self.drawComponentNamesTopSide_property) // Stored property
      oldValue.drawComponentNamesBottomSide_property.removeEBObserver (self.drawComponentNamesBottomSide_property) // Stored property
      oldValue.drawComponentValuesTopSide_property.removeEBObserver (self.drawComponentValuesTopSide_property) // Stored property
      oldValue.drawComponentValuesBottomSide_property.removeEBObserver (self.drawComponentValuesBottomSide_property) // Stored property
      oldValue.drawPackageLegendTopSide_property.removeEBObserver (self.drawPackageLegendTopSide_property) // Stored property
      oldValue.drawPackageLegendBottomSide_property.removeEBObserver (self.drawPackageLegendBottomSide_property) // Stored property
      oldValue.drawPadHolesInPDF_property.removeEBObserver (self.drawPadHolesInPDF_property) // Stored property
      oldValue.drawPadsTopSide_property.removeEBObserver (self.drawPadsTopSide_property) // Stored property
      oldValue.drawPadsBottomSide_property.removeEBObserver (self.drawPadsBottomSide_property) // Stored property
      oldValue.drawTextsLayoutTopSide_property.removeEBObserver (self.drawTextsLayoutTopSide_property) // Stored property
      oldValue.drawTextsLayoutBottomSide_property.removeEBObserver (self.drawTextsLayoutBottomSide_property) // Stored property
      oldValue.drawTextsLegendTopSide_property.removeEBObserver (self.drawTextsLegendTopSide_property) // Stored property
      oldValue.drawTextsLegendBottomSide_property.removeEBObserver (self.drawTextsLegendBottomSide_property) // Stored property
      oldValue.drawTracksTopSide_property.removeEBObserver (self.drawTracksTopSide_property) // Stored property
      oldValue.drawTracksInner1Layer_property.removeEBObserver (self.drawTracksInner1Layer_property) // Stored property
      oldValue.drawTracksInner2Layer_property.removeEBObserver (self.drawTracksInner2Layer_property) // Stored property
      oldValue.drawTracksInner3Layer_property.removeEBObserver (self.drawTracksInner3Layer_property) // Stored property
      oldValue.drawTracksInner4Layer_property.removeEBObserver (self.drawTracksInner4Layer_property) // Stored property
      oldValue.drawTracksBottomSide_property.removeEBObserver (self.drawTracksBottomSide_property) // Stored property
      oldValue.drawTraversingPads_property.removeEBObserver (self.drawTraversingPads_property) // Stored property
      oldValue.drawVias_property.removeEBObserver (self.drawVias_property) // Stored property
      oldValue.fileExtension_property.removeEBObserver (self.fileExtension_property) // Stored property
      oldValue.horizontalMirror_property.removeEBObserver (self.horizontalMirror_property) // Stored property
      oldValue.name_property.removeEBObserver (self.name_property) // Stored property
      oldValue.measurementUnitForPadHoleInPDF_property.removeEBObserver (self.measurementUnitForPadHoleInPDF_property) // Stored property
      oldValue.padHoleDiameterInPDF_property.removeEBObserver (self.padHoleDiameterInPDF_property) // Stored property
      oldValue.hasNoData_property.removeEBObserver (self.hasNoData_property) // Transient property
      oldValue.parameterStatusImage_property.removeEBObserver (self.parameterStatusImage_property) // Transient property
      oldValue.emptyFileExtensionImage_property.removeEBObserver (self.emptyFileExtensionImage_property) // Transient property
    }
  //--- Add observers to added objects
    if let newValue = self.mInternalValue {
      newValue.drawBoardLimits_property.addEBObserver (self.drawBoardLimits_property) // Stored property
      newValue.drawInternalBoardLimits_property.addEBObserver (self.drawInternalBoardLimits_property) // Stored property
      newValue.drawComponentNamesTopSide_property.addEBObserver (self.drawComponentNamesTopSide_property) // Stored property
      newValue.drawComponentNamesBottomSide_property.addEBObserver (self.drawComponentNamesBottomSide_property) // Stored property
      newValue.drawComponentValuesTopSide_property.addEBObserver (self.drawComponentValuesTopSide_property) // Stored property
      newValue.drawComponentValuesBottomSide_property.addEBObserver (self.drawComponentValuesBottomSide_property) // Stored property
      newValue.drawPackageLegendTopSide_property.addEBObserver (self.drawPackageLegendTopSide_property) // Stored property
      newValue.drawPackageLegendBottomSide_property.addEBObserver (self.drawPackageLegendBottomSide_property) // Stored property
      newValue.drawPadHolesInPDF_property.addEBObserver (self.drawPadHolesInPDF_property) // Stored property
      newValue.drawPadsTopSide_property.addEBObserver (self.drawPadsTopSide_property) // Stored property
      newValue.drawPadsBottomSide_property.addEBObserver (self.drawPadsBottomSide_property) // Stored property
      newValue.drawTextsLayoutTopSide_property.addEBObserver (self.drawTextsLayoutTopSide_property) // Stored property
      newValue.drawTextsLayoutBottomSide_property.addEBObserver (self.drawTextsLayoutBottomSide_property) // Stored property
      newValue.drawTextsLegendTopSide_property.addEBObserver (self.drawTextsLegendTopSide_property) // Stored property
      newValue.drawTextsLegendBottomSide_property.addEBObserver (self.drawTextsLegendBottomSide_property) // Stored property
      newValue.drawTracksTopSide_property.addEBObserver (self.drawTracksTopSide_property) // Stored property
      newValue.drawTracksInner1Layer_property.addEBObserver (self.drawTracksInner1Layer_property) // Stored property
      newValue.drawTracksInner2Layer_property.addEBObserver (self.drawTracksInner2Layer_property) // Stored property
      newValue.drawTracksInner3Layer_property.addEBObserver (self.drawTracksInner3Layer_property) // Stored property
      newValue.drawTracksInner4Layer_property.addEBObserver (self.drawTracksInner4Layer_property) // Stored property
      newValue.drawTracksBottomSide_property.addEBObserver (self.drawTracksBottomSide_property) // Stored property
      newValue.drawTraversingPads_property.addEBObserver (self.drawTraversingPads_property) // Stored property
      newValue.drawVias_property.addEBObserver (self.drawVias_property) // Stored property
      newValue.fileExtension_property.addEBObserver (self.fileExtension_property) // Stored property
      newValue.horizontalMirror_property.addEBObserver (self.horizontalMirror_property) // Stored property
      newValue.name_property.addEBObserver (self.name_property) // Stored property
      newValue.measurementUnitForPadHoleInPDF_property.addEBObserver (self.measurementUnitForPadHoleInPDF_property) // Stored property
      newValue.padHoleDiameterInPDF_property.addEBObserver (self.padHoleDiameterInPDF_property) // Stored property
      newValue.hasNoData_property.addEBObserver (self.hasNoData_property) // Transient property
      newValue.parameterStatusImage_property.addEBObserver (self.parameterStatusImage_property) // Transient property
      newValue.emptyFileExtensionImage_property.addEBObserver (self.emptyFileExtensionImage_property) // Transient property
    }
  }

  //····················································································································
  //   Observers of 'drawBoardLimits' stored property
  //····················································································································

  final let drawBoardLimits_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'drawInternalBoardLimits' stored property
  //····················································································································

  final let drawInternalBoardLimits_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'drawComponentNamesTopSide' stored property
  //····················································································································

  final let drawComponentNamesTopSide_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'drawComponentNamesBottomSide' stored property
  //····················································································································

  final let drawComponentNamesBottomSide_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'drawComponentValuesTopSide' stored property
  //····················································································································

  final let drawComponentValuesTopSide_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'drawComponentValuesBottomSide' stored property
  //····················································································································

  final let drawComponentValuesBottomSide_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'drawPackageLegendTopSide' stored property
  //····················································································································

  final let drawPackageLegendTopSide_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'drawPackageLegendBottomSide' stored property
  //····················································································································

  final let drawPackageLegendBottomSide_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'drawPadHolesInPDF' stored property
  //····················································································································

  final let drawPadHolesInPDF_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'drawPadsTopSide' stored property
  //····················································································································

  final let drawPadsTopSide_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'drawPadsBottomSide' stored property
  //····················································································································

  final let drawPadsBottomSide_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'drawTextsLayoutTopSide' stored property
  //····················································································································

  final let drawTextsLayoutTopSide_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'drawTextsLayoutBottomSide' stored property
  //····················································································································

  final let drawTextsLayoutBottomSide_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'drawTextsLegendTopSide' stored property
  //····················································································································

  final let drawTextsLegendTopSide_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'drawTextsLegendBottomSide' stored property
  //····················································································································

  final let drawTextsLegendBottomSide_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'drawTracksTopSide' stored property
  //····················································································································

  final let drawTracksTopSide_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'drawTracksInner1Layer' stored property
  //····················································································································

  final let drawTracksInner1Layer_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'drawTracksInner2Layer' stored property
  //····················································································································

  final let drawTracksInner2Layer_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'drawTracksInner3Layer' stored property
  //····················································································································

  final let drawTracksInner3Layer_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'drawTracksInner4Layer' stored property
  //····················································································································

  final let drawTracksInner4Layer_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'drawTracksBottomSide' stored property
  //····················································································································

  final let drawTracksBottomSide_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'drawTraversingPads' stored property
  //····················································································································

  final let drawTraversingPads_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'drawVias' stored property
  //····················································································································

  final let drawVias_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'fileExtension' stored property
  //····················································································································

  final let fileExtension_property = EBGenericTransientProperty <String?> ()

  //····················································································································
  //   Observers of 'horizontalMirror' stored property
  //····················································································································

  final let horizontalMirror_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'name' stored property
  //····················································································································

  final let name_property = EBGenericTransientProperty <String?> ()

  //····················································································································
  //   Observers of 'measurementUnitForPadHoleInPDF' stored property
  //····················································································································

  final let measurementUnitForPadHoleInPDF_property = EBGenericTransientProperty <Int?> ()

  //····················································································································
  //   Observers of 'padHoleDiameterInPDF' stored property
  //····················································································································

  final let padHoleDiameterInPDF_property = EBGenericTransientProperty <Int?> ()

  //····················································································································
  //   Observers of 'hasNoData' transient property
  //····················································································································

  final let hasNoData_property = EBGenericTransientProperty <Bool?> ()

  //····················································································································
  //   Observers of 'parameterStatusImage' transient property
  //····················································································································

  final let parameterStatusImage_property = EBGenericTransientProperty <NSImage?> ()

  //····················································································································
  //   Observers of 'emptyFileExtensionImage' transient property
  //····················································································································

  final let emptyFileExtensionImage_property = EBGenericTransientProperty <NSImage?> ()

  //····················································································································
  //   INIT
  //····················································································································

  override init () {
    super.init ()
  //--- Configure drawBoardLimits simple stored property
    self.drawBoardLimits_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.drawBoardLimits_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure drawInternalBoardLimits simple stored property
    self.drawInternalBoardLimits_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.drawInternalBoardLimits_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure drawComponentNamesTopSide simple stored property
    self.drawComponentNamesTopSide_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.drawComponentNamesTopSide_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure drawComponentNamesBottomSide simple stored property
    self.drawComponentNamesBottomSide_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.drawComponentNamesBottomSide_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure drawComponentValuesTopSide simple stored property
    self.drawComponentValuesTopSide_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.drawComponentValuesTopSide_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure drawComponentValuesBottomSide simple stored property
    self.drawComponentValuesBottomSide_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.drawComponentValuesBottomSide_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure drawPackageLegendTopSide simple stored property
    self.drawPackageLegendTopSide_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.drawPackageLegendTopSide_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure drawPackageLegendBottomSide simple stored property
    self.drawPackageLegendBottomSide_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.drawPackageLegendBottomSide_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure drawPadHolesInPDF simple stored property
    self.drawPadHolesInPDF_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.drawPadHolesInPDF_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure drawPadsTopSide simple stored property
    self.drawPadsTopSide_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.drawPadsTopSide_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure drawPadsBottomSide simple stored property
    self.drawPadsBottomSide_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.drawPadsBottomSide_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure drawTextsLayoutTopSide simple stored property
    self.drawTextsLayoutTopSide_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.drawTextsLayoutTopSide_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure drawTextsLayoutBottomSide simple stored property
    self.drawTextsLayoutBottomSide_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.drawTextsLayoutBottomSide_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure drawTextsLegendTopSide simple stored property
    self.drawTextsLegendTopSide_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.drawTextsLegendTopSide_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure drawTextsLegendBottomSide simple stored property
    self.drawTextsLegendBottomSide_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.drawTextsLegendBottomSide_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure drawTracksTopSide simple stored property
    self.drawTracksTopSide_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.drawTracksTopSide_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure drawTracksInner1Layer simple stored property
    self.drawTracksInner1Layer_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.drawTracksInner1Layer_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure drawTracksInner2Layer simple stored property
    self.drawTracksInner2Layer_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.drawTracksInner2Layer_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure drawTracksInner3Layer simple stored property
    self.drawTracksInner3Layer_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.drawTracksInner3Layer_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure drawTracksInner4Layer simple stored property
    self.drawTracksInner4Layer_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.drawTracksInner4Layer_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure drawTracksBottomSide simple stored property
    self.drawTracksBottomSide_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.drawTracksBottomSide_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure drawTraversingPads simple stored property
    self.drawTraversingPads_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.drawTraversingPads_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure drawVias simple stored property
    self.drawVias_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.drawVias_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure fileExtension simple stored property
    self.fileExtension_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.fileExtension_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure horizontalMirror simple stored property
    self.horizontalMirror_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.horizontalMirror_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure name simple stored property
    self.name_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.name_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure measurementUnitForPadHoleInPDF simple stored property
    self.measurementUnitForPadHoleInPDF_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.measurementUnitForPadHoleInPDF_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure padHoleDiameterInPDF simple stored property
    self.padHoleDiameterInPDF_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.padHoleDiameterInPDF_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure hasNoData transient property
    self.hasNoData_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.hasNoData_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure parameterStatusImage transient property
    self.parameterStatusImage_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.parameterStatusImage_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  //--- Configure emptyFileExtensionImage transient property
    self.emptyFileExtensionImage_property.mReadModelFunction = { [weak self] in
      if let model = self?.mInternalValue {
        switch model.emptyFileExtensionImage_property.selection {
        case .empty :
          return .empty
        case .multiple :
          return .multiple
        case .single (let v) :
          return .single (v)
        }
      }else{
        return .single (nil)
      }
    }
  }

  //····················································································································

}

//——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
//   TransientObject ArtworkFileGenerationParameters
//——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

final class TransientObject_ArtworkFileGenerationParameters : ReadOnlyObject_ArtworkFileGenerationParameters {

  //····················································································································
  //   Data provider
  //····················································································································

  private var mDataProvider : ReadOnlyObject_ArtworkFileGenerationParameters? = nil
  private var mTransientKind : PropertyKind = .empty

  //····················································································································

  func setDataProvider (_ inProvider : ReadOnlyObject_ArtworkFileGenerationParameters?) {
    if self.mDataProvider !== inProvider {
      self.mDataProvider?.detachClient (self)
      self.mDataProvider = inProvider
      self.mDataProvider?.attachClient (self)
    }
  }

  //····················································································································

  override func notifyModelDidChange () {
    let newObject : ArtworkFileGenerationParameters?
    if let dataProvider = self.mDataProvider {
      switch dataProvider.selection {
      case .empty :
        newObject = nil
        self.mTransientKind = .empty
      case .single (let v) :
        newObject = v
        self.mTransientKind = .single
       case .multiple :
        newObject = nil
        self.mTransientKind = .empty
      }
    }else{
      newObject = nil
      self.mTransientKind = .empty
    }
    self.mInternalValue = newObject
    super.notifyModelDidChange ()
  }

  //····················································································································

  override var selection : EBSelection < ArtworkFileGenerationParameters? > {
    switch self.mTransientKind {
    case .empty :
      return .empty
    case .single :
      if let internalValue = self.mInternalValue {
        return .single (internalValue)
      }else{
        return .empty
      }
    case .multiple :
      return .multiple
    }
  }

  //····················································································································

  override var propval : ArtworkFileGenerationParameters? { return self.mInternalValue }

  //····················································································································

}

//——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
//    ReadWriteObject_ArtworkFileGenerationParameters
//——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

class ReadWriteObject_ArtworkFileGenerationParameters : ReadOnlyObject_ArtworkFileGenerationParameters {

  //····················································································································

  func setProp (_ inValue : ArtworkFileGenerationParameters?) { } // Abstract method

  //····················································································································

}

//——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
//    Proxy: ProxyObject_ArtworkFileGenerationParameters
//——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

final class ProxyObject_ArtworkFileGenerationParameters : ReadWriteObject_ArtworkFileGenerationParameters {

  //····················································································································

  private var mModel : ReadWriteObject_ArtworkFileGenerationParameters? = nil

  //····················································································································

  func setModel (_ inModel : ReadWriteObject_ArtworkFileGenerationParameters?) {
    if self.mModel !== inModel {
      self.mModel?.detachClient (self)
      self.mModel = inModel
      self.mModel?.attachClient (self)
    }
  }

  //····················································································································

  override func notifyModelDidChange () {
    let newModel : ArtworkFileGenerationParameters?
    if let model = self.mModel {
      switch model.selection {
      case .empty :
        newModel = nil
      case .single (let v) :
        newModel = v
       case .multiple :
        newModel = nil
      }
    }else{
      newModel = nil
    }
    self.mInternalValue = newModel
    super.notifyModelDidChange ()
  }

  //····················································································································

  override func setProp (_ inValue : ArtworkFileGenerationParameters?) {
    self.mModel?.setProp (inValue)
  }

  //····················································································································

  override var selection : EBSelection < ArtworkFileGenerationParameters? > {
    if let model = self.mModel {
      return model.selection
    }else{
      return .empty
    }
  }

  //····················································································································

  override var propval : ArtworkFileGenerationParameters? {
    if let model = self.mModel {
      switch model.selection {
      case .empty, .multiple :
        return nil
      case .single (let v) :
        return v
      }
    }else{
      return nil
    }
  }

  //····················································································································

}

//——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
//    StoredObject_ArtworkFileGenerationParameters
//——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

final class StoredObject_ArtworkFileGenerationParameters : ReadWriteObject_ArtworkFileGenerationParameters, EBSignatureObserverProtocol, EBObservableObjectProtocol {

 //····················································································································

  init (usedForSignature inUsedForSignature : Bool) {
    mUsedForSignature = inUsedForSignature
    super.init ()
  }

  //····················································································································
  //   Signature ?
  //····················································································································

  private let mUsedForSignature : Bool

  //····················································································································
  //   Undo manager
  //····················································································································

  weak final var ebUndoManager : EBUndoManager? = nil // SOULD BE WEAK

 //····················································································································
  //   Opposite relationship management
  //····················································································································

  private var mSetOppositeRelationship : Optional < (_ inManagedObject : ArtworkFileGenerationParameters) -> Void > = nil
  private var mResetOppositeRelationship : Optional < (_ inManagedObject : ArtworkFileGenerationParameters) -> Void > = nil

  //····················································································································

  func setOppositeRelationShipFunctions (setter inSetter : @escaping (_ inManagedObject : ArtworkFileGenerationParameters) -> Void,
                                         resetter inResetter : @escaping (_ inManagedObject : ArtworkFileGenerationParameters) -> Void) {
    self.mSetOppositeRelationship = inSetter
    self.mResetOppositeRelationship = inResetter
  }

  //····················································································································

  #if BUILD_OBJECT_EXPLORER
    var mValueExplorer : NSButton? {
      didSet {
        if let unwrappedExplorer = self.mValueExplorer {
          switch self.selection {
          case .empty, .multiple :
            break ;
          case .single (let v) :
            updateManagedObjectToOneRelationshipDisplay (object: v, button: unwrappedExplorer)
          }
        }
      }
    }
  #endif
  
  //····················································································································
  // Model will change
  //····················································································································

  override func notifyModelDidChangeFrom (oldValue inOldValue : ArtworkFileGenerationParameters?) {
  //--- Register old value in undo manager
    self.ebUndoManager?.registerUndo (withTarget: self) { $0.mInternalValue = inOldValue }
  //---
    if let object = inOldValue {
      if self.mUsedForSignature {
        object.setSignatureObserver (observer: nil)
      }
      self.mResetOppositeRelationship? (object)
    }
  //---
    if let object = self.mInternalValue {
      if self.mUsedForSignature {
        object.setSignatureObserver (observer: self)
      }
      self.mSetOppositeRelationship? (object)
    }
  //---
    super.notifyModelDidChangeFrom (oldValue: inOldValue)
  }

  //····················································································································
  // Model did change
  //····················································································································

  override func notifyModelDidChange () {
  //--- Update explorer
    #if BUILD_OBJECT_EXPLORER
      if let valueExplorer = self.mValueExplorer {
        updateManagedObjectToOneRelationshipDisplay (object: self.mInternalValue, button: valueExplorer)
      }
    #endif
  //--- Notify observers
    self.postEvent ()
    self.clearSignatureCache ()
  //---
    super.notifyModelDidChange ()
  }

  //····················································································································

  override var selection : EBSelection < ArtworkFileGenerationParameters? > {
    if let object = self.mInternalValue {
      return .single (object)
    }else{
      return .empty
    }
  }

  //····················································································································

  override func setProp (_ inValue : ArtworkFileGenerationParameters?) { self.mInternalValue = inValue }

  //····················································································································

  override var propval : ArtworkFileGenerationParameters? { return self.mInternalValue }

  //····················································································································
  //   signature
  //····················································································································

  private weak var mSignatureObserver : EBSignatureObserverProtocol? = nil // SOULD BE WEAK

  //····················································································································

  private var mSignatureCache : UInt32? = nil

  //····················································································································

  final func setSignatureObserver (observer inObserver : EBSignatureObserverProtocol?) {
    self.mSignatureObserver?.clearSignatureCache ()
    self.mSignatureObserver = inObserver
    inObserver?.clearSignatureCache ()
    self.clearSignatureCache ()
  }

  //····················································································································

  final func signature () -> UInt32 {
    let computedSignature : UInt32
    if let s = self.mSignatureCache {
      computedSignature = s
    }else{
      computedSignature = self.computeSignature ()
      self.mSignatureCache = computedSignature
    }
    return computedSignature
  }

  //····················································································································

  final private func computeSignature () -> UInt32 {
    var crc : UInt32 = 0
    if let object = self.mInternalValue {
      crc.accumulateUInt32 (object.signature ())
    }
    return crc
  }

  //····················································································································

  final func clearSignatureCache () {
    if self.mSignatureCache != nil {
      self.mSignatureCache = nil
      self.mSignatureObserver?.clearSignatureCache ()
    }
  }

  //····················································································································

}

//——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

