Files
2026-05-15 17:27:26 +02:00

121 lines
4.1 KiB
Python

# main_window.py
from PySide6.QtWidgets import (
QMainWindow,
QTextEdit,
QPushButton,
QVBoxLayout,
QWidget,
QLabel,
QStatusBar,
QHBoxLayout,
QCheckBox,
)
from PySide6.QtCore import Qt
from GUI.Widgets.json_viewer import JsonViewer
from Core.UnrealApi.unreal_api import (
UnrealApi,
) # Assurez-vous d'importer correctement la classe UnrealApi
import json
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("WebSocket JSON Sender")
self.setGeometry(100, 100, 1000, 900)
self.statusBar = QStatusBar()
self.setStatusBar(self.statusBar)
self.statusBar.showMessage("[Disconnected]")
layout = QVBoxLayout()
self.json_input = QTextEdit(self)
self.json_input.setPlaceholderText("Entrez le JSON ici...")
layout.addWidget(self.json_input)
self.send_button = QPushButton("Envoyer", self)
self.send_button.clicked.connect(self.send_json_message)
layout.addWidget(self.send_button)
self.ping_button = QPushButton("Ping", self)
self.ping_button.clicked.connect(self.send_ping)
layout.addWidget(self.ping_button)
self.sent_display = JsonViewer("Sent to server", self)
self.sent_display.set_emit_double_click_on_header(True)
self.sent_display.viewer.header_double_clicked.connect(self.sent_display_header_double_clicked)
layout.addWidget(self.sent_display)
self.server_layout = QHBoxLayout()
self.server_widget = QWidget()
self.response_display = JsonViewer("Received from server", self, True)
self.filter_avalanche_checkbox = QCheckBox("Filter Avalanche", self)
# default to checked
self.filter_avalanche_checkbox.setChecked(True)
self.filter_avalanche_checkbox.stateChanged.connect(self.filter_avalanche)
self.server_layout.addWidget(self.response_display)
self.server_layout.addWidget(self.filter_avalanche_checkbox)
self.server_widget.setLayout(self.server_layout)
layout.addWidget(self.server_widget)
container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)
self.unreal_api = UnrealApi(
"ws://localhost:30021", self
) # Assurez-vous que le second argument est correct
self.unreal_api.set_filtered(True)
# Connecter les signaux aux slots
self.unreal_api.message_received.connect(self.on_message_received)
self.unreal_api.message_sent.connect(self.on_message_sent)
self.unreal_api.ws_connected.connect(self.ws_connected)
self.unreal_api.ws_connect()
def send_json_message(self):
message_text = self.json_input.toPlainText().strip()
print(f"About to send {message_text}")
if message_text:
self.unreal_api.send_message(message_text)
# self.sent_display.add_row(data=message_text)
def on_message_received(self, message):
# print(f"MainWindow received message: {message}")
self.response_display.add_row(data=message)
def on_message_sent(self, sent) -> None:
self.sent_display.add_row(data=sent)
def ws_connected(self, connected: bool) -> None:
if connected:
self.statusBar.showMessage("[Connected]")
else:
self.statusBar.showMessage("[Disconnected]")
def closeEvent(self, event):
self.unreal_api.close_websocket() # Assurez-vous de fermer correctement le websocket
event.accept()
def filter_avalanche(self, state):
print(f"filter_avalanche state: {state}")
if (state == 2):
print("changing state to True")
self.unreal_api.set_filtered(True)
elif (state == 0):
print("changing state to False")
self.unreal_api.set_filtered(False)
def send_ping(self):
print("sending ping to unreal")
self.unreal_api.send_ping()
def sent_display_header_double_clicked(self, data):
self.json_input.clear()
self.json_input.append(json.dumps(data, indent=2))