(use goo)


(dc <midi-patch> (<any>))
(dp patch-num (<midi-patch> => <int>))
(dp patch-name (<midi-patch> => <str>))

(dm midipatch (user-num|<int> name|<str> => <midi-patch>)
  (def patch (new <midi-patch>))
  (set (patch-num patch) (- user-num 1))
  (set (patch-name patch) name)
  patch
  )

(dc <midi-patch-group> (<any>))
(dp group-name (<midi-patch-group> => <str>))
(dp group-children (<midi-patch-group> => <str-tab>) (fab <str-tab> 0))

(dm midigroup (name|<str> children|... => <midi-patch-group>)
  (def group (new <midi-patch-group>))
  (set (group-name group) name)
  (do (fun (kid)
        (if (isa? kid <midi-patch>)
            (set (elt (group-children group) (patch-name kid)) kid)
            (set (elt (group-children group) (group-name kid)) kid)
            )
        )
      children)
  group
  )

(export
  <midi-patch>
  patch-num
  patch-num-setter
  patch-name
  patch-name-setter
  midipatch
  )

(export
  <midi-patch-group>
  group-name
  group-name-setter
  group-children
  group-children-setter
  midigroup
  )