"""APIClient - Agent - Code Generation Dialog.""" from PyQt6.QtWidgets import ( QDialog, QVBoxLayout, QHBoxLayout, QComboBox, QTextEdit, QPushButton, QLabel, QApplication, QWidget ) from PyQt6.QtGui import QFont from app.ui.theme import Colors from app.core.code_gen import GENERATORS from app.models import HttpRequest class CodeGenDialog(QDialog): def __init__(self, req: HttpRequest, parent=None): super().__init__(parent) self.req = req self.setWindowTitle("Generate Code Snippet") self.setMinimumSize(720, 540) layout = QVBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(0) # Header header = QWidget() header.setObjectName("panelHeader") header.setFixedHeight(52) hl = QHBoxLayout(header) hl.setContentsMargins(16, 0, 16, 0) title = QLabel("Generate Code") title.setObjectName("panelTitle") hl.addWidget(title) hl.addStretch() lang_label = QLabel("Language:") lang_label.setObjectName("fieldLabel") self.lang_combo = QComboBox() self.lang_combo.addItems(list(GENERATORS.keys())) self.lang_combo.setMinimumWidth(200) self.lang_combo.currentTextChanged.connect(self._generate) hl.addWidget(lang_label) hl.addWidget(self.lang_combo) layout.addWidget(header) # Code view self.code_view = QTextEdit() self.code_view.setObjectName("codeEditor") self.code_view.setReadOnly(True) self.code_view.setFont(QFont("JetBrains Mono, Fira Code, Cascadia Code, Consolas", 11)) layout.addWidget(self.code_view, 1) # Footer footer = QWidget() footer.setObjectName("panelFooter") footer.setFixedHeight(52) fl = QHBoxLayout(footer) fl.setContentsMargins(16, 0, 16, 0) fl.addStretch() copy_btn = QPushButton("Copy to Clipboard") copy_btn.setObjectName("accent") copy_btn.setFixedWidth(150) copy_btn.clicked.connect(self._copy) close_btn = QPushButton("Close") close_btn.setFixedWidth(80) close_btn.clicked.connect(self.accept) fl.addWidget(copy_btn) fl.addWidget(close_btn) layout.addWidget(footer) self._generate(self.lang_combo.currentText()) def _generate(self, lang: str): gen = GENERATORS.get(lang) if gen: self.code_view.setPlainText(gen(self.req)) def _copy(self): QApplication.clipboard().setText(self.code_view.toPlainText())