litoid 0.1.0__py3-none-any.whl → 0.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- litoid/.DS_Store +0 -0
- litoid/__main__.py +2 -1
- litoid/io/.DS_Store +0 -0
- litoid/io/dmx.py +1 -0
- litoid/io/hotkey.py +5 -3
- litoid/io/key_mouse.py +4 -2
- litoid/io/midi/__init__.py +2 -2
- litoid/io/midi/message.py +20 -28
- litoid/io/midi/midi.py +9 -5
- litoid/io/osc.py +5 -3
- litoid/io/player.py +8 -5
- litoid/io/recorder.py +7 -3
- litoid/io/track.py +5 -4
- litoid/litoid.py +5 -2
- litoid/log.py +6 -4
- litoid/scenes/.DS_Store +0 -0
- litoid/scenes/compose.py +2 -1
- litoid/scenes/rgb_keyboard.py +1 -0
- litoid/state/.DS_Store +0 -0
- litoid/state/instrument.py +3 -2
- litoid/state/instruments.py +6 -4
- litoid/state/lamp.py +6 -4
- litoid/state/state.py +9 -9
- litoid/ui/.DS_Store +0 -0
- litoid/ui/action.py +4 -3
- litoid/ui/canvas_window.py +1 -1
- litoid/ui/controller.py +9 -6
- litoid/ui/drawing_canvas.py +2 -1
- litoid/ui/event.py +3 -1
- litoid/ui/layout.py +9 -7
- litoid/ui/model.py +2 -1
- litoid/ui/ui.py +10 -6
- litoid/ui/view.py +7 -5
- litoid/util/.DS_Store +0 -0
- litoid/util/file.py +2 -1
- litoid/util/has_thread.py +4 -3
- litoid/util/play.py +3 -2
- litoid/util/smooth.py +2 -1
- litoid/util/thread_queue.py +3 -1
- litoid/util/timed_heap.py +5 -2
- litoid-0.2.0.dist-info/METADATA +37 -0
- litoid-0.2.0.dist-info/RECORD +54 -0
- {litoid-0.1.0.dist-info → litoid-0.2.0.dist-info}/WHEEL +1 -1
- litoid-0.1.0.dist-info/LICENSE +0 -21
- litoid-0.1.0.dist-info/METADATA +0 -35
- litoid-0.1.0.dist-info/RECORD +0 -49
litoid/.DS_Store
ADDED
|
Binary file
|
litoid/__main__.py
CHANGED
litoid/io/.DS_Store
ADDED
|
Binary file
|
litoid/io/dmx.py
CHANGED
litoid/io/hotkey.py
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
from
|
|
1
|
+
from collections.abc import Callable
|
|
2
2
|
from functools import cached_property, partial
|
|
3
|
-
|
|
4
|
-
from typing import Callable
|
|
3
|
+
|
|
5
4
|
import datacls
|
|
5
|
+
from pynput import keyboard
|
|
6
|
+
|
|
7
|
+
from ..util.has_thread import HasThread
|
|
6
8
|
|
|
7
9
|
|
|
8
10
|
@datacls.mutable
|
litoid/io/key_mouse.py
CHANGED
litoid/io/midi/__init__.py
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
__all__ = 'MidiInput',
|
|
1
|
+
__all__ = ('MidiInput',)
|
|
2
2
|
|
|
3
|
-
from .
|
|
3
|
+
from .midi import MidiInput
|
litoid/io/midi/message.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import clsprop
|
|
2
2
|
import xmod
|
|
3
3
|
|
|
4
|
-
_PITCH =
|
|
4
|
+
_PITCH = 0xE0
|
|
5
5
|
_SYSEX = 0xF0
|
|
6
6
|
|
|
7
7
|
|
|
@@ -18,10 +18,9 @@ class MidiMessage:
|
|
|
18
18
|
if data is not None:
|
|
19
19
|
self.data = data
|
|
20
20
|
else:
|
|
21
|
-
self.data =
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
)
|
|
21
|
+
self.data = [self.status_start] + [
|
|
22
|
+
kwargs.pop(f, 0) or 0 for f in self.fields
|
|
23
|
+
]
|
|
25
24
|
|
|
26
25
|
if bad := [k for k, v in kwargs.items() if v is not None]:
|
|
27
26
|
assert (data is None) or not kwargs, f'{data=} {kwargs=}'
|
|
@@ -40,11 +39,7 @@ class MidiMessage:
|
|
|
40
39
|
|
|
41
40
|
@clsprop
|
|
42
41
|
def size(cls) -> int:
|
|
43
|
-
return (
|
|
44
|
-
len(cls.fields)
|
|
45
|
-
+ (not cls.has_channel)
|
|
46
|
-
+ (cls.status_start == _PITCH)
|
|
47
|
-
)
|
|
42
|
+
return len(cls.fields) + (not cls.has_channel) + (cls.status_start == _PITCH)
|
|
48
43
|
|
|
49
44
|
@property
|
|
50
45
|
def status(self):
|
|
@@ -106,7 +101,7 @@ def _class(status_start, name, *props):
|
|
|
106
101
|
if _has_channel(status_start):
|
|
107
102
|
parent = MidiChannelMessage
|
|
108
103
|
if status_start == _PITCH:
|
|
109
|
-
fields = 'pitch',
|
|
104
|
+
fields = ('pitch',)
|
|
110
105
|
|
|
111
106
|
fields = 'channel', *props
|
|
112
107
|
else:
|
|
@@ -184,35 +179,32 @@ _CHANNEL = (
|
|
|
184
179
|
# Channel messages
|
|
185
180
|
_class(0x80, 'NoteOff', 'note', 'velocity'),
|
|
186
181
|
_class(0x90, 'NoteOn', 'note', 'velocity'),
|
|
187
|
-
_class(
|
|
188
|
-
_class(
|
|
189
|
-
_class(
|
|
190
|
-
_class(
|
|
182
|
+
_class(0xA0, 'Polytouch', 'note', 'value'),
|
|
183
|
+
_class(0xB0, 'ControlChange', 'control', 'value'),
|
|
184
|
+
_class(0xC0, 'ProgramChange', 'program'),
|
|
185
|
+
_class(0xD0, 'Aftertouch', 'value'),
|
|
191
186
|
_class(_PITCH, 'Pitch', 'pitch_lsb', 'pitch_hsb'),
|
|
192
187
|
)
|
|
193
188
|
|
|
194
189
|
_SYSTEM = (
|
|
195
190
|
# System common messages.
|
|
196
191
|
_class(_SYSEX, 'Sysex'),
|
|
197
|
-
_class(
|
|
198
|
-
_class(
|
|
199
|
-
_class(
|
|
200
|
-
|
|
192
|
+
_class(0xF1, 'QuarterFrame', 'frame_type', 'frame_value'),
|
|
193
|
+
_class(0xF2, 'Songpos', 'pos'),
|
|
194
|
+
_class(0xF3, 'SongSelect', 'song'),
|
|
201
195
|
None, # 0xf4
|
|
202
196
|
None, # 0xf5
|
|
203
|
-
_class(
|
|
197
|
+
_class(0xF6, 'TuneRequest'),
|
|
204
198
|
None, # 0xf7 is sysex end
|
|
205
|
-
|
|
206
199
|
# System real time messages.
|
|
207
|
-
_class(
|
|
200
|
+
_class(0xF8, 'Clock'),
|
|
208
201
|
None, # 0xf9
|
|
209
|
-
_class(
|
|
210
|
-
_class(
|
|
211
|
-
|
|
212
|
-
_class(0xfc, 'Stop'),
|
|
202
|
+
_class(0xFA, 'Start'),
|
|
203
|
+
_class(0xFB, 'Continue'),
|
|
204
|
+
_class(0xFC, 'Stop'),
|
|
213
205
|
None, # 0xfd
|
|
214
|
-
_class(
|
|
215
|
-
_class(
|
|
206
|
+
_class(0xFE, 'ActiveSensing'),
|
|
207
|
+
_class(0xFF, 'Reset'),
|
|
216
208
|
)
|
|
217
209
|
|
|
218
210
|
MESSAGE_CLASSES = tuple(c for c in _CHANNEL for i in range(16)) + _SYSTEM
|
litoid/io/midi/midi.py
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
import time
|
|
2
|
+
from collections.abc import Callable
|
|
2
3
|
from functools import cached_property
|
|
3
|
-
|
|
4
|
-
from rtmidi import midiutil, MidiIn
|
|
5
|
-
from typing import Callable
|
|
4
|
+
|
|
6
5
|
import datacls
|
|
7
6
|
import mido
|
|
8
|
-
import
|
|
7
|
+
from rtmidi import MidiIn, midiutil
|
|
8
|
+
|
|
9
|
+
from litoid.util.has_thread import HasThread
|
|
10
|
+
|
|
11
|
+
from .message import MidiMessage
|
|
12
|
+
|
|
9
13
|
SPIN_TIME = 0.003
|
|
10
14
|
|
|
11
15
|
|
litoid/io/osc.py
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
from
|
|
1
|
+
from collections.abc import Callable
|
|
2
2
|
from functools import cached_property
|
|
3
|
+
|
|
4
|
+
import datacls
|
|
3
5
|
from pythonosc.dispatcher import Dispatcher
|
|
4
6
|
from pythonosc.osc_server import BlockingOSCUDPServer
|
|
5
|
-
|
|
6
|
-
import
|
|
7
|
+
|
|
8
|
+
from ..util.thread_queue import ThreadQueue
|
|
7
9
|
|
|
8
10
|
|
|
9
11
|
@datacls.mutable
|
litoid/io/player.py
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
from .
|
|
1
|
+
import time
|
|
2
|
+
from collections.abc import Callable
|
|
3
3
|
from functools import cached_property, total_ordering
|
|
4
|
-
|
|
5
|
-
from typing import Callable
|
|
4
|
+
|
|
6
5
|
import datacls
|
|
7
|
-
|
|
6
|
+
|
|
7
|
+
from litoid.util.timed_heap import TimedHeap
|
|
8
|
+
|
|
9
|
+
from .recorder import Recorder
|
|
10
|
+
from .track import Track
|
|
8
11
|
|
|
9
12
|
INFINITE = float('inf')
|
|
10
13
|
|
litoid/io/recorder.py
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
from litoid import log
|
|
1
|
+
import time as _time
|
|
3
2
|
from pathlib import Path
|
|
3
|
+
|
|
4
4
|
import datacls
|
|
5
5
|
import numpy as np
|
|
6
|
-
|
|
6
|
+
|
|
7
|
+
from litoid import log
|
|
8
|
+
|
|
9
|
+
from .track import Track
|
|
7
10
|
|
|
8
11
|
SEP = '-'
|
|
9
12
|
|
|
@@ -21,6 +24,7 @@ class Recorder:
|
|
|
21
24
|
This only works for protocols where you can deduce the length of the packet
|
|
22
25
|
from the initial bytes only.
|
|
23
26
|
"""
|
|
27
|
+
|
|
24
28
|
name: str
|
|
25
29
|
path: Path | None = None
|
|
26
30
|
tracks: dict = datacls.field(dict[str, Track])
|
litoid/io/track.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from functools import cached_property
|
|
2
|
+
|
|
2
3
|
import datacls
|
|
3
4
|
import numpy as np
|
|
4
5
|
|
|
@@ -26,7 +27,7 @@ class Track:
|
|
|
26
27
|
|
|
27
28
|
def get_message(self, i) -> tuple[np.ndarray, float]:
|
|
28
29
|
b = i * self.byte_width
|
|
29
|
-
return self.data[b:b + self.byte_width]
|
|
30
|
+
return self.data[b : b + self.byte_width]
|
|
30
31
|
|
|
31
32
|
def append(self, data: np.ndarray, time: float):
|
|
32
33
|
assert self.byte_width == len(data)
|
|
@@ -42,12 +43,12 @@ class Track:
|
|
|
42
43
|
self.count += 1
|
|
43
44
|
|
|
44
45
|
def asdict(self):
|
|
45
|
-
return dict(zip(('times', 'data'), self.astuple()))
|
|
46
|
+
return dict(zip(('times', 'data'), self.astuple(), strict=True))
|
|
46
47
|
|
|
47
48
|
def astuple(self):
|
|
48
49
|
return (
|
|
49
|
-
self.times[0:self.count],
|
|
50
|
-
self.data[0:self.byte_width * self.count],
|
|
50
|
+
self.times[0 : self.count],
|
|
51
|
+
self.data[0 : self.byte_width * self.count],
|
|
51
52
|
)
|
|
52
53
|
|
|
53
54
|
@classmethod
|
litoid/litoid.py
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
# DEPRECATED
|
|
2
2
|
|
|
3
|
-
from . import app
|
|
4
|
-
from .state import state
|
|
5
3
|
from functools import cached_property
|
|
6
4
|
from pathlib import Path
|
|
5
|
+
|
|
7
6
|
import dtyper
|
|
8
7
|
import xmod
|
|
9
8
|
|
|
9
|
+
from . import app
|
|
10
|
+
from .state import state
|
|
11
|
+
|
|
10
12
|
|
|
11
13
|
@xmod
|
|
12
14
|
@app.command()
|
|
@@ -14,6 +16,7 @@ def litoid(
|
|
|
14
16
|
state_path: Path = app.Argument(None, help='Path to the state file'),
|
|
15
17
|
):
|
|
16
18
|
import IPython
|
|
19
|
+
|
|
17
20
|
litoid = Litoid(**locals())
|
|
18
21
|
|
|
19
22
|
scope_vars = {'li': litoid, 'litoid': litoid}
|
litoid/log.py
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
from .util import play
|
|
2
|
-
from pathlib import Path
|
|
3
|
-
from functools import wraps
|
|
4
|
-
import PySimpleGUI as sg
|
|
5
1
|
import inspect
|
|
6
2
|
import os
|
|
7
3
|
import sys
|
|
4
|
+
from functools import wraps
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
import PySimpleGUI as sg
|
|
8
8
|
import xmod
|
|
9
9
|
|
|
10
|
+
from .util import play
|
|
11
|
+
|
|
10
12
|
ROOT = Path(__file__).parent
|
|
11
13
|
DEBUG = os.environ.get('DEBUG', '').strip().lower().startswith('t')
|
|
12
14
|
POPUP_ERRORS = False
|
litoid/scenes/.DS_Store
ADDED
|
Binary file
|
litoid/scenes/compose.py
CHANGED
litoid/scenes/rgb_keyboard.py
CHANGED
litoid/state/.DS_Store
ADDED
|
Binary file
|
litoid/state/instrument.py
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
from .level import Level
|
|
2
1
|
from collections import ChainMap
|
|
3
2
|
from functools import cached_property
|
|
3
|
+
|
|
4
4
|
import datacls
|
|
5
5
|
|
|
6
|
+
from .level import Level
|
|
6
7
|
|
|
7
8
|
Channel = int | str
|
|
8
9
|
|
|
@@ -13,7 +14,7 @@ class ValueNames(dict):
|
|
|
13
14
|
super().__init__((k, v) for v, k in items)
|
|
14
15
|
|
|
15
16
|
self.inv = []
|
|
16
|
-
for (v1, k1), (v2,
|
|
17
|
+
for (v1, k1), (v2, _) in zip(items, items[1:] + [(256, None)], strict=True):
|
|
17
18
|
self.inv.extend(k1 for i in range(v1, v2))
|
|
18
19
|
|
|
19
20
|
|
litoid/state/instruments.py
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
from ..util import file
|
|
2
|
-
from .instrument import Instrument
|
|
3
1
|
from functools import cache
|
|
4
2
|
from pathlib import Path
|
|
3
|
+
|
|
5
4
|
import xmod
|
|
6
5
|
|
|
7
|
-
|
|
6
|
+
from ..util import file
|
|
7
|
+
from .instrument import Instrument
|
|
8
|
+
|
|
9
|
+
__all__ = ('instruments',)
|
|
8
10
|
|
|
9
11
|
ROOT = Path(__file__).parents[2]
|
|
10
12
|
DATA = ROOT / 'data'
|
|
@@ -22,7 +24,7 @@ def instruments():
|
|
|
22
24
|
presets = files('presets')
|
|
23
25
|
|
|
24
26
|
assert defs.keys() == presets.keys()
|
|
25
|
-
kdp = zip(defs.keys(), defs.values(), presets.values())
|
|
27
|
+
kdp = zip(defs.keys(), defs.values(), presets.values(), strict=True)
|
|
26
28
|
instruments = {k: Instrument(k, user_presets=p, **d) for k, d, p in kdp}
|
|
27
29
|
return instruments
|
|
28
30
|
|
litoid/state/lamp.py
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
from . import instruments
|
|
2
|
-
from ..io.dmx import DMX
|
|
3
1
|
from functools import cached_property
|
|
2
|
+
|
|
4
3
|
import datacls
|
|
5
4
|
|
|
5
|
+
from ..io.dmx import DMX
|
|
6
|
+
from . import instruments
|
|
7
|
+
|
|
6
8
|
|
|
7
9
|
@datacls.mutable
|
|
8
10
|
class LampDesc:
|
|
@@ -19,7 +21,7 @@ class LampDesc:
|
|
|
19
21
|
return len(self.instrument.channels)
|
|
20
22
|
|
|
21
23
|
def make(self, dmx: DMX):
|
|
22
|
-
frame = dmx.frame[self.offset:self.offset + self.size]
|
|
24
|
+
frame = dmx.frame[self.offset : self.offset + self.size]
|
|
23
25
|
return Lamp(frame=frame, dmx=dmx, **self.asdict())
|
|
24
26
|
|
|
25
27
|
@cached_property
|
|
@@ -35,7 +37,7 @@ class Lamp(LampDesc):
|
|
|
35
37
|
def set_levels(self, d: dict):
|
|
36
38
|
d = self.instrument.remap_dict(d)
|
|
37
39
|
it = range(len(self.frame))
|
|
38
|
-
self.frame[:] =
|
|
40
|
+
self.frame[:] = bytes(max(0, min(255, d.get(i, 0))) for i in it)
|
|
39
41
|
self.send_packet()
|
|
40
42
|
|
|
41
43
|
def set_level(self, i: int | slice, v):
|
litoid/state/state.py
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
from ..io import dmx, key_mouse, midi, osc
|
|
3
|
-
from ..util import file, is_running, timed_heap
|
|
1
|
+
import time
|
|
4
2
|
from functools import cached_property, wraps
|
|
5
3
|
from pathlib import Path
|
|
4
|
+
|
|
6
5
|
import datacls
|
|
7
|
-
import time
|
|
8
6
|
import xmod
|
|
9
7
|
|
|
8
|
+
from ..io import dmx, key_mouse, midi, osc
|
|
9
|
+
from ..util import file, is_running, timed_heap
|
|
10
|
+
from . import lamp as _lamp
|
|
11
|
+
|
|
10
12
|
SPIN_TIME = 0.05
|
|
11
13
|
STATE_FILE = Path(__file__).parents[2] / 'state.toml'
|
|
12
14
|
assert STATE_FILE.exists()
|
|
@@ -39,10 +41,7 @@ class State(is_running.IsRunning):
|
|
|
39
41
|
@cached_property
|
|
40
42
|
def midi_input(self):
|
|
41
43
|
if self.midi_input_name:
|
|
42
|
-
return midi.MidiInput(
|
|
43
|
-
callback=self.callback,
|
|
44
|
-
name=self.midi_input_name
|
|
45
|
-
)
|
|
44
|
+
return midi.MidiInput(callback=self.callback, name=self.midi_input_name)
|
|
46
45
|
|
|
47
46
|
@cached_property
|
|
48
47
|
def mouse(self):
|
|
@@ -73,7 +72,8 @@ class State(is_running.IsRunning):
|
|
|
73
72
|
self.mouse.start()
|
|
74
73
|
else:
|
|
75
74
|
self.keyboard.start()
|
|
76
|
-
self.lamps
|
|
75
|
+
self.lamps # noqa: B018
|
|
76
|
+
|
|
77
77
|
self.midi_input and self.midi_input.start()
|
|
78
78
|
self.osc_server.start()
|
|
79
79
|
self.timed_heap.start()
|
litoid/ui/.DS_Store
ADDED
|
Binary file
|
litoid/ui/action.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
from .. import log
|
|
2
|
-
import PySimpleGUI as sg
|
|
3
1
|
import pyperclip
|
|
2
|
+
import PySimpleGUI as sg
|
|
3
|
+
|
|
4
|
+
from .. import log
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
class Action:
|
|
@@ -81,7 +82,7 @@ class Action:
|
|
|
81
82
|
|
|
82
83
|
def revert(self):
|
|
83
84
|
ch = sg.popup_ok_cancel(
|
|
84
|
-
f'Revert to saved for {self.controller.iname}?',
|
|
85
|
+
f'Revert to saved for {self.controller.iname}?', title='Revert'
|
|
85
86
|
)
|
|
86
87
|
if ch == 'OK':
|
|
87
88
|
self.model.revert()
|
litoid/ui/canvas_window.py
CHANGED
litoid/ui/controller.py
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
from litoid import log
|
|
5
|
+
from litoid.io.midi.message import ControlChange
|
|
6
|
+
from litoid.state.scene import CallbackScene
|
|
7
|
+
|
|
1
8
|
from . import action
|
|
2
9
|
from .model import Model
|
|
3
10
|
from .view import View
|
|
4
|
-
from litoid import log
|
|
5
|
-
from litoid.state.scene import CallbackScene
|
|
6
|
-
from litoid.io.midi.message import ControlChange
|
|
7
|
-
from pathlib import Path
|
|
8
|
-
import json
|
|
9
11
|
|
|
10
12
|
|
|
11
13
|
class Controller:
|
|
@@ -62,7 +64,8 @@ class Controller:
|
|
|
62
64
|
self.view.update_presets(self.model.iname, value=preset_name)
|
|
63
65
|
self.lamp.set_levels(self.model.selected_preset)
|
|
64
66
|
self.view.update_instrument(
|
|
65
|
-
self.instrument,
|
|
67
|
+
self.instrument,
|
|
68
|
+
self.model.selected_preset,
|
|
66
69
|
)
|
|
67
70
|
|
|
68
71
|
def blackout(self):
|
litoid/ui/drawing_canvas.py
CHANGED
litoid/ui/event.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from functools import cached_property
|
|
2
|
-
|
|
2
|
+
|
|
3
3
|
import datacls
|
|
4
|
+
import PySimpleGUI as sg
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
@datacls
|
|
@@ -11,6 +12,7 @@ class Event:
|
|
|
11
12
|
action[.name[.channel]]
|
|
12
13
|
|
|
13
14
|
"""
|
|
15
|
+
|
|
14
16
|
window: str
|
|
15
17
|
key: str
|
|
16
18
|
values: dict | None = None
|
litoid/ui/layout.py
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
from . defaults import COMMANDS
|
|
2
1
|
from functools import partial
|
|
2
|
+
|
|
3
3
|
import PySimpleGUI as sg
|
|
4
4
|
import xmod
|
|
5
5
|
|
|
6
|
+
from .defaults import COMMANDS
|
|
7
|
+
|
|
6
8
|
SLIDER = {
|
|
7
9
|
'range': (0, 255),
|
|
8
10
|
'orientation': 'h',
|
|
@@ -15,14 +17,14 @@ COMBO = {
|
|
|
15
17
|
'readonly': True,
|
|
16
18
|
}
|
|
17
19
|
BUTTON = {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
+
'border_width': 1,
|
|
21
|
+
'expand_x': not True,
|
|
20
22
|
}
|
|
21
23
|
TEXT = {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
'relief': 'raised',
|
|
25
|
+
'border_width': 1,
|
|
26
|
+
'expand_x': not True,
|
|
27
|
+
'justification': 'center',
|
|
26
28
|
}
|
|
27
29
|
Text = partial(sg.Text, **TEXT)
|
|
28
30
|
SLIDER_SIZE = 32, 30
|
litoid/ui/model.py
CHANGED
litoid/ui/ui.py
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
from ..util.is_running import IsRunning
|
|
2
|
-
from .event import Event
|
|
3
1
|
from functools import cached_property
|
|
4
|
-
from litoid import log
|
|
5
2
|
from pathlib import Path
|
|
6
|
-
|
|
3
|
+
|
|
7
4
|
import datacls
|
|
5
|
+
import PySimpleGUI as sg
|
|
6
|
+
|
|
7
|
+
from litoid import log
|
|
8
|
+
|
|
9
|
+
from ..util.is_running import IsRunning
|
|
10
|
+
from .event import Event
|
|
8
11
|
|
|
9
12
|
SUFFIX = '.ico'
|
|
10
13
|
ICON_PATH = Path(__file__).parents[2] / 'images/tom-swirly.ico'
|
|
@@ -55,9 +58,10 @@ class UI(UIDesc, IsRunning):
|
|
|
55
58
|
title,
|
|
56
59
|
[
|
|
57
60
|
*([sg.T(m)] for m in messages),
|
|
58
|
-
[sg.Yes(s=10), sg.No(s=10), sg.Cancel(s=15)]
|
|
61
|
+
[sg.Yes(s=10), sg.No(s=10), sg.Cancel(s=15)],
|
|
59
62
|
],
|
|
60
|
-
disable_close=True
|
|
63
|
+
disable_close=True,
|
|
64
|
+
)
|
|
61
65
|
choice, _ = popup.read(close=True)
|
|
62
66
|
return choice
|
|
63
67
|
|
litoid/ui/view.py
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
from . import
|
|
2
|
-
from .drawing_canvas import DrawingCanvas
|
|
3
|
-
from ..state.level import Level
|
|
4
|
-
from ..state.state import State, make_state
|
|
1
|
+
from collections.abc import Callable
|
|
5
2
|
from functools import cached_property
|
|
6
|
-
|
|
3
|
+
|
|
7
4
|
import datacls
|
|
8
5
|
|
|
6
|
+
from ..state.level import Level
|
|
7
|
+
from ..state.state import State, make_state
|
|
8
|
+
from . import defaults, layout, ui
|
|
9
|
+
from .drawing_canvas import DrawingCanvas
|
|
10
|
+
|
|
9
11
|
|
|
10
12
|
@datacls.mutable
|
|
11
13
|
class View(ui.UI):
|
litoid/util/.DS_Store
ADDED
|
Binary file
|
litoid/util/file.py
CHANGED
litoid/util/has_thread.py
CHANGED
litoid/util/play.py
CHANGED
litoid/util/smooth.py
CHANGED
litoid/util/thread_queue.py
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
from .has_thread import HasThread
|
|
2
1
|
from functools import cached_property
|
|
3
2
|
from queue import Queue
|
|
4
3
|
|
|
4
|
+
from .has_thread import HasThread
|
|
5
|
+
|
|
5
6
|
|
|
6
7
|
class ThreadQueue(HasThread):
|
|
7
8
|
maxsize = 0
|
|
8
9
|
thread_count = 1
|
|
9
10
|
callback = print
|
|
10
11
|
thread = None
|
|
12
|
+
name = 'thread_queue'
|
|
11
13
|
|
|
12
14
|
def _start(self):
|
|
13
15
|
[t.start() for t in self.threads]
|
litoid/util/timed_heap.py
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import datacls
|
|
2
1
|
import heapq
|
|
3
2
|
import time
|
|
4
|
-
|
|
3
|
+
|
|
4
|
+
import datacls
|
|
5
|
+
|
|
6
|
+
from .thread_queue import HasThread
|
|
5
7
|
|
|
6
8
|
MAX_WAIT = 0.01
|
|
7
9
|
|
|
@@ -24,6 +26,7 @@ class TimedHeap(HasThread):
|
|
|
24
26
|
|
|
25
27
|
def pop(self, timestamp=None):
|
|
26
28
|
with self._lock:
|
|
29
|
+
|
|
27
30
|
def top():
|
|
28
31
|
return self.heap[0].timestamp if self.heap else None
|
|
29
32
|
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: litoid
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: 💡Sequence DMX lighting 💡
|
|
5
|
+
Author: Tom Ritchford
|
|
6
|
+
Author-email: Tom Ritchford <tom@swirly.com>
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
13
|
+
Requires-Dist: python-osc>=1.8.1
|
|
14
|
+
Requires-Dist: datacls>=4.6.0
|
|
15
|
+
Requires-Dist: mido>=1.2.10
|
|
16
|
+
Requires-Dist: tomlkit>=0.11.6
|
|
17
|
+
Requires-Dist: numpy>=1.24.2
|
|
18
|
+
Requires-Dist: pynput>=1.7.6
|
|
19
|
+
Requires-Dist: python-rtmidi>=1.5.4
|
|
20
|
+
Requires-Dist: xmod>=1.4.0
|
|
21
|
+
Requires-Dist: pyenttec>=1.4
|
|
22
|
+
Requires-Dist: typer>=0.7.0
|
|
23
|
+
Requires-Dist: dtyper>=2.1.0
|
|
24
|
+
Requires-Dist: pysimplegui
|
|
25
|
+
Requires-Dist: psgdemos>=1.12.1
|
|
26
|
+
Requires-Dist: pyperclip>=1.8.2
|
|
27
|
+
Requires-Dist: simpleaudio>=1.0.4
|
|
28
|
+
Requires-Dist: ipython>=8.12.0
|
|
29
|
+
Requires-Dist: clsprop>=1.1.0
|
|
30
|
+
Requires-Dist: matplotlib>=3.7.1
|
|
31
|
+
Requires-Dist: distinctipy>=1.2.2
|
|
32
|
+
Requires-Dist: coverage>=7.3.2,<8
|
|
33
|
+
Requires-Python: >=3.11
|
|
34
|
+
Description-Content-Type: text/markdown
|
|
35
|
+
|
|
36
|
+
# litoid
|
|
37
|
+
Sequence DMX lighting
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
litoid/.DS_Store,sha256=MfNLt-8Voqgjl44VElWqS0i00QEhG-FjRmdKcyO1McM,6148
|
|
2
|
+
litoid/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
+
litoid/__main__.py,sha256=FujhAwbpJhUaXkRFSlQGxZh3bcIL_20Js6NoMuojQxs,326
|
|
4
|
+
litoid/app.py,sha256=DrDr0iXsOsuMgCSSY2r1EN_upUBJDE77mbSkXx30gEU,228
|
|
5
|
+
litoid/io/.DS_Store,sha256=zV8dXPQNfBX1kto9_EmLCVpA-2XFiwlHhjHtO25-6oA,6148
|
|
6
|
+
litoid/io/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
+
litoid/io/dmx.py,sha256=0cG3pWqv5JJXrfoLk4jBa3bsCyDQu83RjeDRcUYvaoc,368
|
|
8
|
+
litoid/io/hotkey.py,sha256=dZhATnt5246AAgbEni5STr_4oPnhFUWTk1Cu7oUuaBc,737
|
|
9
|
+
litoid/io/key_mouse.py,sha256=rvdUrEcUeE8au6Cd6l4V73vTQhsbWkpLlhS7qmAc0pM,522
|
|
10
|
+
litoid/io/midi/__init__.py,sha256=nxTuMW56X41RS6OCXcKE_GmvPNoIhhb58dXa7BeUcW4,54
|
|
11
|
+
litoid/io/midi/message.py,sha256=HNy1K5lb9Bbxtrck6gM_FooW6MdK_7ql7t4K5vWJK0w,5648
|
|
12
|
+
litoid/io/midi/midi.py,sha256=tcRpwMtUKBcS6RO7YDtakXFXbAc6mBJ7kOmBUbKLCJs,1663
|
|
13
|
+
litoid/io/osc.py,sha256=k06mryLP6YaUbf8ltvGeu11uyFOv89Ixj3mXE2e_KhE,952
|
|
14
|
+
litoid/io/player.py,sha256=NuJrog_9n314lMNMlxA04px1PKYiMA9SEwq1LruGWq0,1612
|
|
15
|
+
litoid/io/recorder.py,sha256=fcUOoy2eLnnAKxf4O5m2TeYkxKi3QsxhybTm-ib4-DI,2928
|
|
16
|
+
litoid/io/track.py,sha256=sbub9U3Og8Bea6G8sTZqGAiuCYnYZiZQuDxmcLHnJos,1716
|
|
17
|
+
litoid/litoid.py,sha256=978H7RUt0RklDCcufn86sJ8AmQG0MWCU2AWJBlUBI68,704
|
|
18
|
+
litoid/log.py,sha256=hSpm3fnfLFg4C-gvGpoekqt6pYITxZ-ymFQ5b0gfmP0,1146
|
|
19
|
+
litoid/scenes/.DS_Store,sha256=3EnlrAFJTmQ7NzOw2MUClojWGwz_JDFHraxpNCUK6s4,6148
|
|
20
|
+
litoid/scenes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
|
+
litoid/scenes/compose.py,sha256=HGiEu8mYjBjwYny5TbUxbkbHJ9b5qXyGXyZAzgVJNoY,591
|
|
22
|
+
litoid/scenes/rgb_keyboard.py,sha256=oDP-thPJwI72Q7pdtQNu4IRqohHiS9CiBHrQA_OwAEA,610
|
|
23
|
+
litoid/state/.DS_Store,sha256=zdYD94Za1a1fy_QxJHJ_E6l3UA1XBly0rQWPo4yJ7OI,6148
|
|
24
|
+
litoid/state/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
25
|
+
litoid/state/instrument.py,sha256=9cur3fu8fjvv_ICyW-6D3XaFjlMkqJun7NicX-5jLfQ,2635
|
|
26
|
+
litoid/state/instruments.py,sha256=_pwgjO-iPfo-urueu6HBTLFnymxIXK4ZJi10LwOP620,981
|
|
27
|
+
litoid/state/lamp.py,sha256=HGrJ4q3Bcmohs3AfpzyEKoGd_EdA-JptmudZQxSksc8,1676
|
|
28
|
+
litoid/state/level.py,sha256=o2WErBup48i4_0C4w5tqE1vTy509kyl9oN1gwGkW70s,334
|
|
29
|
+
litoid/state/scene.py,sha256=KdTovEVTcdu_7kT_yKGOM1k0gkgN6R-BFl0pRmxMgY0,747
|
|
30
|
+
litoid/state/state.py,sha256=RCcyrRhdizz_auZGKnU3GKe0mMt6ER42MJQTZu9_o4A,2446
|
|
31
|
+
litoid/ui/.DS_Store,sha256=rf-Z8YsHkkQKz9_qSH09tDinu-552eKsCaL0zYgqDdc,6148
|
|
32
|
+
litoid/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
|
+
litoid/ui/action.py,sha256=dU6bRmvnlQivGt91IOgpc2PmENORY5pv2Z-7YjBM_h4,2716
|
|
34
|
+
litoid/ui/canvas_window.py,sha256=Qaew3_wuKgj28lIHT8VdhaRuG26aF5i5QTId9_0jGQ0,640
|
|
35
|
+
litoid/ui/controller.py,sha256=l7ccdzpj10fujqiifWrezAfRnCyXnXO2gLXvA_NQI2w,3425
|
|
36
|
+
litoid/ui/defaults.py,sha256=F9Mu1RpDPaCyRFVIavWUboDiNxz_WjtZDvi0Ka9E54I,183
|
|
37
|
+
litoid/ui/drawing_canvas.py,sha256=vEN2x5wUlgDRnez4m0SV9c0kNN72GkW1JlBU0UbT97c,1134
|
|
38
|
+
litoid/ui/event.py,sha256=3iWz-wMEF4rux3b7VanBQbRhgh6isuAZraB47VKzVfA,642
|
|
39
|
+
litoid/ui/layout.py,sha256=Rqlw_brb7wp5ffoxAubHFCWQg1AO-tSoxas7M33dVVU,1957
|
|
40
|
+
litoid/ui/model.py,sha256=SToNpiibvxEXEc4zou8Bidvw_yuiCxyG-f7UuuzeDes,2903
|
|
41
|
+
litoid/ui/ui.py,sha256=Q2lnge3SqWbikF8xKafMnseHc9T-1ElktFecC0FCfSo,2000
|
|
42
|
+
litoid/ui/view.py,sha256=RtRyM3X0-mVPsRHEZTw79BI9iuiMKY65pu84Ub7EwHA,2101
|
|
43
|
+
litoid/util/.DS_Store,sha256=YSEfjjQKGNoRHCSm2uk9otCyM_r6derKpa_hWeu-puQ,6148
|
|
44
|
+
litoid/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
45
|
+
litoid/util/file.py,sha256=IXPzzUbDVApsUe6NM1WZghPEEX-Xq2HGbsg7UY2Catc,472
|
|
46
|
+
litoid/util/has_thread.py,sha256=y1t-j80dO_XLPJUuQPSCA3uNucfe03GIom_Z6Ws312Y,917
|
|
47
|
+
litoid/util/is_running.py,sha256=R0kfqNdoJw92Ix-k6Hne_ZAK80HV57jWkuTHwceVFQI,447
|
|
48
|
+
litoid/util/play.py,sha256=boN4BEKV4yFD4r3DGl4LHbuBfDq65G3373AoMMQ8hsU,555
|
|
49
|
+
litoid/util/smooth.py,sha256=tL_5FDpUPlfKG4-mCfIwId1EvNbKsJTaUESuY5MTY5I,453
|
|
50
|
+
litoid/util/thread_queue.py,sha256=UQxiPGzQhT2_Kn56DJzwxUAcDpBGOO3S_LDQ0RvXEVQ,665
|
|
51
|
+
litoid/util/timed_heap.py,sha256=BVfTwpZNbSVAqVymKNdxbCjtYQuQtcgApRU7FkkSFHA,1074
|
|
52
|
+
litoid-0.2.0.dist-info/WHEEL,sha256=fAguSjoiATBe7TNBkJwOjyL1Tt4wwiaQGtNtjRPNMQA,80
|
|
53
|
+
litoid-0.2.0.dist-info/METADATA,sha256=TwwE_j8ZOVDTN3JPd-_FCwQsGogukF-BYgRMDHkDAiE,1145
|
|
54
|
+
litoid-0.2.0.dist-info/RECORD,,
|
litoid-0.1.0.dist-info/LICENSE
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2023 Tom Ritchford
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
litoid-0.1.0.dist-info/METADATA
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: litoid
|
|
3
|
-
Version: 0.1.0
|
|
4
|
-
Summary: 💡Sequence DMX lighting 💡
|
|
5
|
-
License: MIT
|
|
6
|
-
Author: Tom Ritchford
|
|
7
|
-
Author-email: tom@swirly.com
|
|
8
|
-
Requires-Python: >=3.11
|
|
9
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
10
|
-
Classifier: Programming Language :: Python :: 3
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
12
|
-
Requires-Dist: clsprop (>=1.1.0)
|
|
13
|
-
Requires-Dist: datacls (>=4.6.0)
|
|
14
|
-
Requires-Dist: distinctipy (>=1.2.2)
|
|
15
|
-
Requires-Dist: dtyper (>=2.1.0)
|
|
16
|
-
Requires-Dist: ipython (>=8.12.0)
|
|
17
|
-
Requires-Dist: matplotlib (>=3.7.1)
|
|
18
|
-
Requires-Dist: mido (>=1.2.10)
|
|
19
|
-
Requires-Dist: numpy (>=1.24.2)
|
|
20
|
-
Requires-Dist: psgdemos (>=1.12.1)
|
|
21
|
-
Requires-Dist: pyenttec (>=1.4)
|
|
22
|
-
Requires-Dist: pynput (>=1.7.6)
|
|
23
|
-
Requires-Dist: pyperclip (>=1.8.2)
|
|
24
|
-
Requires-Dist: pysimplegui (>=4.60.4)
|
|
25
|
-
Requires-Dist: python-osc (>=1.8.1)
|
|
26
|
-
Requires-Dist: python-rtmidi (>=1.5.4)
|
|
27
|
-
Requires-Dist: simpleaudio (>=1.0.4)
|
|
28
|
-
Requires-Dist: tomlkit (>=0.11.6)
|
|
29
|
-
Requires-Dist: typer (>=0.7.0)
|
|
30
|
-
Requires-Dist: xmod (>=1.4.0)
|
|
31
|
-
Description-Content-Type: text/markdown
|
|
32
|
-
|
|
33
|
-
# litoid
|
|
34
|
-
Sequence DMX lighting
|
|
35
|
-
|
litoid-0.1.0.dist-info/RECORD
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
litoid/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
litoid/__main__.py,sha256=32smrsqbXGvMjY93DI0tnbJ6pLrvVAyrSwFkv9bNm8A,325
|
|
3
|
-
litoid/app.py,sha256=DrDr0iXsOsuMgCSSY2r1EN_upUBJDE77mbSkXx30gEU,228
|
|
4
|
-
litoid/io/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
-
litoid/io/dmx.py,sha256=sOMpOZGWb0ZvTnGp6a4TjEoGJTqna-FSv9Xp3fAFBp4,367
|
|
6
|
-
litoid/io/hotkey.py,sha256=tOhUGwGwIIMp_qvRrN9cPV1OXg_OEbyCkhg5Ze56-bY,726
|
|
7
|
-
litoid/io/key_mouse.py,sha256=1CkfKbdJ7KaM1JZa_VlrzF756Nj_c2vC6KzAOtaAk-E,511
|
|
8
|
-
litoid/io/midi/__init__.py,sha256=lT-_YqQTT7JQ7DOTn-OpWmDThZy3rPJVoo7Mp2jZncA,53
|
|
9
|
-
litoid/io/midi/message.py,sha256=lTOkelI6ke_YtKF3YR6Qs0VfddczIq7nARhDPMlWPXw,5715
|
|
10
|
-
litoid/io/midi/midi.py,sha256=sETGFz2MtIvo8EUiilUdK4dm98680M4wmoN8_dHSRmM,1650
|
|
11
|
-
litoid/io/osc.py,sha256=8PE_34aBtkkCh7h4AgU37nQWn71J5jsQNrR0AUK02t8,941
|
|
12
|
-
litoid/io/player.py,sha256=euxObw2mG8cH-ETQtNWriFH5kTvpKHtE-GloPVPc6v8,1600
|
|
13
|
-
litoid/io/recorder.py,sha256=9nwX4OwKLMoz1tLSnwpV_YJ5eHrDjlJlod-zpdJgUUY,2924
|
|
14
|
-
litoid/io/track.py,sha256=zr8A9VSJ_WSNO1djxLRXvjoGEPyCL-EPy0C5qfTeNVI,1696
|
|
15
|
-
litoid/litoid.py,sha256=dyAwc9EPdhqwRVT-P_Bxf6qA6Q3kTi3TIZRnJ7aS5tQ,701
|
|
16
|
-
litoid/log.py,sha256=8RcERJmA30H6jmua_crsoNt4K1CaUWUewCu8BSz6uW4,1144
|
|
17
|
-
litoid/scenes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
-
litoid/scenes/compose.py,sha256=glZ5RNgDP5mgG_QbVHZ6vzmw9Sb_WWJhqT0HWy4pj6I,590
|
|
19
|
-
litoid/scenes/rgb_keyboard.py,sha256=5asnQPGg3fnoqg6t-qK31Ln78OYJ_2_0yd92MDsms6c,609
|
|
20
|
-
litoid/state/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
|
-
litoid/state/instrument.py,sha256=NUx6Xyx8b51i1mB6YQh2DQFeuqNNeLcbEmSsDqZHN04,2622
|
|
22
|
-
litoid/state/instruments.py,sha256=HuhRhc_TtFhfOIn5LMZmMp28gq2fFAsJv0wAuUKMZEg,964
|
|
23
|
-
litoid/state/lamp.py,sha256=h44x4WcWPcCaECf9JeZoTWg0uhMRtSRXexY71o_v9cU,1674
|
|
24
|
-
litoid/state/level.py,sha256=o2WErBup48i4_0C4w5tqE1vTy509kyl9oN1gwGkW70s,334
|
|
25
|
-
litoid/state/scene.py,sha256=KdTovEVTcdu_7kT_yKGOM1k0gkgN6R-BFl0pRmxMgY0,747
|
|
26
|
-
litoid/state/state.py,sha256=plz6bI4-k2g-f2NFxCLJ-oOO9OZVwSr6lfgQtHtpSFw,2475
|
|
27
|
-
litoid/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
28
|
-
litoid/ui/action.py,sha256=Ur797dFLr9idtQqL-_68dQErupcn3xWo6ejqyAm9zmI,2716
|
|
29
|
-
litoid/ui/canvas_window.py,sha256=kkWMjI43tRTeu4mRrwb_XT1Oji-cvmJthgfL7rvkKns,640
|
|
30
|
-
litoid/ui/controller.py,sha256=O5qydVPWOgWAJRFBB3UiYmPydA93SCXqBlkUThBlHEc,3411
|
|
31
|
-
litoid/ui/defaults.py,sha256=F9Mu1RpDPaCyRFVIavWUboDiNxz_WjtZDvi0Ka9E54I,183
|
|
32
|
-
litoid/ui/drawing_canvas.py,sha256=HyFQUM-owOkx2dEtabAfRk42-8qwtWW2pn-zbKK9bM0,1133
|
|
33
|
-
litoid/ui/event.py,sha256=Abwy8xoqulOvvTaLbQUdU7zndfY95VV5hwED66ArZD0,640
|
|
34
|
-
litoid/ui/layout.py,sha256=_mzfuD2jco6Eu9c_k_rnvdqsK9_393TY-1bDYKmSYW4,1950
|
|
35
|
-
litoid/ui/model.py,sha256=Wpafhg0-zpzv1zFNO5MXTZdK8fy34oDBXwhPZdGNJ5Y,2902
|
|
36
|
-
litoid/ui/ui.py,sha256=ghhuo_iIL1gJh5EJBKwn9C51Rc-2UN98NpVa9UTnfvQ,1986
|
|
37
|
-
litoid/ui/view.py,sha256=OKhbEWexnnLlKLh7r8s2YCZS0oWwqP8M433NdHbZHvw,2090
|
|
38
|
-
litoid/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
39
|
-
litoid/util/file.py,sha256=PfGYRhZAwFB-tq-8Z2fB6hUG2C7mNueFKhsM_v2uC18,471
|
|
40
|
-
litoid/util/has_thread.py,sha256=0LLOVz_kmaQy0RDMk8g93C31rHlT4FswMfr7oQDm_fg,916
|
|
41
|
-
litoid/util/is_running.py,sha256=R0kfqNdoJw92Ix-k6Hne_ZAK80HV57jWkuTHwceVFQI,447
|
|
42
|
-
litoid/util/play.py,sha256=WddyiUM_Y-V-FTIeFyQSqYCkqs5zGODpfsv6Ydk0kNQ,554
|
|
43
|
-
litoid/util/smooth.py,sha256=t_5Fy6wqc13z53ehfvdWbU-Dd5NmEDUsFll3OZrQc0I,452
|
|
44
|
-
litoid/util/thread_queue.py,sha256=fEcvLX4WflQ6ddil8ZFKRDgHUmvVUwJ27Zc9VYJ24bg,638
|
|
45
|
-
litoid/util/timed_heap.py,sha256=1xe0-5c8jE2VXwHeNaIxe42J79nirBgvtEoUZwtrkos,1072
|
|
46
|
-
litoid-0.1.0.dist-info/LICENSE,sha256=MB-AP9XDcrBUgqFFtB5nZ9fbJSWysrv3yjmoHVszAqU,1070
|
|
47
|
-
litoid-0.1.0.dist-info/METADATA,sha256=AJ8Q4iXpPSztn9BEi7mxo0NqAMvsp1okRXq_IvCqE3A,1048
|
|
48
|
-
litoid-0.1.0.dist-info/WHEEL,sha256=WGfLGfLX43Ei_YORXSnT54hxFygu34kMpcQdmgmEwCQ,88
|
|
49
|
-
litoid-0.1.0.dist-info/RECORD,,
|