From 25ea1694f1dbe4b50febd2a95ee5ab1215adb8d0 Mon Sep 17 00:00:00 2001 From: Peter Stockings Date: Thu, 5 Mar 2026 13:40:17 +1100 Subject: [PATCH] Add ability to toggle and resize chat bar --- desktop-client/room_widget.py | 47 ++++++++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 6 deletions(-) diff --git a/desktop-client/room_widget.py b/desktop-client/room_widget.py index 5d44214..5e2c795 100644 --- a/desktop-client/room_widget.py +++ b/desktop-client/room_widget.py @@ -4,7 +4,7 @@ import html import re from PyQt6.QtWidgets import ( QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, - QPushButton, QFrame, QSlider, QTextEdit, QTextBrowser, QApplication, QToolTip + QPushButton, QFrame, QSlider, QTextEdit, QTextBrowser, QApplication, QToolTip, QSplitter ) from PyQt6.QtCore import Qt, pyqtSignal, QTimer from PyQt6.QtGui import QIcon, QCursor @@ -81,10 +81,21 @@ class RoomWidget(QWidget): self._setup_ui() def _setup_ui(self): - layout = QHBoxLayout(self) + layout = QVBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(0) + self.splitter = QSplitter(Qt.Orientation.Horizontal) + self.splitter.setHandleWidth(3) + self.splitter.setStyleSheet(""" + QSplitter::handle { + background-color: #333; + } + QSplitter::handle:hover { + background-color: #3ea6ff; + } + """) + # --- Left Side: Video --- video_container = QWidget() video_layout = QVBoxLayout(video_container) @@ -171,6 +182,14 @@ class RoomWidget(QWidget): controls_layout.addSpacing(10) controls_layout.addWidget(self.fullscreen_btn) + # Chat toggle + self.chat_toggle_btn = QPushButton("💬") + self.chat_toggle_btn.setFixedSize(40, 40) + self.chat_toggle_btn.setObjectName("iconBtn") + self.chat_toggle_btn.setToolTip("Toggle Chat") + self.chat_toggle_btn.clicked.connect(self.toggle_chat) + controls_layout.addWidget(self.chat_toggle_btn) + video_layout.addWidget(self.topbar) video_layout.addWidget(self.video_frame) video_layout.addWidget(self.controls_bar) @@ -178,7 +197,8 @@ class RoomWidget(QWidget): # --- Right Side: Chat --- self.chat_container = QFrame() self.chat_container.setObjectName("chatContainer") - self.chat_container.setFixedWidth(320) + self.chat_container.setMinimumWidth(200) + self.chat_container.setMaximumWidth(500) chat_layout = QVBoxLayout(self.chat_container) chat_header = QLabel("Live Chat") @@ -257,12 +277,17 @@ class RoomWidget(QWidget): chat_layout.addWidget(self.chat_messages, 1) chat_layout.addLayout(chat_input_layout) - layout.addWidget(video_container, 1) - layout.addWidget(self.chat_container) + self.splitter.addWidget(video_container) + self.splitter.addWidget(self.chat_container) + self.splitter.setStretchFactor(0, 1) + self.splitter.setStretchFactor(1, 0) + self.splitter.setSizes([700, 320]) + + layout.addWidget(self.splitter) # Prevent UI components from stealing focus (which breaks spacebar shortcuts) for w in [self.copy_code_btn, self.leave_btn, self.play_btn, self.fullscreen_btn, - self.chat_send_btn, self.seekbar, self.volume_slider, self.tags_header_btn]: + self.chat_send_btn, self.seekbar, self.volume_slider, self.tags_header_btn, self.chat_toggle_btn]: w.setFocusPolicy(Qt.FocusPolicy.NoFocus) # specifically for chat_messages, we allow clicking links, but avoid focus stealing @@ -326,6 +351,16 @@ class RoomWidget(QWidget): self.tags_list.hide() self.tags_header_btn.setText("▶ Highlights") + def toggle_chat(self): + if self.chat_container.isVisible(): + self._saved_chat_width = self.chat_container.width() + self.chat_container.hide() + else: + self.chat_container.show() + w = getattr(self, '_saved_chat_width', 320) + sizes = self.splitter.sizes() + self.splitter.setSizes([sizes[0] - w, w]) + def toggle_fullscreen(self): top_window = self.window() if top_window.isFullScreen():