commit 7b60e9634ce882ce7ad11f0b1c8da10956b35f54
parent 55e4987c1a8cf56a992d2c91d08ab5b986a1a739
Author: Adam M <aemalone@gmail.com>
Date: Sat, 15 Sep 2018 23:35:23 -0500
initial development of laundry soup sequencer
Diffstat:
5 files changed, 511 insertions(+), 1 deletion(-)
diff --git a/res/ComputerscareLaundrySoupPanel.svg b/res/ComputerscareLaundrySoupPanel.svg
@@ -0,0 +1,282 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="200"
+ height="380"
+ viewBox="0 0 52.916669 100.54167"
+ version="1.1"
+ id="svg8"
+ inkscape:version="0.92.2 5c3e80d, 2017-08-06"
+ sodipodi:docname="ComputerscareLaundrySoupPanel.svg"
+ style="enable-background:new">
+ <defs
+ id="defs2">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 50.270835 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="23.812501 : 50.270835 : 1"
+ inkscape:persp3d-origin="11.906251 : 33.51389 : 1"
+ id="perspective1881" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.8284272"
+ inkscape:cx="80.124849"
+ inkscape:cy="407.39552"
+ inkscape:document-units="mm"
+ inkscape:current-layer="text917"
+ showgrid="false"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:snap-page="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1440"
+ inkscape:window-height="856"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="0"
+ inkscape:snap-nodes="false"
+ inkscape:snap-others="false"
+ inkscape:snap-global="false" />
+ <metadata
+ id="metadata5">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ style="display:inline"
+ transform="translate(0,-196.45832)"
+ id="g1669"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1 copy">
+ <path
+ inkscape:connector-curvature="0"
+ id="path1647"
+ d="M 0,196.45832 H 52.916667 V 297 H 0 Z"
+ style="opacity:1;vector-effect:none;fill:#f9f9f9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.72459143;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
+ <g
+ aria-label="computerscare"
+ transform="matrix(0.98656289,0.0441007,-0.12576361,1.0079983,50.102321,-2.779225)"
+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+ id="text1651">
+ <path
+ d="m 6.6070221,292.92039 -0.00246,0.37105 q -0.1071193,-0.0808 -0.2159438,-0.11391 -0.1074332,-0.0355 -0.2179805,-0.0233 -0.2472541,0.0274 -0.38563,0.28832 -0.1383657,0.25886 -0.1412982,0.70113 -0.00293,0.44221 0.1321842,0.67304 0.1351305,0.22868 0.3823831,0.20138 0.1105059,-0.0123 0.2185405,-0.0692 0.1094376,-0.0594 0.2177934,-0.1642 l -0.00243,0.36673 q -0.1068806,0.0895 -0.2217798,0.14083 -0.1135211,0.0513 -0.2419848,0.0654 -0.3494689,0.0384 -0.5530034,-0.28169 -0.2035392,-0.32028 -0.1996747,-0.90274 0.00392,-0.59111 0.2133598,-0.95268 0.2108222,-0.3617 0.5727212,-0.40166 0.1174123,-0.0128 0.2290539,0.0148 0.1116476,0.0244 0.2161244,0.0884 z"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.33131203"
+ id="path1701"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 7.6500478,292.99062 q -0.2044279,0.0227 -0.3248808,0.28593 -0.1204373,0.26121 -0.1233105,0.69481 -0.00287,0.43362 0.1128778,0.6709 0.1171462,0.23497 0.3229586,0.21226 0.2030374,-0.0225 0.3235011,-0.28579 0.1204496,-0.26337 0.1233101,-0.69482 0.00285,-0.42927 -0.1142857,-0.66643 -0.1171176,-0.23929 -0.3201684,-0.21686 z m 0.00223,-0.33652 q 0.3315101,-0.0365 0.5185139,0.27902 0.1870051,0.31566 0.1830569,0.91106 -0.00393,0.59327 -0.1954191,0.95283 -0.1914688,0.35742 -0.5229779,0.39403 -0.3328997,0.0367 -0.5198978,-0.27887 -0.1856097,-0.31798 -0.1816746,-0.91121 0.00395,-0.59541 0.1940369,-0.95268 0.191469,-0.35743 0.5243617,-0.39418 z"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.33131203"
+ id="path1703"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 10.647868,293.19283 q 0.192887,-0.21097 0.37571,-0.30964 0.182814,-0.0986 0.370161,-0.0952 0.252209,0.005 0.296388,0.21855 0.04496,0.21206 -0.125387,0.6 l -0.509512,1.16046 -0.266622,-0.006 0.504994,-1.15016 q 0.121344,-0.27639 0.098,-0.41186 -0.02336,-0.13545 -0.191965,-0.13867 -0.206082,-0.004 -0.39729,0.15688 -0.191212,0.1608 -0.314822,0.44234 l -0.477103,1.08665 -0.2666245,-0.006 0.5049935,-1.15016 q 0.122103,-0.27811 0.09799,-0.41185 -0.02336,-0.13545 -0.194845,-0.13872 -0.2031978,-0.004 -0.3951618,0.15865 -0.191211,0.1608 -0.3140662,0.4406 l -0.4771051,1.08666 -0.2666163,-0.006 0.8441614,-1.92264 0.2666226,0.006 -0.1311408,0.29869 q 0.168419,-0.17508 0.3321682,-0.2568 0.163741,-0.0817 0.338101,-0.0783 0.175813,0.003 0.251604,0.11209 0.07721,0.10874 0.04736,0.31249 z"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.30324769"
+ id="path1705"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 12.08524,294.60161 -0.138154,1.12148 -0.252719,0.0641 0.359579,-2.91885 0.25272,-0.0641 -0.03954,0.32095 q 0.102409,-0.20918 0.233654,-0.33074 0.132856,-0.12372 0.300694,-0.16693 0.278184,-0.0723 0.413988,0.1895 0.136996,0.26086 0.07559,0.75932 -0.06141,0.49842 -0.273747,0.84928 -0.210979,0.35049 -0.489344,0.42222 -0.167738,0.0436 -0.278164,-0.0162 -0.108663,-0.0614 -0.164575,-0.22999 z m 0.945152,-0.95828 q 0.04722,-0.38326 -0.04065,-0.57085 -0.08628,-0.18983 -0.28551,-0.13852 -0.199228,0.0513 -0.340824,0.29987 -0.140007,0.24629 -0.187225,0.62956 -0.04722,0.38328 0.03906,0.5731 0.08787,0.18758 0.287104,0.13627 0.19923,-0.0513 0.339232,-0.29761 0.141604,-0.24853 0.188813,-0.63182 z"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.30324769"
+ id="path1707"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 13.387976,294.44539 0.498746,-1.26019 0.265371,0.007 -0.493595,1.2472 q -0.116963,0.29552 -0.0864,0.44639 0.03128,0.14901 0.21011,0.15338 0.214874,0.005 0.408773,-0.16835 0.19534,-0.17353 0.315981,-0.47836 l 0.467112,-1.18027 0.265369,0.007 -0.823883,2.08172 -0.265371,-0.007 0.126524,-0.31971 q -0.171651,0.18724 -0.336773,0.27705 -0.162941,0.0879 -0.33165,0.0838 -0.278348,-0.008 -0.334254,-0.23332 -0.05593,-0.22656 0.113986,-0.65588 z"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.31584805"
+ id="path1709"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 15.883103,292.39373 0.01558,0.54312 0.553865,0.0105 0.007,0.24423 -0.553865,-0.0105 0.02978,1.0384 q 0.0067,0.23398 0.06268,0.30161 0.05745,0.0675 0.225497,0.0707 l 0.276178,0.005 0.0075,0.26301 -0.27618,-0.005 q -0.31126,-0.005 -0.433509,-0.14294 -0.122286,-0.13883 -0.132562,-0.4975 l -0.02978,-1.03839 -0.19729,-0.004 -0.007,-0.24424 0.197291,0.004 -0.01558,-0.54312 z"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.30324769"
+ id="path1711"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 18.22152,293.76942 0.0061,0.16669 -1.237147,-0.0295 q 0.03034,0.35234 0.186233,0.54112 0.157286,0.18695 0.424897,0.19335 0.155009,0.004 0.298033,-0.0409 0.144485,-0.0447 0.284294,-0.13758 l 0.0117,0.32229 q -0.141943,0.0744 -0.292546,0.11148 -0.150605,0.0371 -0.307075,0.0333 -0.391927,-0.0101 -0.632,-0.30378 -0.23863,-0.29439 -0.256537,-0.78705 -0.0185,-0.50935 0.187075,-0.80239 0.206983,-0.29484 0.575495,-0.28604 0.330483,0.008 0.531887,0.28287 0.202792,0.27317 0.219624,0.73623 z m -0.272709,-0.10651 q -0.01314,-0.27975 -0.140524,-0.44932 -0.125973,-0.16958 -0.324852,-0.17433 -0.225224,-0.006 -0.355342,0.15252 -0.12868,0.15792 -0.138515,0.45008 z"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.31584805"
+ id="path1713"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 19.605804,293.29952 q -0.04618,-0.0316 -0.100647,-0.0462 -0.05305,-0.0163 -0.117352,-0.0176 -0.227987,-0.005 -0.345737,0.16766 -0.116352,0.17024 -0.107053,0.49475 l 0.02883,1.00765 -0.270332,-0.004 -0.0548,-1.91286 0.270331,0.004 0.0085,0.29716 q 0.07977,-0.17262 0.213278,-0.25377 0.133462,-0.0828 0.327824,-0.0792 0.02776,5.2e-4 0.06154,0.007 0.03372,0.005 0.0749,0.0143 z"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.30324769"
+ id="path1715"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 20.787259,293.43551 -0.01857,0.34476 q -0.110229,-0.10674 -0.231384,-0.17592 -0.121161,-0.0693 -0.253267,-0.101 -0.201096,-0.0483 -0.306854,0.0108 -0.104296,0.0594 -0.113266,0.22573 -0.0069,0.12687 0.06113,0.21736 0.06808,0.0886 0.281797,0.2061 l 0.09098,0.0498 q 0.283211,0.15228 0.395355,0.33364 0.113723,0.1798 0.0991,0.45127 -0.01665,0.30909 -0.208377,0.44573 -0.190257,0.137 -0.507308,0.061 -0.132101,-0.0316 -0.274033,-0.1019 -0.140568,-0.0678 -0.295351,-0.17526 l 0.02027,-0.37647 q 0.144067,0.1409 0.286495,0.22927 0.142545,0.0864 0.284921,0.12048 0.190823,0.0458 0.29826,-0.0167 0.107548,-0.0645 0.116195,-0.22501 0.008,-0.14862 -0.06259,-0.24583 -0.06912,-0.0968 -0.316172,-0.23036 l -0.09233,-0.0522 q -0.247153,-0.13144 -0.350813,-0.3049 -0.103556,-0.17536 -0.08967,-0.43295 0.01686,-0.31305 0.190443,-0.44402 0.173575,-0.13097 0.47595,-0.0584 0.149716,0.0359 0.280221,0.0974 0.130498,0.0614 0.238856,0.14756 z"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.32954201"
+ id="path1717"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 22.195041,292.71108 0.01856,0.34598 q -0.119128,-0.0913 -0.237344,-0.13817 -0.116857,-0.0489 -0.234275,-0.0536 -0.262757,-0.0117 -0.395728,0.21262 -0.133111,0.22136 -0.110986,0.63372 0.02214,0.41235 0.179736,0.64761 0.157503,0.23326 0.42023,0.244 0.117399,0.004 0.229639,-0.0327 0.113579,-0.0395 0.223419,-0.12136 l 0.01841,0.34194 q -0.109128,0.0678 -0.22901,0.099 -0.118415,0.0312 -0.254912,0.0258 -0.371355,-0.0157 -0.607195,-0.34398 -0.235853,-0.32876 -0.264994,-0.87187 -0.02954,-0.55117 0.173645,-0.85796 0.204684,-0.30674 0.589233,-0.29099 0.124736,0.004 0.245587,0.0461 0.120724,0.0391 0.236054,0.11417 z"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.32954201"
+ id="path1719"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 23.305903,293.91588 q -0.324182,0.0149 -0.435899,0.12568 -0.111691,0.11098 -0.07954,0.36479 0.02567,0.20227 0.133813,0.31774 0.109387,0.11332 0.270755,0.10589 0.222436,-0.0102 0.327956,-0.2391 0.106711,-0.23111 0.05966,-0.6026 l -0.01075,-0.0847 z m 0.513686,-0.18111 0.167027,1.31882 -0.267332,0.0137 -0.04442,-0.35088 q -0.06493,0.21469 -0.188777,0.32204 -0.124115,0.10522 -0.321829,0.1143 -0.250088,0.0113 -0.42344,-0.18003 -0.172192,-0.19352 -0.214536,-0.52785 -0.04945,-0.39009 0.108682,-0.59655 0.159543,-0.20651 0.524449,-0.22312 l 0.375087,-0.0171 -0.0047,-0.0371 q -0.03318,-0.26211 -0.173355,-0.39896 -0.138967,-0.13902 -0.358502,-0.12911 -0.139623,0.006 -0.265854,0.0598 -0.126284,0.0535 -0.236369,0.15407 l -0.04442,-0.35086 q 0.136648,-0.0871 0.269792,-0.13263 0.132883,-0.0476 0.263718,-0.0536 0.353325,-0.0156 0.560671,0.23606 0.207395,0.25212 0.274312,0.78048 z"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.33353889"
+ id="path1721"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 25.217141,292.90688 q -0.05013,-0.0375 -0.106177,-0.0527 -0.05486,-0.0174 -0.118862,-0.0147 -0.2269,0.01 -0.320441,0.2389 -0.0924,0.22683 -0.03915,0.64375 l 0.165399,1.29468 -0.269129,0.0108 -0.313919,-2.45767 0.26913,-0.0108 0.0488,0.38179 q 0.05577,-0.22747 0.17728,-0.34083 0.121221,-0.11567 0.314665,-0.12384 0.02762,-0.001 0.06196,0.004 0.03409,0.003 0.07621,0.0128 z"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.34393439"
+ id="path1723"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 26.939385,293.66143 0.02353,0.18575 -1.229926,0.0559 q 0.06712,0.39135 0.241541,0.591 0.175622,0.19751 0.441671,0.18543 0.154117,-0.007 0.291251,-0.0671 0.13858,-0.0603 0.267465,-0.17408 l 0.04547,0.35911 q -0.132941,0.0933 -0.27839,0.14555 -0.14545,0.0523 -0.301011,0.0593 -0.389724,0.0168 -0.658647,-0.29385 -0.267575,-0.31167 -0.337104,-0.86065 -0.07187,-0.56756 0.101194,-0.90965 0.174272,-0.3442 0.540635,-0.36085 0.328539,-0.0151 0.557174,0.27771 0.22981,0.29056 0.295158,0.80653 z m -0.281627,-0.0994 q -0.04243,-0.3115 -0.18657,-0.49176 -0.14274,-0.18034 -0.34046,-0.17136 -0.223994,0.009 -0.33635,0.1959 -0.11101,0.18563 -0.09006,0.51266 z"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.33353889"
+ id="path1725"
+ inkscape:connector-curvature="0" />
+ <g
+ aria-label="Laundry Soup"
+ transform="matrix(1.0079983,-0.0441007,0.12576363,0.9865629,0,0)"
+ style="font-style:normal;font-weight:normal;font-size:5.44763088px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.03603381"
+ id="text917">
+ <path
+ d="m -42.563738,199.95988 0.537374,4.1e-4 -0.0549,3.8305 1.934026,7.2e-4 -0.0071,0.49222 -2.471404,-9.4e-4 z"
+ style="stroke-width:0.03759631"
+ id="path919"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m -38.224723,203.10076 q -0.597271,0 -0.827609,0.16338 -0.230338,0.16338 -0.230338,0.55741 0,0.31395 0.171414,0.49974 0.174093,0.1826 0.471389,0.1826 0.409787,0 0.656196,-0.34597 0.249086,-0.34918 0.249086,-0.92582 v -0.13134 z m 0.982955,-0.24346 v 2.04703 h -0.492817 v -0.5446 q -0.168735,0.32676 -0.4205,0.48374 -0.251765,0.15377 -0.616021,0.15377 -0.460676,0 -0.733867,-0.30754 -0.270514,-0.31074 -0.270514,-0.8297 0,-0.60547 0.337472,-0.91301 0.34015,-0.30753 1.012416,-0.30753 h 0.691014 v -0.0577 q 0,-0.40685 -0.224981,-0.62789 -0.222303,-0.22425 -0.626733,-0.22425 -0.257122,0 -0.500852,0.0737 -0.24373,0.0737 -0.468711,0.22105 v -0.54459 q 0.270513,-0.12494 0.524957,-0.18581 0.254442,-0.0641 0.495494,-0.0641 0.650839,0 0.97224,0.40364 0.321403,0.40364 0.321403,1.22374 z"
+ style="stroke-width:0.03968061"
+ id="path921"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m -36.28117,203.2356 0.02833,-2.36412 0.492866,8.3e-4 -0.02804,2.33972 q -0.0066,0.55441 0.15609,0.83346 0.162775,0.27552 0.494929,0.27569 0.399121,2.4e-4 0.633455,-0.33096 0.237014,-0.33116 0.243867,-0.903 l 0.02653,-2.2142 0.492866,8.4e-4 -0.0468,3.90536 -0.492866,-8.5e-4 0.0071,-0.59976 q -0.183732,0.3556 -0.424223,0.52983 -0.237769,0.17074 -0.551173,0.1706 -0.516984,-1e-5 -0.779833,-0.4188 -0.262851,-0.41856 -0.253198,-1.22403 z"
+ style="stroke-width:0.04140124"
+ id="path923"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m -30.248598,202.73877 v 2.16556 h -0.492817 v -2.14634 q 0,-0.50936 -0.166057,-0.76243 -0.166058,-0.25308 -0.498174,-0.25308 -0.399073,0 -0.629411,0.30433 -0.230338,0.30434 -0.230338,0.82972 v 2.0278 h -0.495495 v -3.58791 h 0.495495 v 0.5574 q 0.17677,-0.32354 0.415144,-0.48372 0.241051,-0.16018 0.554418,-0.16018 0.516921,0 0.782078,0.38442 0.265157,0.38122 0.265157,1.12443 z"
+ style="stroke-width:0.03968061"
+ id="path925"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m -27.356143,201.53802 0.02515,-1.75456 0.489486,7e-4 -0.06457,4.50509 -0.489486,-6.9e-4 0.007,-0.48642 q -0.158446,0.28947 -0.397245,0.43125 -0.236097,0.13888 -0.565973,0.13876 -0.540034,-4.6e-4 -0.873831,-0.46939 -0.331133,-0.46917 -0.320176,-1.23353 0.01096,-0.76436 0.355535,-1.23327 0.34724,-0.46891 0.887277,-0.46869 0.329875,1.5e-4 0.561947,0.14209 0.234774,0.13907 0.38492,0.42866 z m -1.684226,1.13139 q -0.0084,0.58776 0.207565,0.92372 0.218692,0.33303 0.607094,0.33319 0.388402,5e-5 0.616637,-0.33271 0.228278,-0.33578 0.236703,-0.92353 0.0084,-0.58775 -0.210267,-0.9208 -0.21865,-0.33594 -0.607051,-0.33609 -0.388403,-7e-5 -0.61668,0.33561 -0.225576,0.33288 -0.234001,0.92061 z"
+ style="stroke-width:0.03759631"
+ id="path927"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m -24.040184,201.86741 q -0.08303,-0.0577 -0.182127,-0.0833 -0.09642,-0.0288 -0.214269,-0.0288 -0.417822,0 -0.642804,0.32676 -0.222303,0.32356 -0.222303,0.93221 v 1.89007 h -0.495494 v -3.58791 h 0.495494 v 0.5574 q 0.155345,-0.32675 0.404432,-0.48372 0.249085,-0.16018 0.605306,-0.16018 0.05089,0 0.112491,0.01 0.0616,0.006 0.136596,0.0224 z"
+ style="stroke-width:0.03968061"
+ id="path929"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m -22.417171,204.59163 q -0.215802,0.57897 -0.415194,0.75551 -0.199393,0.17654 -0.529268,0.17641 l -0.391063,-1.1e-4 0.0064,-0.44588 0.287305,5.2e-4 q 0.202181,1.8e-4 0.315409,-0.10418 0.113225,-0.10407 0.25446,-0.49209 l 0.09128,-0.24317 -1.159375,-3.19111 0.518756,1e-4 0.894745,2.53667 0.967454,-2.53593 0.518757,1e-4 z"
+ style="stroke-width:0.03759631"
+ id="path931"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m -16.106914,200.27848 v 0.63109 q -0.30801,-0.17619 -0.581201,-0.26269 -0.273192,-0.0865 -0.527636,-0.0865 -0.441927,0 -0.682979,0.20503 -0.238372,0.20502 -0.238372,0.58304 0,0.31714 0.158022,0.48052 0.160701,0.16017 0.605307,0.25948 l 0.326759,0.0801 q 0.605306,0.13775 0.89189,0.48694 0.289261,0.34596 0.289261,0.92901 0,0.69515 -0.391038,1.05394 -0.388361,0.3588 -1.140977,0.3588 -0.283905,0 -0.605308,-0.0768 -0.318723,-0.0768 -0.661552,-0.22745 v -0.66632 q 0.329437,0.22104 0.645483,0.33316 0.316045,0.11212 0.621377,0.11212 0.463354,0 0.715119,-0.21783 0.251764,-0.21784 0.251764,-0.62148 0,-0.35239 -0.182127,-0.55101 -0.179449,-0.19861 -0.591915,-0.29791 l -0.329437,-0.0768 q -0.605307,-0.14416 -0.87582,-0.4517 -0.270514,-0.30754 -0.270514,-0.85533 0,-0.6343 0.372291,-0.9995 0.374969,-0.36519 1.031165,-0.36519 0.281226,0 0.573166,0.0608 0.29194,0.0608 0.597272,0.18259 z"
+ style="stroke-width:0.03968061"
+ id="path933"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m -13.861952,201.3318 q -0.396442,-1.8e-4 -0.631653,0.4042 -0.235171,0.4009 -0.24357,1.10176 -0.0084,0.70087 0.214439,1.10547 0.225559,0.4011 0.624679,0.40128 0.393764,1.3e-4 0.628976,-0.40419 0.235213,-0.40437 0.24357,-1.10176 0.0084,-0.69388 -0.217202,-1.09848 -0.225476,-0.40809 -0.619239,-0.40828 z m 0.0065,-0.54394 q 0.642883,-6e-5 1.003336,0.54442 0.360458,0.54414 0.348924,1.50653 -0.01149,0.9589 -0.385028,1.50617 -0.373495,0.54379 -1.016374,0.54348 -0.645561,0 -1.006014,-0.54442 -0.357738,-0.54762 -0.346246,-1.50654 0.01153,-0.96238 0.38235,-1.50616 0.373494,-0.54378 1.019052,-0.54348 z"
+ style="stroke-width:0.04140124"
+ id="path935"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m -11.933519,203.21522 v -1.80346 h 0.489436 v 1.78484 q 0,0.42294 0.164918,0.63574 0.164919,0.21013 0.494756,0.21013 0.396336,0 0.625094,-0.25269 0.2314181,-0.2527 0.2314181,-0.68894 v -1.68908 h 0.4894356 v 2.97917 h -0.4894356 v -0.45752 q -0.1782181,0.27132 -0.4149561,0.40432 -0.234078,0.13034 -0.545295,0.13034 -0.513376,0 -0.779373,-0.3192 -0.265998,-0.31919 -0.265998,-0.93365 z"
+ style="stroke-width:0.03603381"
+ id="path937" />
+ <path
+ d="m -7.9658571,203.80978 -0.024652,1.71981 -0.4921605,3.5e-4 0.06416,-4.47613 0.4921449,7.2e-4 -0.00706,0.49221 q 0.1584465,-0.28946 0.3945437,-0.42835 0.2387989,-0.14178 0.5660138,-0.14165 0.5426939,5.1e-4 0.8738313,0.46939 0.3337932,0.46918 0.322837,1.23353 -0.010956,0.76437 -0.3581958,1.23327 -0.3445794,0.46891 -0.8872775,0.4687 -0.3272152,-1.1e-4 -0.5619882,-0.1392 -0.2320716,-0.14197 -0.3822179,-0.43156 z m 1.6815651,-1.13142 q 0.00842,-0.58774 -0.2102668,-0.92078 -0.2159894,-0.33596 -0.604391,-0.33611 -0.3884028,-6e-5 -0.6166797,0.33563 -0.2255762,0.33287 -0.2340008,0.92061 -0.00842,0.58776 0.2075647,0.9237 0.2186915,0.33304 0.6070931,0.33319 0.3884028,7e-5 0.6139776,-0.3327 0.2282782,-0.33578 0.2367029,-0.92354 z"
+ style="stroke-width:0.03759631"
+ id="path939"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ <text
+ id="text983"
+ y="224.61163"
+ x="31.011026"
+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+ xml:space="preserve"><tspan
+ style="stroke-width:0.26458332"
+ y="233.9754"
+ x="31.011026"
+ id="tspan981"
+ sodipodi:role="line" /></text>
+ <g
+ aria-label="father & son"
+ transform="matrix(1.0190173,0,0,0.9813376,0.5291667,0.52916667)"
+ style="font-style:normal;font-weight:normal;font-size:8.01353455px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20033836"
+ id="text1057" />
+ <g
+ id="g8072"
+ transform="matrix(0.26458333,0,0,0.26458333,9.1781916,289.45955)">
+ <g
+ style="display:inline"
+ inkscape:label="Layer 1"
+ id="layer4" />
+ <path
+ id="rect5872"
+ d="m 11.987289,9.3234482 h 7.991524 v 3.9957608 h -7.991524 z"
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ id="rect5874"
+ d="m 14.667374,10.662096 h 3.995763 v 1.331921 h -3.995763 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:0.98571424;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ id="rect5878"
+ d="m -29.323654,9.3234482 h 7.989551 v 3.9957608 h -7.989551 z"
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="scale(-1,1)"
+ inkscape:connector-curvature="0" />
+ <path
+ id="rect5880"
+ d="m -26.64423,10.662096 h 3.994777 v 1.331921 h -3.994777 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:0.98571424;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="scale(-1,1)"
+ inkscape:connector-curvature="0" />
+ <path
+ id="rect5882"
+ d="m 19.995058,14.667374 h 1.331921 v 3.995762 h -1.331921 z"
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ id="rect5884"
+ d="m 21.326979,17.331215 h 1.315677 v 1.33192 h -1.315677 z"
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ id="rect5886"
+ d="m 11.954803,20.011301 h 2.696328 v 2.663842 h -2.696328 z"
+ style="opacity:1;fill:#001800;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ id="rect5888"
+ d="m 27.970341,20.011301 h 2.696327 v 2.663842 h -2.696327 z"
+ style="opacity:1;fill:#001800;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ id="rect5890"
+ d="m 14.651131,20.011301 h 13.351695 v 1.33192 H 14.651131 Z"
+ style="opacity:1;fill:#001800;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+</svg>
diff --git a/src/Computerscare.cpp b/src/Computerscare.cpp
@@ -11,4 +11,5 @@ void init(Plugin *p) {
p->addModel(modelComputerscareDebug);
p->addModel(modelComputerscarePatchSequencer);
+ p->addModel(modelComputerscareLaundrySoup);
}
diff --git a/src/Computerscare.hpp b/src/Computerscare.hpp
@@ -19,6 +19,7 @@ extern Plugin *plugin;
// Forward-declare each Model, defined in each module source file
extern Model *modelComputerscareDebug;
extern Model *modelComputerscarePatchSequencer;
+extern Model *modelComputerscareLaundrySoup;
struct OutPort : SVGPort {
OutPort() {
diff --git a/src/ComputerscareLaundrySoup.cpp b/src/ComputerscareLaundrySoup.cpp
@@ -0,0 +1,227 @@
+#include "Computerscare.hpp"
+#include "dsp/digital.hpp"
+#include "dsp/filter.hpp"
+
+#include <string>
+#include <sstream>
+#include <iomanip>
+
+struct ComputerscareLaundrySoup;
+
+class MyTextField : public LedDisplayTextField {
+public:
+ MyTextField() : LedDisplayTextField() {}
+ void setModule(ComputerscareLaundrySoup* _module) {
+ module = _module;
+ }
+ virtual void onTextChange() override;
+
+private:
+ ComputerscareLaundrySoup* module;
+};
+
+struct ComputerscareLaundrySoup : Module {
+ enum ParamIds {
+ NUM_PARAMS
+ };
+ enum InputIds {
+ CLOCK_INPUT,
+ RESET_INPUT,
+ NUM_INPUTS
+ };
+ enum OutputIds {
+ TRG_OUTPUT,
+ NUM_OUTPUTS
+ };
+ enum LightIds {
+ SWITCH_LIGHTS,
+ NUM_LIGHTS
+ };
+
+ SchmittTrigger clockTrigger;
+ SchmittTrigger resetTriggerInput;
+
+ MyTextField* textField;
+
+ std::vector<int> sequence;
+ std::vector<int> sequenceSums;
+
+ int stepCity = 0;
+ int stepState = 0;
+ int stepCounty = 0;
+ int currentChar = 0;
+ int numSteps = 0;
+ int numStepBlocks = 0;
+
+ bool compiled = false;
+
+ComputerscareLaundrySoup() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {}
+ void step() override;
+
+
+
+ json_t *toJson() override
+ {
+ json_t *rootJ = json_object();
+
+ return rootJ;
+ }
+
+ void fromJson(json_t *rootJ) override
+ {
+
+ }
+
+ void onRandomize() override {
+
+ }
+ // For more advanced Module features, read Rack's engine.hpp header file
+ // - toJson, fromJson: serialization of internal data
+ // - onSampleRateChange: event triggered by a change of sample rate
+ // - onReset, onRandomize, onCreate, onDelete: implements special behavior when user clicks these from the context menu
+
+
+void parseFormula(std::string expr) {
+ int current;
+ sequence.resize(0);
+ sequenceSums.resize(0);
+ sequenceSums.push_back(0);
+ numSteps = 0;
+ for(char& c : expr) {
+ //do_things_with(c);
+ currentChar = c - '0';
+ numSteps += currentChar;
+ sequenceSums.push_back(numSteps);
+ sequence.push_back(currentChar);
+ }
+ numStepBlocks = sequence.size();
+ }
+
+void onCreate () override
+ {
+ compiled = false;
+ if (textField->text.size() > 0) {
+ parseFormula(textField->text);
+ compiled = true;
+ }
+ }
+
+ void onReset () override
+ {
+ onCreate();
+ }
+ void incrementInternalStep() {
+ this->stepCity += 1;
+ this->stepState += 1;
+ if(this->stepCity >= sequence[this->stepCounty]) {
+ this->stepCity = 0;
+ this->stepCounty += 1;
+ }
+ if(this->stepCounty >= this->numStepBlocks) {
+ this->stepCounty = 0;
+ this->stepCity = 0;
+ this->stepState = 0;
+ }
+ }
+
+};
+
+
+
+void ComputerscareLaundrySoup::step() {
+ // fun
+bool gateIn = false;
+bool activeStep = false;
+
+if(this->numStepBlocks > 0) {
+ if (inputs[CLOCK_INPUT].active) {
+ // External clock
+ if (clockTrigger.process(inputs[CLOCK_INPUT].value)) {
+ incrementInternalStep();
+ }
+ gateIn = clockTrigger.isHigh();
+ }
+ activeStep = (sequenceSums[this->stepCounty] == this->stepState);
+
+}
+ // 112
+ // [0,1,2]
+ outputs[TRG_OUTPUT].value = (gateIn && activeStep) ? 10.0f : 0.0f;
+}
+
+////////////////////////////////////
+struct NumberDisplayWidget3 : TransparentWidget {
+
+ int *value;
+ std::shared_ptr<Font> font;
+
+ NumberDisplayWidget3() {
+ font = Font::load(assetPlugin(plugin, "res/digital-7.ttf"));
+ };
+
+ void draw(NVGcontext *vg) override
+ {
+ // Background
+ NVGcolor backgroundColor = nvgRGB(0x00, 0x00, 0x00);
+
+ nvgBeginPath(vg);
+ nvgRoundedRect(vg, 0.0, 0.0, box.size.x, box.size.y, 4.0);
+ nvgFillColor(vg, backgroundColor);
+ nvgFill(vg);
+
+ // text
+ nvgFontSize(vg, 13);
+ nvgFontFaceId(vg, font->handle);
+ nvgTextLetterSpacing(vg, 2.5);
+
+ std::stringstream to_display;
+ to_display << std::setw(3) << *value;
+
+ Vec textPos = Vec(6.0f, 17.0f);
+ NVGcolor textColor = nvgRGB(0xC0, 0xE7, 0xDE);
+ nvgFillColor(vg, textColor);
+ nvgText(vg, textPos.x, textPos.y, to_display.str().c_str(), NULL);
+ }
+};
+
+void MyTextField::onTextChange() {
+ module->onCreate();
+}
+
+struct ComputerscareLaundrySoupWidget : ModuleWidget {
+
+ ComputerscareLaundrySoupWidget(ComputerscareLaundrySoup *module) : ModuleWidget(module) {
+ setPanel(SVG::load(assetPlugin(plugin, "res/ComputerscareLaundrySoupPanel.svg")));
+
+ //clock input
+ addInput(Port::create<InPort>(Vec(14, 13), Port::INPUT, module, ComputerscareLaundrySoup::CLOCK_INPUT));
+
+ //reset input
+ addInput(Port::create<InPort>(Vec(54, 13), Port::INPUT, module, ComputerscareLaundrySoup::RESET_INPUT));
+
+ addOutput(Port::create<InPort>(Vec(33 , 200), Port::OUTPUT, module, ComputerscareLaundrySoup::TRG_OUTPUT));
+
+
+ textField = Widget::create<MyTextField>(mm2px(Vec(1, 25)));
+ textField->setModule(module);
+ textField->box.size = mm2px(Vec(63, 20));
+ textField->multiline = true;
+ addChild(textField);
+ module->textField = textField;
+
+ //active step display
+ NumberDisplayWidget3 *display = new NumberDisplayWidget3();
+ display->box.pos = Vec(56,40);
+ display->box.size = Vec(50, 20);
+ display->value = &module->stepState;
+ addChild(display);
+
+ }
+ MyTextField* textField;
+};
+
+// Specify the Module and ModuleWidget subclass, human-readable
+// author name for categorization per plugin, module slug (should never
+// change), human-readable module name, and any number of tags
+// (found in `include/tags.hpp`) separated by commas.
+Model *modelComputerscareLaundrySoup = Model::create<ComputerscareLaundrySoup, ComputerscareLaundrySoupWidget>("computerscare", "computerscare-laundry-soup", "Laundry Soup", SEQUENCER_TAG);
diff --git a/src/ComputerscarePatchSequencer.cpp b/src/ComputerscarePatchSequencer.cpp
@@ -277,7 +277,6 @@ ComputerscarePatchSequencer() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_
bool connectedInputs[10];
bool connectedOutputs[10];
int numConnectedInputs=0;
- int numConnectedOutputs=0;
std::vector<int> connectedInputIndices;