Framing widget done

This commit is contained in:
2025-08-04 18:12:08 +02:00
parent 2a6498f117
commit 66d542f742
10 changed files with 229 additions and 206 deletions

View File

@ -13,8 +13,7 @@ from .layout_manager import LayoutManager
from .widgets.base_widget import BaseWidget
logging.basicConfig(level=logging.INFO,
format="%(asctime)s %(levelname)s %(message)s")
logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s")
logger = logging.getLogger(__name__)
@ -62,16 +61,14 @@ class EditorManager:
and cls is not ModuleBaseWidget
and cls.register
):
logging.info(
f" -> Found and registered widget: {name}")
logging.info(f" -> Found and registered widget: {name}")
self._register_widget(name, cls)
except Exception as e:
logging.error(f"Failed to import widget '{py_file.name}': {e}")
def _register_widget(self, name: str, widget_class: object):
if name in self.widget_classes:
logging.warning(
f"Widget '{name}' is already registered. Overwriting.")
logging.warning(f"Widget '{name}' is already registered. Overwriting.")
self.widget_classes[name] = widget_class
def _add_widget(self, widget_type: str, config: dict = {}):
@ -98,6 +95,18 @@ class EditorManager:
def _on_scroll(self, sender, app_data, user_data):
self.bus.publish_deferred("mouse_scrolled", app_data)
def _on_release(self, sender, app_data, user_data):
self.bus.publish_deferred(
"mouse_released",
{
"button": (
"right"
if app_data == 0
else ("left" if app_data == 1 else ("middle"))
)
},
)
def setup(self):
self._discover_and_register_widgets(
f"{os.path.dirname(os.path.realpath(__file__))}/widgets"
@ -118,8 +127,7 @@ class EditorManager:
"process_full_res", None
),
)
dpg.add_menu_item(
label="Quit", callback=lambda: dpg.stop_dearpygui())
dpg.add_menu_item(label="Quit", callback=lambda: dpg.stop_dearpygui())
with dpg.menu(label="View"):
for widget_name in sorted(self.widget_classes.keys()):
@ -130,16 +138,9 @@ class EditorManager:
)
with dpg.handler_registry() as self.handler_registry:
dpg.add_mouse_drag_handler(
callback=self._on_drag, threshold=1.0, button=0
)
dpg.add_mouse_drag_handler(
callback=self._on_drag, threshold=1.0, button=1
)
dpg.add_mouse_drag_handler(
callback=self._on_drag, threshold=1.0, button=2
)
dpg.add_mouse_drag_handler(callback=self._on_drag, threshold=1.0)
dpg.add_mouse_wheel_handler(callback=self._on_scroll)
dpg.add_mouse_release_handler(callback=self._on_release)
def run(self):
self.setup()