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
 |