96 lines
2.4 KiB
Vue
96 lines
2.4 KiB
Vue
<template>
|
|
<MenuRow row-title="2D Cellular Automaton">
|
|
<div class="form-field">
|
|
<label>Start from empty board</label>
|
|
<input
|
|
type="button"
|
|
name="start2d"
|
|
value="start"
|
|
@click="toggleDraw2d()"
|
|
/>
|
|
</div>
|
|
<div class="form-field">
|
|
<label>Start from last result</label>
|
|
<input type="button" value="start" @click="toggleDraw2dLast()" />
|
|
</div>
|
|
<div class="form-field">
|
|
<label>Start from picture</label><br />
|
|
<input type="file" @change="preparePicture" />
|
|
</div>
|
|
<div class="form-field">
|
|
<label>
|
|
Rules
|
|
<br />
|
|
<select
|
|
name="preset2dRules"
|
|
:value="selected2dRules.id"
|
|
@input="update2dRules"
|
|
>
|
|
<option
|
|
v-for="(state, index) in preset2dRules"
|
|
:key="'initial-state-elementary' + index"
|
|
:value="state.id"
|
|
>
|
|
{{ state.name }}
|
|
</option>
|
|
</select>
|
|
</label>
|
|
</div>
|
|
</MenuRow>
|
|
</template>
|
|
|
|
<script>
|
|
import MenuRow from "./MenuRow.vue";
|
|
import { mapActions, mapWritableState } from "pinia";
|
|
import { globalStore } from "../stores/index.js";
|
|
import { preset2dRules } from "../modules/preset.js";
|
|
export default {
|
|
name: "Menu2dCA",
|
|
components: {
|
|
MenuRow,
|
|
},
|
|
data() {
|
|
return {
|
|
uploadedFile: "",
|
|
preset2dRules: preset2dRules,
|
|
};
|
|
},
|
|
computed: {
|
|
...mapWritableState(globalStore, ["picture", "selected2dRules"]),
|
|
},
|
|
methods: {
|
|
...mapActions(globalStore, [
|
|
"toggleDraw2dLast",
|
|
"toggleDraw2d",
|
|
"toggle2dDrawFromPicture",
|
|
]),
|
|
preparePicture(event) {
|
|
const files = event.target.files;
|
|
this.picture = new Image();
|
|
if (FileReader && files && files.length) {
|
|
const reader = new FileReader();
|
|
|
|
reader.onload = () => {
|
|
this.picture.src = Object.freeze(reader.result);
|
|
this.toggle2dDrawFromPicture();
|
|
};
|
|
|
|
reader.onerror = () => {
|
|
console.log(reader.error);
|
|
};
|
|
|
|
reader.readAsDataURL(files[0]);
|
|
}
|
|
},
|
|
update2dRules(event) {
|
|
const elem = event.target;
|
|
const id = elem.value;
|
|
const newRuleset = this.preset2dRules.find((ruleset) => {
|
|
return ruleset.id === id;
|
|
});
|
|
this.selected2dRules = newRuleset;
|
|
},
|
|
},
|
|
};
|
|
</script>
|