IS-Matrix-Forge 1.0.0.dev4__tar.gz → 1.0.0.dev6__tar.gz
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.
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/PKG-INFO +50 -52
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/README.md +42 -52
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/__init__.py +1 -1
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/assets/__init__.py +1 -1
- is_matrix_forge-1.0.0.dev6/is_matrix_forge/common/decorators/__init__.py +12 -0
- is_matrix_forge-1.0.0.dev4/is_matrix_forge/common/decorators/__init__.py → is_matrix_forge-1.0.0.dev6/is_matrix_forge/common/decorators/freeze_setter.py +2 -12
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/designer_gui/__init__.py +1 -1
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/designer_gui/main_window/__init__.py +11 -3
- is_matrix_forge-1.0.0.dev4/is_matrix_forge/designer_gui/main_window/layout.py → is_matrix_forge-1.0.0.dev6/is_matrix_forge/designer_gui/main_window/layout/__init__.py +2 -6
- is_matrix_forge-1.0.0.dev6/is_matrix_forge/designer_gui/main_window/layout/button_grid/column.py +17 -0
- is_matrix_forge-1.0.0.dev6/is_matrix_forge/designer_gui/main_window/layout/button_grid/grid.py +15 -0
- is_matrix_forge-1.0.0.dev6/is_matrix_forge/designer_gui/main_window/streamlit_app.py +93 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/dev_tools/__init__.py +1 -1
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/inputmodule/ledmatrix.py +0 -16
- is_matrix_forge-1.0.0.dev6/is_matrix_forge/led_matrix/Scripts/__init__.py +4 -0
- is_matrix_forge-1.0.0.dev6/is_matrix_forge/led_matrix/Scripts/identify_matrices.py +228 -0
- is_matrix_forge-1.0.0.dev6/is_matrix_forge/led_matrix/__init__.py +58 -0
- {is_matrix_forge-1.0.0.dev4/is_matrix_forge/led_matrix/helpers/core → is_matrix_forge-1.0.0.dev6/is_matrix_forge/led_matrix/commands}/__init__.py +3 -1
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/controller/__init__.py +2 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/controller/controller.py +123 -29
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/animations/__init__.py +10 -1
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/animations/animation.py +1 -1
- is_matrix_forge-1.0.0.dev6/is_matrix_forge/led_matrix/display/animations/audio_visualizer.py +124 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/animations/effects/__init__.py +1 -1
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/animations/font/__init__.py +1 -1
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/effects/__init__.py +1 -1
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/effects/breather.py +13 -29
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/grid/grid.py +43 -8
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/grid/presets/__init__.py +1 -1
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/helpers/__init__.py +8 -27
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/media.py +1 -2
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/patterns/built_in/commands.py +1 -1
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/patterns/built_in/stencils/res.py +1 -1
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/text/__init__.py +1 -1
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/text/scroller.py +22 -0
- is_matrix_forge-1.0.0.dev6/is_matrix_forge/led_matrix/hardware.py +271 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/helpers/__init__.py +3 -0
- is_matrix_forge-1.0.0.dev6/is_matrix_forge/led_matrix/helpers/core/__init__.py +17 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/helpers/device.py +1 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/tools/__init__.py +1 -1
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/utils/__init__.py +1 -1
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/monitor/gui/layout/__init__.py +1 -1
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/monitor/gui/windows/main/__init__.py +1 -1
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/monitor/monitor.py +3 -3
- is_matrix_forge-1.0.0.dev6/is_matrix_forge/notify/__init__.py +0 -0
- is_matrix_forge-1.0.0.dev6/is_matrix_forge/scripts/__init__.py +1 -0
- is_matrix_forge-1.0.0.dev6/is_matrix_forge/scripts/preset_installer.py +184 -0
- is_matrix_forge-1.0.0.dev6/is_matrix_forge/serial_com/__init__.py +1 -0
- is_matrix_forge-1.0.0.dev6/is_matrix_forge/serial_com/base/__init__.py +18 -0
- is_matrix_forge-1.0.0.dev6/is_matrix_forge/serial_com/base/answer.py +12 -0
- is_matrix_forge-1.0.0.dev6/is_matrix_forge/serial_com/base/message.py +13 -0
- is_matrix_forge-1.0.0.dev6/is_matrix_forge/serial_com/base/request.py +8 -0
- is_matrix_forge-1.0.0.dev6/is_matrix_forge/serial_com/exchange.py +47 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/pyproject.toml +21 -18
- is_matrix_forge-1.0.0.dev4/is_matrix_forge/led_matrix/Scripts/__init__.py +0 -4
- is_matrix_forge-1.0.0.dev4/is_matrix_forge/led_matrix/__init__.py +0 -7
- is_matrix_forge-1.0.0.dev4/is_matrix_forge/led_matrix/commands/__init__.py +0 -84
- is_matrix_forge-1.0.0.dev4/is_matrix_forge/led_matrix/display/patterns/utils.py +0 -2
- is_matrix_forge-1.0.0.dev4/is_matrix_forge/led_matrix/hardware.py +0 -134
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/LICENSE.md +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/assets/audio/__init__.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/assets/audio/files/__init__.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/assets/audio/files/plugged.wav +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/assets/audio/files/unplugged.wav +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/assets/char_map.json +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/assets/font_map.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/common/__init__.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/common/dirs.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/common/helpers/__init__.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/common/helpers/github_api.py +0 -0
- {is_matrix_forge-1.0.0.dev4/is_matrix_forge/monitor/gui → is_matrix_forge-1.0.0.dev6/is_matrix_forge/designer_gui/main_window/layout/button_grid}/__init__.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/dev_tools/debug.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/dev_tools/presets.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/inputmodule/__init__.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/inputmodule/b1display.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/inputmodule/c1minimal.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/inputmodule/font.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/inputmodule/helpers/__init__.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/Scripts/battery_monitor.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/Scripts/install_presets/__init__.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/Scripts/install_presets/arguments.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/Scripts/install_presets/main.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/commands/map.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/constants.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/controller/helpers/__init__.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/controller/helpers/threading.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/controller/multiton.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/controller/threaded.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/__init__.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/animations/errors.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/animations/font/font.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/animations/font/map_builder.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/animations/frame/__init__.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/animations/frame/base.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/animations/frame/helpers.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/animations/keep_awake.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/animations/plugged.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/animations/text_scroller.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/effects/fade.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/effects/scroller/__init__.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/effects/scroller/base.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/effects/scroller/helpers.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/grid/__init__.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/grid/helpers.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/grid/presets/manifest.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/helpers/columns.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/patterns/built_in/__init__.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/patterns/built_in/constants.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/display/patterns/built_in/stencils/__init__.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/errors/__init__.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/errors/base.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/errors/grid.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/errors/matrix.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/errors/misc.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/fonts.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/helpers/core/lazy_mod_load.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/helpers/status_handler.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/helpers/stream/__init__.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/helpers/stream/errors.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/led_matrix.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/status.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/led_matrix/tools/identify.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/log_engine.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/monitor/__init__.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/monitor/errors.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/monitor/events.py +0 -0
- {is_matrix_forge-1.0.0.dev4/is_matrix_forge/monitor/gui/windows → is_matrix_forge-1.0.0.dev6/is_matrix_forge/monitor/gui}/__init__.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/monitor/gui/errors.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/monitor/gui/event/__init__.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/monitor/gui/event/collection.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/monitor/gui/event/errors.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/monitor/gui/event/event.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/monitor/gui/layout/base.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/monitor/gui/metaclasses/__init__.py +0 -0
- {is_matrix_forge-1.0.0.dev4/is_matrix_forge/notify → is_matrix_forge-1.0.0.dev6/is_matrix_forge/monitor/gui/windows}/__init__.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/monitor/gui/windows/base.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/monitor/gui/windows/main/layout.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/monitor/helpers.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/notify/sounds/__init__.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/notify/sounds/base.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/progress.py +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/presets/blank.json +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/presets/manifest.json +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/presets/shock_face.json +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/presets/test1.json +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/presets/test2.json +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/presets/test3.json +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/presets/test4.json +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/presets/test5.json +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/presets/test6.json +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/presets/test7.json +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/presets/x_animation II.json +0 -0
- {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/presets/x_animation.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: IS-Matrix-Forge
|
|
3
|
-
Version: 1.0.0.
|
|
3
|
+
Version: 1.0.0.dev6
|
|
4
4
|
Summary:
|
|
5
5
|
License: MIT
|
|
6
6
|
Keywords: led,matrix,framework,hardware
|
|
@@ -12,34 +12,47 @@ Classifier: Programming Language :: Python :: 3
|
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.12
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.13
|
|
14
14
|
Provides-Extra: clipboard-support
|
|
15
|
+
Requires-Dist: aliaser (>=1.0.0.dev4,<2.0.0)
|
|
15
16
|
Requires-Dist: chime (>=0.7.0,<0.8.0)
|
|
16
17
|
Requires-Dist: clipboard (>=0.0.4,<0.0.5) ; extra == "clipboard-support"
|
|
17
18
|
Requires-Dist: easy-exit-calls (>=1.0.0.dev1,<2.0.0)
|
|
19
|
+
Requires-Dist: imapclient (==3.0.1)
|
|
18
20
|
Requires-Dist: inspy-logger (>=3.2.3,<4.0.0)
|
|
19
21
|
Requires-Dist: inspyre-toolbox (>=1.6.0.dev23)
|
|
20
22
|
Requires-Dist: opencv-python (>=4.11.0.86,<5.0.0.0)
|
|
21
23
|
Requires-Dist: pillow (>=11.2.1,<12.0.0)
|
|
22
24
|
Requires-Dist: pyserial (>=3.5,<4.0)
|
|
25
|
+
Requires-Dist: pysimplegui-4-foss (==4.60.4.1)
|
|
26
|
+
Requires-Dist: pysimpleguiweb (==0.39.0)
|
|
27
|
+
Requires-Dist: requests (>=2.32.4,<3.0.0)
|
|
28
|
+
Project-URL: Homepage, https://github.com/Inspyre-Softworks/IS-Matrix-Forge
|
|
29
|
+
Project-URL: Repository, https://github.com/Inspyre-Softworks/IS-Matrix-Forge
|
|
23
30
|
Description-Content-Type: text/markdown
|
|
24
31
|
|
|
25
32
|
[](https://pypi.org/project/IS-Matrix-Forge)
|
|
26
33
|

|
|
27
34
|
|
|
28
35
|
|
|
29
|
-
#
|
|
36
|
+
# IS Matrix Forge
|
|
30
37
|
|
|
31
|
-
|
|
38
|
+
**IS Matrix Forge** is a Python framework for creating applications that drive
|
|
39
|
+
9×34 LED matrix displays. It provides high level helpers for talking to the
|
|
40
|
+
hardware, tools for building animations, and utilities such as progress bars and
|
|
41
|
+
a battery monitor.
|
|
32
42
|
|
|
33
|
-
## Project
|
|
43
|
+
## Project Overview
|
|
34
44
|
|
|
35
|
-
|
|
45
|
+
Matrix Forge grew out of the LED Matrix Battery Monitor project. The goal is to
|
|
46
|
+
make it easy to create rich LED matrix experiences from Python. In addition to
|
|
47
|
+
monitoring the battery, you can design custom frames, display scrolling text,
|
|
48
|
+
run animations, and integrate the LED matrix with your own applications.
|
|
36
49
|
|
|
37
|
-
|
|
38
|
-
-
|
|
39
|
-
-
|
|
40
|
-
-
|
|
41
|
-
-
|
|
42
|
-
-
|
|
50
|
+
Highlighted features include:
|
|
51
|
+
- Device discovery and control via `pyserial`
|
|
52
|
+
- Drawing grids and patterns with the `Grid` class
|
|
53
|
+
- Built-in and custom animations
|
|
54
|
+
- Progress bars that render on the matrix
|
|
55
|
+
- A battery monitor example using these building blocks
|
|
43
56
|
|
|
44
57
|
## Hardware Requirements
|
|
45
58
|
|
|
@@ -71,8 +84,8 @@ This project requires Python 3.12 or newer and the following dependencies:
|
|
|
71
84
|
|
|
72
85
|
1. Clone the repository:
|
|
73
86
|
```
|
|
74
|
-
git clone https://github.com/Inspyre-Softworks/
|
|
75
|
-
cd
|
|
87
|
+
git clone https://github.com/Inspyre-Softworks/IS-Matrix-Forge.git
|
|
88
|
+
cd IS-Matrix-Forge
|
|
76
89
|
```
|
|
77
90
|
|
|
78
91
|
2. Install dependencies using Poetry:
|
|
@@ -89,8 +102,8 @@ This project requires Python 3.12 or newer and the following dependencies:
|
|
|
89
102
|
|
|
90
103
|
1. Clone the repository:
|
|
91
104
|
```
|
|
92
|
-
git clone https://github.com/Inspyre-Softworks/
|
|
93
|
-
cd
|
|
105
|
+
git clone https://github.com/Inspyre-Softworks/IS-Matrix-Forge.git
|
|
106
|
+
cd IS-Matrix-Forge
|
|
94
107
|
```
|
|
95
108
|
|
|
96
109
|
2. Install the package:
|
|
@@ -100,60 +113,43 @@ This project requires Python 3.12 or newer and the following dependencies:
|
|
|
100
113
|
|
|
101
114
|
## Usage Examples
|
|
102
115
|
|
|
103
|
-
###
|
|
104
|
-
|
|
105
|
-
To start monitoring your battery with default settings:
|
|
116
|
+
### Identify Connected Devices
|
|
106
117
|
|
|
107
118
|
```python
|
|
108
|
-
from is_matrix_forge.monitor import run_power_monitor
|
|
109
119
|
from is_matrix_forge.led_matrix.helpers.device import DEVICES
|
|
110
120
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
# Start monitoring with default settings
|
|
115
|
-
run_power_monitor(device)
|
|
121
|
+
for dev in DEVICES:
|
|
122
|
+
print(dev)
|
|
116
123
|
```
|
|
117
124
|
|
|
118
|
-
###
|
|
119
|
-
|
|
120
|
-
To customize the monitoring behavior:
|
|
125
|
+
### Display Text on the Matrix
|
|
121
126
|
|
|
122
127
|
```python
|
|
123
|
-
from is_matrix_forge.
|
|
128
|
+
from is_matrix_forge.led_matrix.controller.controller import LEDMatrixController
|
|
124
129
|
from is_matrix_forge.led_matrix.helpers.device import DEVICES
|
|
125
|
-
from pathlib import Path
|
|
126
|
-
|
|
127
|
-
# Get the first available LED matrix device
|
|
128
|
-
device = DEVICES[0]
|
|
129
130
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
unplugged_sound = Path("path/to/custom_unplugged_sound.wav")
|
|
133
|
-
|
|
134
|
-
# Start monitoring with custom settings
|
|
135
|
-
run_power_monitor(
|
|
136
|
-
device,
|
|
137
|
-
battery_check_interval=10, # Check every 10 seconds
|
|
138
|
-
plugged_alert=plugged_sound,
|
|
139
|
-
unplugged_alert=unplugged_sound
|
|
140
|
-
)
|
|
131
|
+
ctrl = LEDMatrixController(DEVICES[0])
|
|
132
|
+
ctrl.scroll_text("Hello World!", loop=False)
|
|
141
133
|
```
|
|
142
134
|
|
|
143
|
-
###
|
|
135
|
+
### Progress Bars
|
|
144
136
|
|
|
145
|
-
|
|
137
|
+
```python
|
|
138
|
+
import time
|
|
139
|
+
from is_matrix_forge.progress import tqdm
|
|
140
|
+
|
|
141
|
+
for _ in tqdm(range(100)):
|
|
142
|
+
time.sleep(0.05)
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Battery Monitor Example
|
|
146
146
|
|
|
147
147
|
```python
|
|
148
|
-
from is_matrix_forge.monitor import
|
|
148
|
+
from is_matrix_forge.monitor import run_power_monitor
|
|
149
149
|
from is_matrix_forge.led_matrix.helpers.device import DEVICES
|
|
150
150
|
|
|
151
|
-
# Get the first available LED matrix device
|
|
152
151
|
device = DEVICES[0]
|
|
153
|
-
|
|
154
|
-
# Start monitoring in a background thread
|
|
155
|
-
monitor = run_power_monitor_threaded(device)
|
|
156
|
-
# ``monitor`` is a :class:`threading.Thread` instance
|
|
152
|
+
run_power_monitor(device)
|
|
157
153
|
```
|
|
158
154
|
|
|
159
155
|
## Troubleshooting
|
|
@@ -185,8 +181,10 @@ monitor = run_power_monitor_threaded(device)
|
|
|
185
181
|
|
|
186
182
|
## Contributing
|
|
187
183
|
|
|
188
|
-
Contributions
|
|
184
|
+
Contributions are welcome! If you have ideas or improvements for Matrix Forge,
|
|
185
|
+
feel free to open an issue or submit a pull request.
|
|
189
186
|
|
|
190
187
|
## License
|
|
191
188
|
|
|
192
189
|
This project is licensed under the MIT License - see the LICENSE.md file for details.
|
|
190
|
+
|
|
@@ -2,20 +2,26 @@
|
|
|
2
2
|

|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
#
|
|
5
|
+
# IS Matrix Forge
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
**IS Matrix Forge** is a Python framework for creating applications that drive
|
|
8
|
+
9×34 LED matrix displays. It provides high level helpers for talking to the
|
|
9
|
+
hardware, tools for building animations, and utilities such as progress bars and
|
|
10
|
+
a battery monitor.
|
|
8
11
|
|
|
9
|
-
## Project
|
|
12
|
+
## Project Overview
|
|
10
13
|
|
|
11
|
-
|
|
14
|
+
Matrix Forge grew out of the LED Matrix Battery Monitor project. The goal is to
|
|
15
|
+
make it easy to create rich LED matrix experiences from Python. In addition to
|
|
16
|
+
monitoring the battery, you can design custom frames, display scrolling text,
|
|
17
|
+
run animations, and integrate the LED matrix with your own applications.
|
|
12
18
|
|
|
13
|
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
+
Highlighted features include:
|
|
20
|
+
- Device discovery and control via `pyserial`
|
|
21
|
+
- Drawing grids and patterns with the `Grid` class
|
|
22
|
+
- Built-in and custom animations
|
|
23
|
+
- Progress bars that render on the matrix
|
|
24
|
+
- A battery monitor example using these building blocks
|
|
19
25
|
|
|
20
26
|
## Hardware Requirements
|
|
21
27
|
|
|
@@ -47,8 +53,8 @@ This project requires Python 3.12 or newer and the following dependencies:
|
|
|
47
53
|
|
|
48
54
|
1. Clone the repository:
|
|
49
55
|
```
|
|
50
|
-
git clone https://github.com/Inspyre-Softworks/
|
|
51
|
-
cd
|
|
56
|
+
git clone https://github.com/Inspyre-Softworks/IS-Matrix-Forge.git
|
|
57
|
+
cd IS-Matrix-Forge
|
|
52
58
|
```
|
|
53
59
|
|
|
54
60
|
2. Install dependencies using Poetry:
|
|
@@ -65,8 +71,8 @@ This project requires Python 3.12 or newer and the following dependencies:
|
|
|
65
71
|
|
|
66
72
|
1. Clone the repository:
|
|
67
73
|
```
|
|
68
|
-
git clone https://github.com/Inspyre-Softworks/
|
|
69
|
-
cd
|
|
74
|
+
git clone https://github.com/Inspyre-Softworks/IS-Matrix-Forge.git
|
|
75
|
+
cd IS-Matrix-Forge
|
|
70
76
|
```
|
|
71
77
|
|
|
72
78
|
2. Install the package:
|
|
@@ -76,60 +82,43 @@ This project requires Python 3.12 or newer and the following dependencies:
|
|
|
76
82
|
|
|
77
83
|
## Usage Examples
|
|
78
84
|
|
|
79
|
-
###
|
|
80
|
-
|
|
81
|
-
To start monitoring your battery with default settings:
|
|
85
|
+
### Identify Connected Devices
|
|
82
86
|
|
|
83
87
|
```python
|
|
84
|
-
from is_matrix_forge.monitor import run_power_monitor
|
|
85
88
|
from is_matrix_forge.led_matrix.helpers.device import DEVICES
|
|
86
89
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
# Start monitoring with default settings
|
|
91
|
-
run_power_monitor(device)
|
|
90
|
+
for dev in DEVICES:
|
|
91
|
+
print(dev)
|
|
92
92
|
```
|
|
93
93
|
|
|
94
|
-
###
|
|
95
|
-
|
|
96
|
-
To customize the monitoring behavior:
|
|
94
|
+
### Display Text on the Matrix
|
|
97
95
|
|
|
98
96
|
```python
|
|
99
|
-
from is_matrix_forge.
|
|
97
|
+
from is_matrix_forge.led_matrix.controller.controller import LEDMatrixController
|
|
100
98
|
from is_matrix_forge.led_matrix.helpers.device import DEVICES
|
|
101
|
-
from pathlib import Path
|
|
102
|
-
|
|
103
|
-
# Get the first available LED matrix device
|
|
104
|
-
device = DEVICES[0]
|
|
105
99
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
unplugged_sound = Path("path/to/custom_unplugged_sound.wav")
|
|
109
|
-
|
|
110
|
-
# Start monitoring with custom settings
|
|
111
|
-
run_power_monitor(
|
|
112
|
-
device,
|
|
113
|
-
battery_check_interval=10, # Check every 10 seconds
|
|
114
|
-
plugged_alert=plugged_sound,
|
|
115
|
-
unplugged_alert=unplugged_sound
|
|
116
|
-
)
|
|
100
|
+
ctrl = LEDMatrixController(DEVICES[0])
|
|
101
|
+
ctrl.scroll_text("Hello World!", loop=False)
|
|
117
102
|
```
|
|
118
103
|
|
|
119
|
-
###
|
|
104
|
+
### Progress Bars
|
|
105
|
+
|
|
106
|
+
```python
|
|
107
|
+
import time
|
|
108
|
+
from is_matrix_forge.progress import tqdm
|
|
109
|
+
|
|
110
|
+
for _ in tqdm(range(100)):
|
|
111
|
+
time.sleep(0.05)
|
|
112
|
+
```
|
|
120
113
|
|
|
121
|
-
|
|
114
|
+
### Battery Monitor Example
|
|
122
115
|
|
|
123
116
|
```python
|
|
124
|
-
from is_matrix_forge.monitor import
|
|
117
|
+
from is_matrix_forge.monitor import run_power_monitor
|
|
125
118
|
from is_matrix_forge.led_matrix.helpers.device import DEVICES
|
|
126
119
|
|
|
127
|
-
# Get the first available LED matrix device
|
|
128
120
|
device = DEVICES[0]
|
|
129
|
-
|
|
130
|
-
# Start monitoring in a background thread
|
|
131
|
-
monitor = run_power_monitor_threaded(device)
|
|
132
|
-
# ``monitor`` is a :class:`threading.Thread` instance
|
|
121
|
+
run_power_monitor(device)
|
|
133
122
|
```
|
|
134
123
|
|
|
135
124
|
## Troubleshooting
|
|
@@ -161,8 +150,9 @@ monitor = run_power_monitor_threaded(device)
|
|
|
161
150
|
|
|
162
151
|
## Contributing
|
|
163
152
|
|
|
164
|
-
Contributions
|
|
153
|
+
Contributions are welcome! If you have ideas or improvements for Matrix Forge,
|
|
154
|
+
feel free to open an issue or submit a pull request.
|
|
165
155
|
|
|
166
156
|
## License
|
|
167
157
|
|
|
168
|
-
This project is licensed under the MIT License - see the LICENSE.md file for details.
|
|
158
|
+
This project is licensed under the MIT License - see the LICENSE.md file for details.
|
|
@@ -3,6 +3,6 @@ Author: Taylor B. tayjaybabee@gmail.com
|
|
|
3
3
|
Date: 2025-04-15 09:15:25
|
|
4
4
|
LastEditors: Taylor B. tayjaybabee@gmail.com
|
|
5
5
|
LastEditTime: 2025-04-15 09:24:40
|
|
6
|
-
FilePath: is_matrix_forge/
|
|
6
|
+
FilePath: is_matrix_forge/grid.py
|
|
7
7
|
Description: 这是默认设置,可以在设置》工具》File Description中进行配置
|
|
8
8
|
"""
|
{is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/assets/__init__.py
RENAMED
|
@@ -3,6 +3,6 @@ Author: Taylor B. tayjaybabee@gmail.com
|
|
|
3
3
|
Date: 2025-04-15 09:15:37
|
|
4
4
|
LastEditors: Taylor B. tayjaybabee@gmail.com
|
|
5
5
|
LastEditTime: 2025-04-15 09:24:40
|
|
6
|
-
FilePath: is_matrix_forge/assets/
|
|
6
|
+
FilePath: is_matrix_forge/assets/grid.py
|
|
7
7
|
Description: 这是默认设置,可以在设置》工具》File Description中进行配置
|
|
8
8
|
"""
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from inspyre_toolbox.syntactic_sweets.classes.decorators import validate_type
|
|
2
|
+
from is_matrix_forge.common.decorators.freeze_setter import freeze_setter
|
|
3
|
+
from is_matrix_forge.led_matrix.errors.misc import ImplicitNameDerivationError
|
|
4
|
+
from aliaser import Aliases
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
'Aliases',
|
|
9
|
+
'ImplicitNameDerivationError',
|
|
10
|
+
'freeze_setter',
|
|
11
|
+
'validate_type',
|
|
12
|
+
]
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import functools
|
|
2
2
|
from typing import Optional, Type, Callable, Any
|
|
3
3
|
|
|
4
|
-
import functools
|
|
5
|
-
from typing import Optional, Type, Callable, Any
|
|
6
|
-
from inspyre_toolbox.syntactic_sweets.classes.decorators import validate_type
|
|
7
|
-
from is_matrix_forge.led_matrix.errors.misc import ImplicitNameDerivationError
|
|
8
|
-
|
|
9
4
|
|
|
10
5
|
def freeze_setter(
|
|
11
6
|
attr_name: Optional[str] = None,
|
|
@@ -94,6 +89,8 @@ def freeze_setter(
|
|
|
94
89
|
- `ImplicitNameDerivationError`: Raised for configuration issues with underscore-prefixed setters.
|
|
95
90
|
- `AttributeError`: Default exception for reassigning a frozen attribute.
|
|
96
91
|
"""
|
|
92
|
+
from is_matrix_forge.led_matrix.errors.misc import ImplicitNameDerivationError
|
|
93
|
+
|
|
97
94
|
def decorator(setter: Callable) -> Callable:
|
|
98
95
|
setter_name = setter.__name__
|
|
99
96
|
|
|
@@ -143,10 +140,3 @@ def freeze_setter(
|
|
|
143
140
|
return wrapper
|
|
144
141
|
|
|
145
142
|
return decorator
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
__all__ = [
|
|
149
|
-
'ImplicitNameDerivationError',
|
|
150
|
-
'freeze_setter',
|
|
151
|
-
'validate_type',
|
|
152
|
-
]
|
{is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/designer_gui/__init__.py
RENAMED
|
@@ -3,6 +3,6 @@ Author: Taylor B. tayjaybabee@gmail.com
|
|
|
3
3
|
Date: 2025-04-30 16:01:10
|
|
4
4
|
LastEditors: Taylor B. tayjaybabee@gmail.com
|
|
5
5
|
LastEditTime: 2025-04-30 16:01:49
|
|
6
|
-
FilePath: is_matrix_forge/designer_gui/
|
|
6
|
+
FilePath: is_matrix_forge/designer_gui/grid.py
|
|
7
7
|
Description: 这是默认设置,可以在设置》工具》File Description中进行配置
|
|
8
8
|
"""
|
|
@@ -4,12 +4,15 @@ import PySimpleGUI as sg
|
|
|
4
4
|
import copy
|
|
5
5
|
import os
|
|
6
6
|
|
|
7
|
-
from
|
|
7
|
+
from is_matrix_forge.led_matrix.helpers.device import DEVICES
|
|
8
8
|
from is_matrix_forge.led_matrix.display.animations.frame.base import Frame
|
|
9
9
|
from is_matrix_forge.led_matrix.display.grid.helpers import is_valid_grid
|
|
10
10
|
from is_matrix_forge.led_matrix.display.animations.frame.helpers import is_valid_frames
|
|
11
|
-
from .layout import PixelGridLayout
|
|
12
|
-
from is_matrix_forge.led_matrix import render_matrix
|
|
11
|
+
from is_matrix_forge.designer_gui.main_window.layout import PixelGridLayout
|
|
12
|
+
from is_matrix_forge.led_matrix.display.helpers import render_matrix
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
sg.theme('DarkTeal2')
|
|
13
16
|
|
|
14
17
|
|
|
15
18
|
def _normalize(key: Any) -> str:
|
|
@@ -139,6 +142,7 @@ class PixelGrid:
|
|
|
139
142
|
def _toggle_pixel(self, key: Tuple[int, int]) -> None:
|
|
140
143
|
col, row = key
|
|
141
144
|
new = 1 - self.grid[col][row]
|
|
145
|
+
print(f'Pixel {col},{row} toggled from {self.grid[col][row]} to {new}')
|
|
142
146
|
self.grid = [[new if (c==col and r==row) else self.grid[c][r]
|
|
143
147
|
for r in range(self.height)]
|
|
144
148
|
for c in range(self.width)]
|
|
@@ -250,3 +254,7 @@ class PixelGrid:
|
|
|
250
254
|
|
|
251
255
|
def _validate(self, grid: Any) -> bool:
|
|
252
256
|
return is_valid_grid(grid, self.width, self.height)
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
if __name__ == '__main__':
|
|
260
|
+
PixelGrid().run()
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import PySimpleGUI as sg
|
|
2
2
|
from typing import List, Tuple, Any
|
|
3
|
+
from is_matrix_forge.designer_gui.main_window.layout.button_grid.column import build_grid_frame
|
|
3
4
|
|
|
4
5
|
|
|
5
6
|
class PixelGridLayout:
|
|
@@ -93,12 +94,7 @@ class PixelGridLayout:
|
|
|
93
94
|
self.__button_list = value
|
|
94
95
|
|
|
95
96
|
def build(self) -> List[List[Any]]:
|
|
96
|
-
|
|
97
|
-
[sg.Button(' ', size=self.button_size, key=(col, row), pad=self.pad)
|
|
98
|
-
for col in range(self.width)]
|
|
99
|
-
for row in range(self.height)
|
|
100
|
-
]
|
|
101
|
-
grid_column = sg.Column(grid)
|
|
97
|
+
grid_column = build_grid_frame(self.width, self.height, button_size=self.button_size, pad=self.pad)
|
|
102
98
|
|
|
103
99
|
controls = [[sg.Button(btn)] for btn in self.button_list]
|
|
104
100
|
control_column = sg.Column(controls, vertical_alignment='top')
|
is_matrix_forge-1.0.0.dev6/is_matrix_forge/designer_gui/main_window/layout/button_grid/column.py
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import PySimpleGUI as sg
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def build_grid_frame(num_cols=9, num_rows=34, button_size=(2,1), pad=(1,1)):
|
|
5
|
+
"""Return a layout of 9 vertical columns (of 34 buttons each), side by side."""
|
|
6
|
+
return [
|
|
7
|
+
[
|
|
8
|
+
sg.Column(
|
|
9
|
+
[
|
|
10
|
+
[sg.Button(' ', key=(col, row), size=button_size, pad=pad)]
|
|
11
|
+
for row in range(num_rows)
|
|
12
|
+
],
|
|
13
|
+
pad=(0,0)
|
|
14
|
+
)
|
|
15
|
+
for col in range(num_cols)
|
|
16
|
+
]
|
|
17
|
+
]
|
is_matrix_forge-1.0.0.dev6/is_matrix_forge/designer_gui/main_window/layout/button_grid/grid.py
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import PySimpleGUI as sg
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def build_button_grid(num_cols, num_rows, button_size=(1, 1), pad=(1, 1)):
|
|
5
|
+
"""
|
|
6
|
+
Returns a list of `num_cols` lists, each containing `num_rows` buttons.
|
|
7
|
+
So: 9 columns of 34 rows each.
|
|
8
|
+
"""
|
|
9
|
+
return [
|
|
10
|
+
[sg.Button(' ', key=(col, row), size=button_size, pad=pad)]
|
|
11
|
+
for row in range(num_rows)
|
|
12
|
+
],
|
|
13
|
+
for col in range(num_cols)
|
|
14
|
+
]
|
|
15
|
+
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import streamlit as st
|
|
2
|
+
import json
|
|
3
|
+
import copy
|
|
4
|
+
|
|
5
|
+
class Frame:
|
|
6
|
+
def __init__(self, grid, duration=1.0):
|
|
7
|
+
self.grid = grid
|
|
8
|
+
self.duration = duration
|
|
9
|
+
|
|
10
|
+
class PixelGridWeb:
|
|
11
|
+
def __init__(self, width=9, height=34):
|
|
12
|
+
self.width = width
|
|
13
|
+
self.height = height
|
|
14
|
+
if "frames" not in st.session_state:
|
|
15
|
+
st.session_state.frames = [Frame(self._new_grid())]
|
|
16
|
+
if "current_frame" not in st.session_state:
|
|
17
|
+
st.session_state.current_frame = 0
|
|
18
|
+
|
|
19
|
+
def _new_grid(self):
|
|
20
|
+
return [[0 for _ in range(self.height)] for _ in range(self.width)]
|
|
21
|
+
|
|
22
|
+
@property
|
|
23
|
+
def frames(self):
|
|
24
|
+
return st.session_state.frames
|
|
25
|
+
|
|
26
|
+
@frames.setter
|
|
27
|
+
def frames(self, value):
|
|
28
|
+
st.session_state.frames = value
|
|
29
|
+
|
|
30
|
+
@property
|
|
31
|
+
def current_frame(self):
|
|
32
|
+
return st.session_state.current_frame
|
|
33
|
+
|
|
34
|
+
@current_frame.setter
|
|
35
|
+
def current_frame(self, value):
|
|
36
|
+
st.session_state.current_frame = value
|
|
37
|
+
|
|
38
|
+
@property
|
|
39
|
+
def grid(self):
|
|
40
|
+
return self.frames[self.current_frame].grid
|
|
41
|
+
|
|
42
|
+
def draw(self):
|
|
43
|
+
st.title("PixelGrid Animator")
|
|
44
|
+
st.write(f"Frame {self.current_frame+1}/{len(self.frames)}")
|
|
45
|
+
# Render grid
|
|
46
|
+
grid = self.grid
|
|
47
|
+
for row in range(self.height):
|
|
48
|
+
cols = st.columns(self.width)
|
|
49
|
+
for col in range(self.width):
|
|
50
|
+
key = f"pix_{col}_{row}_{self.current_frame}"
|
|
51
|
+
is_on = grid[col][row]
|
|
52
|
+
label = "🟩" if is_on else "⬛"
|
|
53
|
+
if cols[col].button(label, key=key, use_container_width=True):
|
|
54
|
+
grid[col][row] ^= 1 # Toggle
|
|
55
|
+
|
|
56
|
+
# Frame controls
|
|
57
|
+
c1, c2, c3, c4 = st.columns(4)
|
|
58
|
+
if c1.button("Prev", disabled=self.current_frame == 0):
|
|
59
|
+
self.current_frame -= 1
|
|
60
|
+
if c2.button("Next", disabled=self.current_frame == len(self.frames)-1):
|
|
61
|
+
self.current_frame += 1
|
|
62
|
+
if c3.button("Add Frame"):
|
|
63
|
+
self.frames.append(Frame(copy.deepcopy(self.grid)))
|
|
64
|
+
self.current_frame = len(self.frames) - 1
|
|
65
|
+
if c4.button("Delete Frame", disabled=len(self.frames) == 1):
|
|
66
|
+
self.frames.pop(self.current_frame)
|
|
67
|
+
self.current_frame = max(0, self.current_frame-1)
|
|
68
|
+
# Export/import
|
|
69
|
+
st.markdown("---")
|
|
70
|
+
exp1, exp2, exp3 = st.columns(3)
|
|
71
|
+
if exp1.button("Export JSON"):
|
|
72
|
+
st.download_button(
|
|
73
|
+
"Download JSON",
|
|
74
|
+
data=json.dumps([f.grid for f in self.frames]),
|
|
75
|
+
file_name="frames.json",
|
|
76
|
+
mime="application/json"
|
|
77
|
+
)
|
|
78
|
+
uploaded = exp2.file_uploader("Load JSON", type="json")
|
|
79
|
+
if uploaded:
|
|
80
|
+
data = json.load(uploaded)
|
|
81
|
+
if isinstance(data, list) and all(isinstance(frame, list) for frame in data):
|
|
82
|
+
self.frames = [Frame(copy.deepcopy(g)) for g in data]
|
|
83
|
+
self.current_frame = 0
|
|
84
|
+
# Placeholder for "Send to Matrix"
|
|
85
|
+
if exp3.button("Send to Matrix"):
|
|
86
|
+
st.info("This would send to your matrix (not implemented here)!")
|
|
87
|
+
|
|
88
|
+
def main():
|
|
89
|
+
pg = PixelGridWeb()
|
|
90
|
+
pg.draw()
|
|
91
|
+
|
|
92
|
+
if __name__ == "__main__":
|
|
93
|
+
main()
|
{is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/dev_tools/__init__.py
RENAMED
|
@@ -3,6 +3,6 @@ Author: Taylor B. tayjaybabee@gmail.com
|
|
|
3
3
|
Date: 2025-05-05 15:02:58
|
|
4
4
|
LastEditors: Taylor B. tayjaybabee@gmail.com
|
|
5
5
|
LastEditTime: 2025-05-05 15:24:08
|
|
6
|
-
FilePath: is_matrix_forge/dev_tools/
|
|
6
|
+
FilePath: is_matrix_forge/dev_tools/grid.py
|
|
7
7
|
Description: 这是默认设置,可以在设置》工具》File Description中进行配置
|
|
8
8
|
"""
|
{is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev6}/is_matrix_forge/inputmodule/ledmatrix.py
RENAMED
|
@@ -40,22 +40,6 @@ PWM_FREQUENCIES = [
|
|
|
40
40
|
]
|
|
41
41
|
|
|
42
42
|
|
|
43
|
-
def get_pwm_freq(dev):
|
|
44
|
-
"""Adjust the brightness scaling of the entire screen."""
|
|
45
|
-
res = send_command(dev, CommandVals.PwmFreq, with_response=True)
|
|
46
|
-
freq = int(res[0])
|
|
47
|
-
if freq == 0:
|
|
48
|
-
return 29000
|
|
49
|
-
elif freq == 1:
|
|
50
|
-
return 3600
|
|
51
|
-
elif freq == 2:
|
|
52
|
-
return 1800
|
|
53
|
-
elif freq == 3:
|
|
54
|
-
return 900
|
|
55
|
-
else:
|
|
56
|
-
return None
|
|
57
|
-
|
|
58
|
-
|
|
59
43
|
def percentage(dev, p):
|
|
60
44
|
"""Fill a percentage of the screen. Bottom to top"""
|
|
61
45
|
send_command(dev, CommandVals.Pattern, [PatternVals.Percentage, p])
|