inkstitch/electron/src/renderer/components/Simulator.vue

315 wiersze
13 KiB
Vue

<!--
Authors: see git history
Copyright (c) 2010 Authors
Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details.
-->
<template>
<div ref="simulator" class="simulator vld-parent">
<fieldset>
<div class="window-controls">
<div ref="controlInfoButton" class="control-info-button" v-on:click="toggleInfo">
<font-awesome-icon icon="info"/>
<Transition name="collapse">
<div class="control-info" v-show="infoExpanded" v-bind:style="{'max-height': infoMaxHeight + 'px'}">
<h1>
<font-awesome-icon icon="info" class="info-icon"/>
<translate>Simulator Shortcut Keys</translate>
</h1>
<div>
<div>
<p>
<translate>Button</translate>
</p>
<p>
<translate>Function</translate>
</p>
<p>
<translate>Shortcut Key</translate>
</p>
</div>
<div>
<p>
<font-awesome-icon icon="pause" class="fa-button"/>
</p>
<p>
<translate>Pause</translate>
</p>
<p>
<translate>Space</translate>
</p>
</div>
<div>
<p>
<font-awesome-icon icon="play" class="fa-button"/>
</p>
<p>
<translate>Play</translate>
</p>
<p>P</p>
</div>
<div>
<p>
<font-awesome-icon icon="angle-double-left" class="fa-button"/>
</p>
<p>
<translate>Play backward</translate>
</p>
<p>
<translate translate-comment="name for left arrow keyboard key">← Arrow left</translate>
</p>
</div>
<div>
<p>
<font-awesome-icon icon="angle-double-right" class="fa-button"/>
</p>
<p>
<translate>Play forward</translate>
</p>
<p>
<translate translate-comment="name for right arrow keyboard key">→ Arrow right</translate>
</p>
</div>
<div>
<p>
<font-awesome-icon icon="shoe-prints" class="fa-button fa-flip-horizontal"/>
</p>
<p>
<translate translate-comment="description of keyboard shortcut that moves one stitch backward in simulator">
One step backward
</translate>
</p>
<p>-
<translate translate-comment="name for this keyboard key: -">Minus</translate>
</p>
</div>
<div>
<p>
<font-awesome-icon icon="shoe-prints" class="fa-button"/>
</p>
<p>
<translate translate-comment="description of keyboard shortcut that moves one stitch forward in simulator">
One step forward
</translate>
</p>
<p>
<translate translate-comment="name for this keyboard key: +">+ Plus</translate>
</p>
</div>
<div>
<p>
<font-awesome-icon icon="step-backward" class="fa-button"/>
</p>
<p>
<translate>Jump to previous command</translate>
</p>
<p><translate translate-comment="name for page down keyboard key">Page down (PgDn)</translate></p>
</div>
<div>
<p>
<font-awesome-icon icon="step-forward" class="fa-button"/>
</p>
<p>
<translate>Jump to next command</translate>
</p>
<p><translate translate-comment="name for page up keyboard key">Page up (PgUp)</translate></p>
</div>
<div>
<p>
<font-awesome-icon icon="hippo" class="fa-button"/>
</p>
<p>
<translate>Slow down</translate>
</p>
<p>
<translate translate-comment="name for down arrow keyboard key">↓ Arrow down</translate>
</p>
</div>
<div>
<p>
<font-awesome-icon icon="horse" class="fa-button"/>
</p>
<p>
<translate>Speed up</translate>
</p>
<p>
<translate translate-comment="name for up arrow keyboard key">↑ Arrow up</translate>
</p>
</div>
</div>
<div>
<p>
<font-awesome-icon icon="search-minus" class="fa-button"/>
</p>
<p>
<translate>Zoom page</translate>
</p>
<p>
<translate>[ Left square bracket</translate>
</p>
</div>
<div>
<p>
<font-awesome-icon icon="search-plus" class="fa-button"/>
</p>
<p>
<translate>Zoom design</translate>
</p>
<p>
<translate>] Right square bracket</translate>
</p>
</div>
</div>
</Transition>
</div>
<div class="toggle-controls" v-on:click="toggleControls">
<font-awesome-icon v-if="controlsExpanded" icon="minus"/>
<font-awesome-icon v-else icon="plus"/>
</div>
</div>
<Transition name="collapse">
<div class="panel" v-show="controlsExpanded">
<fieldset class="controls">
<legend>
<translate>Controls</translate>
</legend>
<button v-on:click="stop" :class="{pressed: paused}" :title="$gettext('Pause (space)')">
<font-awesome-icon icon="pause" size="2x" class="fa-button"/>
</button>
<button v-on:click="start" :class="{pressed: animating}" :title="$gettext('Play (arrow left | arrow right)')">
<font-awesome-icon icon="play" size="2x" class="fa-button"/>
</button>
<button v-on:click="animationReverse" :class="{pressed: reverse}" :title="$gettext('Play backward (arrow left)')">
<font-awesome-icon icon="angle-double-left" size="2x" class="fa-button" :mask="['fas', 'stop']"/>
</button>
<button v-on:click="animationForward" :class="{pressed: forward}" :title="$gettext('Play forward (arrow right)')">
<font-awesome-icon icon="angle-double-right" size="2x" class="fa-button" :mask="['fas', 'stop']"/>
</button>
<button v-on:click="animationBackwardOneStitch" :title="$gettext('One step backward (-)')">
<font-awesome-icon icon="shoe-prints" size="2x" class="fa-button fa-flip-horizontal"/>
</button>
<button v-on:click="animationForwardOneStitch" :title="$gettext('One step forward (+)')">
<font-awesome-icon icon="shoe-prints" size="2x" class="fa-button"/>
</button>
<button v-on:click="animationPreviousCommand" :title="$gettext('Jump to previous command (Page down)')">
<font-awesome-icon icon="step-backward" size="2x" class="fa-button"/>
</button>
<button v-on:click="animationNextCommand" :title="$gettext('Jump to next command (Page up)')">
<font-awesome-icon icon="step-forward" size="2x" class="fa-button"/>
</button>
</fieldset>
<fieldset class="speed">
<legend>
<translate :translate-params="{ speed: speed }" :translate-n="speed" translate-plural="Speed: %{speed} stitches/sec">Speed: %{speed} stitch/sec</translate>
</legend>
<button v-on:click="animationSlowDown" :title="$gettext('Slow down (arrow down)')">
<font-awesome-icon icon="hippo" size="2x" class="fa-button"/>
</button>
<button v-on:click="animationSpeedUp" :title="$gettext('Speed up (arrow up)')">
<font-awesome-icon icon="align-right" class="fa-motion-lines"/>
<font-awesome-icon icon="horse" size="2x" class="fa-button fa-fast"/>
</button>
</fieldset>
<fieldset class="view">
<legend>
<translate>View</translate>
</legend>
<button v-on:click="zoomPage" :title="$gettext('Zoom page ([)')">
<font-awesome-icon icon="search-minus" size="2x" class="fa-button"/>
</button>
<button v-on:click="zoomDesign" :title="$gettext('Zoom design (])')">
<font-awesome-icon icon="search-plus" size="2x" class="fa-button"/>
</button>
</fieldset>
<fieldset class="command">
<legend>
<translate>Command</translate>
</legend>
<span class="current-command">{{currentCommand}}</span>
</fieldset>
<fieldset class="show-commands">
<legend>
<translate>Show</translate>
</legend>
<span>
<input id="trim-checkbox" type="checkbox" v-model="showTrims"/>
<label for="trim-checkbox"><font-awesome-icon icon="cut"/> <translate>trims</translate></label>
<br/>
<input id="jump-checkbox" type="checkbox" v-model="showJumps"/>
<label for="jump-checkbox"><font-awesome-icon icon="frog"/> <translate>jumps</translate></label>
</span>
<span>
<input id="color-change-checkbox" type="checkbox" v-model="showColorChanges"/>
<label for="color-change-checkbox"><font-awesome-icon icon="exchange-alt"/> <translate>color changes</translate></label>
<br/>
<input id="stop-checkbox" type="checkbox" v-model="showStops"/>
<label for="stop-checkbox"><font-awesome-icon icon="pause"/> <translate>stops</translate></label>
</span>
<span class="npp">
<input id="npp-checkbox" type="checkbox" v-model="showNeedlePenetrationPoints"/>
<label for="npp-checkbox">
<font-awesome-layers>
<font-awesome-icon icon="circle" transform="shrink-9"/>
<font-awesome-icon icon="minus" class="fa-thin-line"/>
</font-awesome-layers>
<span v-translate>needle points</span>
</label>
<br />
<input id="render-jumps-checkbox" type="checkbox" v-model="renderJumps"/>
<label for="render-jumps-checkbox"><font-awesome-icon icon="link"/><span v-translate>render jumps</span></label>
</span>
<span>
<input id="realistic-checkbox" type="checkbox" v-model="showRealisticPreview"/>
<label for="realistic-checkbox"><font-awesome-icon icon="eye"/> <span v-translate>realistic</span></label>
<br/>
<input id="cursor-checkbox" type="checkbox" v-model="showCursor"/>
<label for="cursor-checkbox"><font-awesome-icon icon="plus"/> <span v-translate>cursor</span></label>
</span>
</fieldset>
</div>
</Transition>
<div class="slider-container">
<span>1</span>
<span class="slider-box">
<vue-slider v-model="currentStitchDisplay"
@change="setCurrentStitch"
:min="0"
:max="numStitches"
:duration="0"
:marks="sliderMarks"
:process="sliderProcess">
<template v-slot:label="mark">
<div :class="['vue-slider-mark-label', `slider-label-${mark.command}`, { active: mark.active }]">
<font-awesome-icon :icon="mark.icon"/>
</div>
</template>
</vue-slider>
</span>
<span>{{numStitches}}</span>
<input ref="currentStitchInput"
class="current-stitch-input"
:value="currentStitchDisplay"
@change="onCurrentStitchEntered"
@focus="stop"/>
</div>
</fieldset>
<loading :active="loading" :is-full-page="false">
<div class="loading">
<div class="loading-icon">
<font-awesome-icon icon="spinner" size="4x" pulse/>
</div>
<div class="loading-text">
<translate>Rendering stitch-plan...</translate>
</div>
</div>
</loading>
</div>
</template>
<script src="../assets/js/simulator.js"></script>
<style src="../assets/style/simulator.css" scoped></style>