                                            (transform-necklace
                                                    (translate-seq (get-e-val e))
                                                    id typekw))])]
+    (horizontal-panel :items [reflect-button translabel transbox])))
+
+(defn make-rowops-panel [id]
+  (let [reflect-button (button :text "Invert!"
+                               :listen [:action
+                                        (fn [e]
+                                          (transform-necklace
+                                           (invert-names (+ (o/note @tonic) 3.5))
+                                           id :pitches))])
+        translabel (label "Transpose: ")
+        transbox (combobox :model (range -6 7)
+                           :id (keyword (s/join ["kb-" id "-mel-transpose"]))
+                           :listen [:action (fn [e]
+                                           (transform-necklace
+                                                   (transpose-names (get-e-val e))
+                                                   id :pitches))])]
     (horizontal-panel :items [reflect-button translabel transbox])))
 
 ;;;;;;;;;;;;;; transforms end

    (* tonic-freq (Math/pow 2 octave) (nth (get @tuning-map @tuning) interval))))

(if (not (o/server-connected?))
  (o/boot-external-server))
  ;(o/connect-external-server 60106))

(require '[overtone.inst.synth :as syn])


    (swap! melody-map assoc id {:pitches numcbs, :beats numcbs,
                                :root f, :instr "Default"})
    (add-note-circles id pan)
    (let [rowops (make-rowops-panel id)
          mel-controls (make-transform-panel id :pitches)
          rhy-controls (make-transform-panel id :beats)
          verticalpanel (vertical-panel :items [rowops mel-controls pan
                                                rhy-controls chinstr
                                                playsolo controls])]
      (config! f :content verticalpanel)
      (-> f pack! show!)
      f)))
