kigo-gui-framework 3.1__tar.gz → 3.2__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.
Files changed (64) hide show
  1. {kigo_gui_framework-3.1/kigo_gui_framework.egg-info → kigo_gui_framework-3.2}/PKG-INFO +2 -2
  2. kigo_gui_framework-3.2/README.txt +2 -0
  3. kigo_gui_framework-3.2/kigo/debug/__init__.py +3 -0
  4. kigo_gui_framework-3.2/kigo/debug/freeze.py +54 -0
  5. kigo_gui_framework-3.2/kigo/inspector/__init__.py +3 -0
  6. kigo_gui_framework-3.2/kigo/inspector/inspector.py +50 -0
  7. kigo_gui_framework-3.2/kigo/inspector/overlay.py +36 -0
  8. kigo_gui_framework-3.2/kigo/inspector/panel.py +41 -0
  9. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2/kigo_gui_framework.egg-info}/PKG-INFO +2 -2
  10. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo_gui_framework.egg-info/SOURCES.txt +6 -0
  11. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/pyproject.toml +2 -2
  12. kigo_gui_framework-3.1/README.txt +0 -10
  13. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/MANIFEST.in +0 -0
  14. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/README.md +0 -0
  15. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/_init_.py +0 -0
  16. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/accelerate.py +0 -0
  17. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/android/__init__.py +0 -0
  18. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/android/info.py +0 -0
  19. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/android/lifecycle.py +0 -0
  20. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/android/ossupport.py +0 -0
  21. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/app.py +0 -0
  22. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/cli/__init__.py +0 -0
  23. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/cli/doctor.py +0 -0
  24. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/cli/main.py +0 -0
  25. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/ecs/__init__.py +0 -0
  26. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/ecs/component.py +0 -0
  27. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/ecs/entity.py +0 -0
  28. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/ecs/render.py +0 -0
  29. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/ecs/system.py +0 -0
  30. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/ecs/world.py +0 -0
  31. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/fx_gl2d.py +0 -0
  32. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/fx_quick.py +0 -0
  33. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/gpu.py +0 -0
  34. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/hud.py +0 -0
  35. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/hwaccel.py +0 -0
  36. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/logging/__init__.py +0 -0
  37. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/logging/jsonlog.py +0 -0
  38. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/media.py +0 -0
  39. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/net/__init__.py +0 -0
  40. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/net/qnetwork.py +0 -0
  41. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/physics.py +0 -0
  42. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/physics_policy.py +0 -0
  43. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/platform.py +0 -0
  44. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/qt/__init__.py +0 -0
  45. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/qt/backend.py +0 -0
  46. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/runtime.py +0 -0
  47. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/shader_demo.py +0 -0
  48. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/shim.py +0 -0
  49. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/skins.py +0 -0
  50. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/studio/__init__.py +0 -0
  51. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/studio/core.py +0 -0
  52. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/studio/overlay.py +0 -0
  53. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/style.py +0 -0
  54. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/tree.py +0 -0
  55. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/wasm/__init__.py +0 -0
  56. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/wasm/executor.py +0 -0
  57. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/wasm/module.py +0 -0
  58. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo/widgets.py +0 -0
  59. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo_gui_framework.egg-info/dependency_links.txt +0 -0
  60. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo_gui_framework.egg-info/entry_points.txt +0 -0
  61. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo_gui_framework.egg-info/requires.txt +0 -0
  62. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/kigo_gui_framework.egg-info/top_level.txt +0 -0
  63. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/setup.cfg +0 -0
  64. {kigo_gui_framework-3.1 → kigo_gui_framework-3.2}/setup.py +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kigo-gui-framework
3
- Version: 3.1
4
- Summary: Kigo has two CLI commands now. kigo run runs your app and kigo doctor checks your app for bugs
3
+ Version: 3.2
4
+ Summary: Kigo has Time Freeze Debugging and a Visual Inspector now.
5
5
  Author: Anand Kumar
6
6
  License: Zlib
7
7
  Keywords: gui,qt,pyqt,webengine,opengl,wasm,android,chromeos,framework
