From b37def8fec6d34fe6e94591b140a04d1356f1912 Mon Sep 17 00:00:00 2001 From: jknapp Date: Sat, 3 Jan 2026 18:05:10 -0800 Subject: [PATCH] Add category dropdown with existing categories in macro editor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Replace QLineEdit with editable QComboBox for category field - Populate dropdown with existing categories from saved macros - Allow typing new category names (editable combo box) - Add styled dropdown arrow and item view to match dark theme 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- gui/macro_editor.py | 43 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/gui/macro_editor.py b/gui/macro_editor.py index cb59fd3..7492d66 100644 --- a/gui/macro_editor.py +++ b/gui/macro_editor.py @@ -7,7 +7,7 @@ from PySide6.QtWidgets import ( QDialog, QVBoxLayout, QHBoxLayout, QFormLayout, QLabel, QLineEdit, QPushButton, QListWidget, QListWidgetItem, QComboBox, QSpinBox, QMessageBox, QFileDialog, QWidget, - QGroupBox, QScrollArea + QGroupBox, QScrollArea, QCompleter ) from PySide6.QtCore import Qt, Signal from PySide6.QtGui import QPixmap, QIcon @@ -352,6 +352,33 @@ class MacroEditorDialog(QDialog): QLineEdit:focus {{ border-color: {THEME['accent_color']}; }} + QComboBox {{ + background-color: {THEME['bg_color']}; + border: 1px solid {THEME['button_bg']}; + border-radius: 4px; + padding: 8px; + color: {THEME['fg_color']}; + }} + QComboBox:focus {{ + border-color: {THEME['accent_color']}; + }} + QComboBox::drop-down {{ + border: none; + width: 20px; + }} + QComboBox::down-arrow {{ + image: none; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid {THEME['fg_color']}; + margin-right: 5px; + }} + QComboBox QAbstractItemView {{ + background-color: {THEME['bg_color']}; + color: {THEME['fg_color']}; + selection-background-color: {THEME['accent_color']}; + border: 1px solid {THEME['button_bg']}; + }} """) self.setup_ui() @@ -400,8 +427,14 @@ class MacroEditorDialog(QDialog): category_group = QGroupBox("Category (optional)") category_group.setStyleSheet(name_group.styleSheet()) category_layout = QVBoxLayout(category_group) - self.category_input = QLineEdit() - self.category_input.setPlaceholderText("Enter category") + self.category_input = QComboBox() + self.category_input.setEditable(True) + self.category_input.setInsertPolicy(QComboBox.NoInsert) + self.category_input.lineEdit().setPlaceholderText("Select or enter category") + # Populate with existing categories (excluding "All") + existing_categories = [c for c in self.macro_manager.get_unique_tabs() if c != "All"] + self.category_input.addItem("") # Empty option for no category + self.category_input.addItems(existing_categories) category_layout.addWidget(self.category_input) content_layout.addWidget(category_group) @@ -522,7 +555,7 @@ class MacroEditorDialog(QDialog): return self.name_input.setText(macro.get("name", "")) - self.category_input.setText(macro.get("category", "")) + self.category_input.setCurrentText(macro.get("category", "")) self.command_builder.set_commands(macro.get("commands", [])) if macro.get("image_path"): @@ -563,7 +596,7 @@ class MacroEditorDialog(QDialog): QMessageBox.warning(self, "Error", "Please add at least one command") return - category = self.category_input.text().strip() + category = self.category_input.currentText().strip() if self.macro_id: # Update existing macro