   (reify
     om/IRenderState
     (render-state [_ {:keys [width height change-grid-dimensions] :as state}]
-      (dom/div
-       #js {:role "form" :className "automaton-grid-control"}
-       (dom/label nil "Grid width")
-       (dom/input
-        #js {:type "text" :className "form-control" :value width
-             :onChange #(handle-numeric-config-change % owner state :width)})
-       (dom/label nil "Grid height")
-       (dom/input
-        #js {:type "text" :className "form-control" :value height
-             :onChange #(handle-numeric-config-change % owner state :height)})
-       (dom/button
-        #js {:type "submit" :className "btn btn-primary btn-lg btn-block"
-             :onClick #(put! change-grid-dimensions [width height])}
-        "Reset grid")))))
+      (let [started (:started data)]
+        (dom/div
+         #js {:role "form" :className "automaton-grid-control"}
+         (dom/label nil "Grid width")
+         (dom/input
+          #js {:type "text" :className "form-control" :value width
+               :disabled started
+               :onChange
+               #(handle-numeric-config-change % owner state :width)})
+         (dom/label nil "Grid height")
+         (dom/input
+          #js {:type "text" :className "form-control" :value height
+               :disabled started
+               :onChange
+               #(handle-numeric-config-change % owner state :height)})
+         (dom/button
+          #js {:type "button" :className "btn btn-danger btn-lg btn-block"
+               :disabled started
+               :onClick #(put! change-grid-dimensions [width height])}
+          "Reset grid"))))))
 
 
 (defn display-config-view

                           cell (assoc cell
                                  :state (a/next-state automaton-spec state))]
                       (assoc grid [x y] cell))))
                  (recur))))))
      om/IRenderState
      (render-state [_ state]

(enable-console-print!)

(def app-state (atom {:grid {:width 10 :height 10 :cells {}}
                      :display {:width 600 :height 600}
                      :started false}))


(defn cell-view
  [data owner]
  (reify
    om/IRenderState
    (render-state [_ {:keys [cell-state-changed x y]}]
      (let [{:keys [width height state started]} data
            st #js {:width width :height height}]
        (dom/div #js {:style st
                      :className
                      (apply str
                             (interpose " " ["automaton-cell" (name state)]))
                      :onClick #(when-not started
                                  (put! cell-state-changed [x y]))})))))


(defn grid-view
