68 lines
1.8 KiB
Python
68 lines
1.8 KiB
Python
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()
|