 
 (defn samples []
   (om/ref-cursor (:samples (om/root-cursor app-state))))
+
+(defn handle-change [e owner {:keys [text]}]
+  (om/set-state! owner :text (.. e -target -value)))
 
 (defn cell-view [{:keys [cursor id]} _]
   (reify

                    (dom/span nil "}"))
          :type (p (dom/span #js {:onClick #(transition {:state :init})} (str "{- " (:width state) " ... "))
                   (dom/span #js {:onClick #(transition {:state :sample :type "sample"})} " sample ")
                   (dom/span #js {:onClick #(print "bonk")} " play ")
                   (dom/span #js {:onClick #(print "bonk")} " synth ")
                   (dom/span nil "}"))
          :sample (p (dom/span #js {:onClick #(transition {:state :init})} (str "{- " (:width state) " sample ... "))
                     (apply dom/select #js {:onChange #(transition {:state :commit :sample (-> % .-target .-value)})}
                            (map #(dom/option nil %) (om/observe owner (samples))))
                     (dom/span nil "}"))
          :commit (p (dom/span #js {:onClick #(transition {:state :init})}
                               (str "{- " (:width state) " sample " (:sample state) " ... "))
                     (dom/span #js {:onClick commit} " commit? ")

                   (dom/div nil 
                            (dom/p #js {:onClick #(om/set-state! owner :grid-expanded true)
                                        :style #js {:color "#999"}}
                                   (str "[+] " id " (" (get cursor "bpc") ")")))
                   (dom/div nil 
                            (dom/p #js {:onClick #(om/set-state! owner :grid-expanded false)
                                        :style #js {:color "#999"}}
                                   (str "[-] " id " (" (get cursor "bpc") " )"))
                            (apply dom/table nil
                                   (let [cursors (map #(hash-map :cursor %1 :id %2)
                                                      (get cursor "tracks")
