59 lines
2.2 KiB
Python
59 lines
2.2 KiB
Python
from PySide6.QtWidgets import QWidget, QVBoxLayout, QLabel
|
||
from PySide6.QtCore import Qt
|
||
from app.core.theme import theme_manager
|
||
|
||
class MessageBubbleWidget(QWidget):
|
||
def __init__(self, text: str, timestamp: str, is_own: bool):
|
||
super().__init__()
|
||
self.init_ui(text, timestamp, is_own)
|
||
self.update_theme()
|
||
|
||
def init_ui(self, text: str, timestamp: str, is_own: bool):
|
||
"""Инициализирует пользовательский интерфейс."""
|
||
self.layout = QVBoxLayout(self)
|
||
self.layout.setSpacing(2)
|
||
|
||
self.text_label = QLabel(text)
|
||
self.text_label.setWordWrap(True)
|
||
|
||
self.timestamp_label = QLabel(timestamp)
|
||
self.timestamp_label.setAlignment(Qt.AlignRight)
|
||
|
||
self.layout.addWidget(self.text_label)
|
||
self.layout.addWidget(self.timestamp_label)
|
||
|
||
self.is_own = is_own
|
||
self.setObjectName("MessageBubble")
|
||
self.update_theme()
|
||
|
||
def update_theme(self):
|
||
"""Обновляет стили виджета в соответствии с текущей темой."""
|
||
palette = theme_manager.get_current_palette()
|
||
|
||
if self.is_own:
|
||
bg_color = palette['accent']
|
||
text_color = "#ffffff"
|
||
timestamp_color = "#dddddd"
|
||
alignment = Qt.AlignRight
|
||
else:
|
||
bg_color = palette['secondary']
|
||
text_color = palette['text']
|
||
timestamp_color = palette['text_secondary']
|
||
alignment = Qt.AlignLeft
|
||
|
||
self.setStyleSheet(f"""
|
||
#MessageBubble {{
|
||
background-color: {bg_color};
|
||
border-radius: 10px;
|
||
padding: 8px 12px;
|
||
}}
|
||
""")
|
||
self.text_label.setStyleSheet(f"color: {text_color}; font-size: 10pt;")
|
||
self.timestamp_label.setStyleSheet(f"color: {timestamp_color}; font-size: 8pt;")
|
||
|
||
# Устанавливаем выравнивание для всего layout
|
||
parent_layout = self.parentWidget().layout() if self.parentWidget() else None
|
||
if parent_layout:
|
||
# Этот способ не сработает напрямую, выравнивание нужно делать в QListWidgetItem
|
||
pass
|