feat: full implementation - switcher, device watcher, hotkeys, tray, settings UI

This commit is contained in:
Miłosz Matysiak
2026-04-09 10:09:01 +02:00
parent 40d1c23051
commit 83293c8a91
13 changed files with 1162 additions and 0 deletions

67
main.py Normal file
View File

@@ -0,0 +1,67 @@
import sys
import queue
import threading
import logging
from PyQt6.QtWidgets import QApplication
from PyQt6.QtCore import QTimer
from config.config_manager import ConfigManager
from core.switcher import MonitorSwitcher
from core.device_watcher import DeviceWatcher
from core.hotkey_manager import HotkeyManager
from ui.tray import TrayApp
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s %(name)s %(levelname)s %(message)s",
)
def main() -> None:
app = QApplication(sys.argv)
app.setQuitOnLastWindowClosed(False)
config = ConfigManager()
switcher = MonitorSwitcher(config)
watcher = DeviceWatcher(config, switcher)
hotkeys = HotkeyManager(config, switcher)
settings_queue: queue.Queue = queue.Queue()
tray = TrayApp(config, switcher, settings_queue)
watcher.start()
hotkeys.register_all()
tray_thread = threading.Thread(
target=tray.run_tray, daemon=True, name="TrayThread"
)
tray_thread.start()
settings_window = None
def process_queue() -> None:
nonlocal settings_window
while not settings_queue.empty():
cmd = settings_queue.get_nowait()
if cmd == "open_settings":
from ui.settings_window import SettingsWindow
if settings_window is None or not settings_window.isVisible():
settings_window = SettingsWindow(config, switcher, hotkeys)
settings_window.show()
settings_window.raise_()
settings_window.activateWindow()
elif cmd == "exit":
hotkeys.unregister_all()
watcher.stop()
app.quit()
timer = QTimer()
timer.timeout.connect(process_queue)
timer.start(100)
sys.exit(app.exec())
if __name__ == "__main__":
main()