@@ -0,0 +1,2 @@
1
+ Kigo now has time freeze debugging and a scene inspector using my Neolog
2
+ engine (well, it is based off of Qt's things, but who cares, neolog is a good name)
@@ -0,0 +1,3 @@
1
+ from .freeze import freeze
2
+
3
+ __all__ = ["freeze"]
@@ -0,0 +1,54 @@
1
+ # SPDX-License-Identifier: Zlib
2
+ # kigo/debug/freeze.py
3
+
4
+ from kigo.qt.backend import QtCore, QtWidgets
5
+
6
+
7
+ def freeze(reason: str = "Execution paused", *, data: dict | None = None):
8
+ """
9
+ Freeze execution while keeping the Qt event loop alive.
10
+ Used for visual + state debugging.
11
+
12
+ This does NOT crash or block Qt internally.
13
+ """
14
+
15
+ # Dialog shown during freeze
16
+ dialog = QtWidgets.QDialog()
17
+ dialog.setWindowTitle("Kigo Time Freeze")
18
+ dialog.setModal(False)
19
+ dialog.setWindowFlags(
20
+ QtCore.Qt.WindowType.WindowStaysOnTopHint
21
+ | QtCore.Qt.WindowType.Dialog
22
+ )
23
+
24
+ layout = QtWidgets.QVBoxLayout(dialog)
25
+
26
+ label = QtWidgets.QLabel(f"🧊 {reason}")
27
+ label.setStyleSheet("font-weight: bold; font-size: 14px;")
28
+ layout.addWidget(label)
29
+
30
+ if data:
31
+ text = QtWidgets.QPlainTextEdit()
32
+ text.setReadOnly(True)
33
+ pretty = "\n".join(f"{k}: {v}" for k, v in data.items())
34
+ text.setPlainText(pretty)
35
+ layout.addWidget(text)
36
+
37
+ btn = QtWidgets.QPushButton("Resume")
38
+ layout.addWidget(btn)
39
+
40
+ # Local event loop = time freeze
41
+ loop = QtCore.QEventLoop()
42
+
43
+ btn.clicked.connect(loop.quit)
44
+ dialog.finished.connect(loop.quit)
45
+
46
+ dialog.show()
47
+
48
+ # Process paint events before freezing
49
+ QtWidgets.QApplication.processEvents()
50
+
51
+ # TIME FREEZE STARTS HERE
52
+ loop.exec()
53
+
54
+ dialog.close()
@@ -0,0 +1,3 @@
1
+ from .inspector import enable_inspector
2
+
3
+ __all__ = ["enable_inspector"]
@@ -0,0 +1,50 @@
1
+ # SPDX-License-Identifier: Zlib
2
+ # kigo/inspector/inspector.py
3
+
4
+ from kigo.qt.backend import QtCore, QtWidgets
5
+ from kigo.inspector.overlay import Overlay
6
+ from kigo.inspector.panel import InspectorPanel
7
+
8
+
9
+ class Inspector(QtCore.QObject):
10
+ def __init__(self, app: QtWidgets.QApplication):
11
+ super().__init__()
12
+ self.app = app
13
+ self.overlay = Overlay()
14
+ self.panel = InspectorPanel()
15
+
16
+ self.app.installEventFilter(self)
17
+
18
+ def attach(self):
19
+ for w in self.app.topLevelWidgets():
20
+ if isinstance(w, QtWidgets.QMainWindow):
21
+ w.addDockWidget(
22
+ QtCore.Qt.DockWidgetArea.RightDockWidgetArea,
23
+ self.panel,
24
+ )
25
+ self.overlay.setParent(w)
26
+ self.overlay.resize(w.size())
27
+
28
+ def eventFilter(self, obj, event):
29
+ if isinstance(event, QtCore.QEvent):
30
+ if event.type() == QtCore.QEvent.Type.MouseMove:
31
+ widget = self.app.widgetAt(event.globalPosition().toPoint())
32
+ if widget:
33
+ rect = widget.rect()
34
+ top_left = widget.mapToGlobal(rect.topLeft())
35
+ self.overlay.highlight(
36
+ QtCore.QRect(top_left, rect.size())
37
+ )
38
+
39
+ elif event.type() == QtCore.QEvent.Type.MouseButtonPress:
40
+ widget = self.app.widgetAt(event.globalPosition().toPoint())
41
+ self.panel.inspect(widget)
42
+ return True
43
+
44
+ return False
45
+
46
+
47
+ def enable_inspector(app: QtWidgets.QApplication):
48
+ inspector = Inspector(app)
49
+ inspector.attach()
50
+ return inspector
@@ -0,0 +1,36 @@
1
+ # SPDX-License-Identifier: Zlib
2
+ # kigo/inspector/overlay.py
3
+
4
+ from kigo.qt.backend import QtWidgets, QtGui, QtCore
5
+
6
+
7
+ class Overlay(QtWidgets.QWidget):
8
+ def __init__(self, parent=None):
9
+ super().__init__(parent)
10
+ self.setAttribute(QtCore.Qt.WidgetAttribute.WA_TransparentForMouseEvents)
11
+ self.setAttribute(QtCore.Qt.WidgetAttribute.WA_NoSystemBackground)
12
+ self.setAttribute(QtCore.Qt.WidgetAttribute.WA_AlwaysStackOnTop)
13
+ self.hide()
14
+
15
+ self._rect = None
16
+
17
+ def highlight(self, rect: QtCore.QRect):
18
+ self._rect = rect
19
+ self.setGeometry(rect.adjusted(-2, -2, 2, 2))
20
+ self.show()
21
+ self.raise_()
22
+ self.update()
23
+
24
+ def clear(self):
25
+ self._rect = None
26
+ self.hide()
27
+
28
+ def paintEvent(self, event):
29
+ if not self._rect:
30
+ return
31
+
32
+ painter = QtGui.QPainter(self)
33
+ painter.setRenderHint(QtGui.QPainter.RenderHint.Antialiasing)
34
+ pen = QtGui.QPen(QtGui.QColor(0, 180, 255), 2, QtCore.Qt.PenStyle.DashLine)
35
+ painter.setPen(pen)
36
+ painter.drawRect(self.rect().adjusted(1, 1, -1, -1))
@@ -0,0 +1,41 @@
1
+ # SPDX-License-Identifier: Zlib
2
+ # kigo/inspector/panel.py
3
+
4
+ from kigo.qt.backend import QtWidgets
5
+
6
+
7
+ class InspectorPanel(QtWidgets.QDockWidget):
8
+ def __init__(self):
9
+ super().__init__("Kigo Inspector")
10
+ self.setAllowedAreas(
11
+ self.DockWidgetArea.LeftDockWidgetArea
12
+ | self.DockWidgetArea.RightDockWidgetArea
13
+ )
14
+
15
+ self.text = QtWidgets.QPlainTextEdit()
16
+ self.text.setReadOnly(True)
17
+ self.setWidget(self.text)
18
+
19
+ def inspect(self, widget):
20
+ if widget is None:
21
+ self.text.setPlainText("No widget")
22
+ return
23
+
24
+ info = []
25
+ info.append(f"Class: {widget.__class__.__name__}")
26
+ info.append(f"ObjectName: {widget.objectName() or '(none)'}")
27
+ info.append(f"Visible: {widget.isVisible()}")
28
+ info.append(f"Enabled: {widget.isEnabled()}")
29
+ info.append(f"Geometry: {widget.geometry()}")
30
+
31
+ parents = []
32
+ p = widget.parentWidget()
33
+ while p:
34
+ parents.append(p.__class__.__name__)
35
+ p = p.parentWidget()
36
+
37
+ info.append("Parent chain:")
38
+ for name in parents:
39
+ info.append(f" ↳ {name}")
40
+
41
+ self.text.setPlainText("\n".join(info))
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kigo-gui-framework
3
- Version: 3.1
4
- Summary: Kigo has two CLI commands now. kigo run runs your app and kigo doctor checks your app for bugs
3
+ Version: 3.2
4
+ Summary: Kigo has Time Freeze Debugging and a Visual Inspector now.
5
5
  Author: Anand Kumar
6
6
  License: Zlib
7
7
  Keywords: gui,qt,pyqt,webengine,opengl,wasm,android,chromeos,framework
@@ -29,12 +29,18 @@ kigo/android/ossupport.py
29
29
  kigo/cli/__init__.py
30
30
  kigo/cli/doctor.py
31
31
  kigo/cli/main.py
32
+ kigo/debug/__init__.py
33
+ kigo/debug/freeze.py
32
34
  kigo/ecs/__init__.py
33
35
  kigo/ecs/component.py
34
36
  kigo/ecs/entity.py
35
37
  kigo/ecs/render.py
36
38
  kigo/ecs/system.py
37
39
  kigo/ecs/world.py
40
+ kigo/inspector/__init__.py
41
+ kigo/inspector/inspector.py
42
+ kigo/inspector/overlay.py
43
+ kigo/inspector/panel.py
38
44
  kigo/logging/__init__.py
39
45
  kigo/logging/jsonlog.py
40
46
  kigo/net/__init__.py
@@ -5,8 +5,8 @@ build-backend = "setuptools.build_meta"
5
5
 
6
6
  [project]
7
7
  name = "kigo-gui-framework"
8
- version = "3.1"
9
- description = "Kigo has two CLI commands now. kigo run runs your app and kigo doctor checks your app for bugs"
8
+ version = "3.2"
9
+ description = "Kigo has Time Freeze Debugging and a Visual Inspector now."
10
10
  readme = "README.md"
11
11
  license = { text = "Zlib" }
12
12
 
@@ -1,10 +0,0 @@
1
- Kigo now has support for networking and
2
- SunOS
3
- Solaris
4
- FreeBSD
5
- Android
6
- Linux
7
- Mac
8
- Windous
9
- ChromeOS
10
- Do not use v2.8 (missing __init__.py)