fix(ui): add missing ArmorSelectorDialog class
- Implemented ArmorSelectorDialog for selecting armors from API - Search functionality by name - Displays protection stats (Impact, Cut, Stab, etc.) - Fixes ImportError in ui/__init__.py
This commit is contained in:
parent
dd2fce8b62
commit
37302d6a5a
|
|
@ -733,6 +733,115 @@ class WeaponSelectorDialog(QDialog):
|
||||||
self.accept()
|
self.accept()
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# Armor Selector Dialog
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
class ArmorSelectorDialog(QDialog):
|
||||||
|
"""Dialog for selecting armors from Entropia Nexus API."""
|
||||||
|
|
||||||
|
armor_selected = pyqtSignal(object)
|
||||||
|
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
self.setWindowTitle("Select Armor - Entropia Nexus")
|
||||||
|
self.setMinimumSize(900, 600)
|
||||||
|
self.armors = []
|
||||||
|
self.selected_armor = None
|
||||||
|
self.api = EntropiaNexusAPI()
|
||||||
|
|
||||||
|
self._setup_ui()
|
||||||
|
self._load_data()
|
||||||
|
|
||||||
|
def _setup_ui(self):
|
||||||
|
layout = QVBoxLayout(self)
|
||||||
|
layout.setSpacing(10)
|
||||||
|
|
||||||
|
self.status_label = QLabel("Loading armors from Entropia Nexus...")
|
||||||
|
layout.addWidget(self.status_label)
|
||||||
|
|
||||||
|
search_layout = QHBoxLayout()
|
||||||
|
search_layout.addWidget(QLabel("Search:"))
|
||||||
|
self.search_input = QLineEdit()
|
||||||
|
self.search_input.setPlaceholderText("Search armors by name...")
|
||||||
|
self.search_input.returnPressed.connect(self._on_search)
|
||||||
|
search_layout.addWidget(self.search_input)
|
||||||
|
self.search_btn = QPushButton("Search")
|
||||||
|
self.search_btn.clicked.connect(self._on_search)
|
||||||
|
search_layout.addWidget(self.search_btn)
|
||||||
|
layout.addLayout(search_layout)
|
||||||
|
|
||||||
|
self.results_tree = QTreeWidget()
|
||||||
|
self.results_tree.setHeaderLabels([
|
||||||
|
"Name", "Type", "Durability", "Impact", "Cut", "Stab", "Burn", "Cold"
|
||||||
|
])
|
||||||
|
header = self.results_tree.header()
|
||||||
|
header.setSectionResizeMode(QHeaderView.ResizeMode.ResizeToContents)
|
||||||
|
header.setStretchLastSection(False)
|
||||||
|
self.results_tree.itemSelectionChanged.connect(self._on_selection_changed)
|
||||||
|
self.results_tree.itemDoubleClicked.connect(self._on_double_click)
|
||||||
|
layout.addWidget(self.results_tree)
|
||||||
|
|
||||||
|
buttons = QDialogButtonBox(
|
||||||
|
QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel
|
||||||
|
)
|
||||||
|
buttons.accepted.connect(self._on_accept)
|
||||||
|
buttons.rejected.connect(self.reject)
|
||||||
|
layout.addWidget(buttons)
|
||||||
|
|
||||||
|
def _load_data(self):
|
||||||
|
"""Load armors from API."""
|
||||||
|
try:
|
||||||
|
self.armors = self.api.get_all_armors()
|
||||||
|
self._populate_results(self.armors)
|
||||||
|
self.status_label.setText(f"Loaded {len(self.armors)} armors from Entropia Nexus")
|
||||||
|
except Exception as e:
|
||||||
|
self.status_label.setText(f"Error loading armors: {e}")
|
||||||
|
|
||||||
|
def _populate_results(self, armors):
|
||||||
|
"""Populate results tree."""
|
||||||
|
self.results_tree.clear()
|
||||||
|
for armor in armors:
|
||||||
|
item = QTreeWidgetItem()
|
||||||
|
item.setText(0, armor.name)
|
||||||
|
item.setText(1, armor.type or "Unknown")
|
||||||
|
item.setText(2, str(armor.durability))
|
||||||
|
item.setText(3, str(armor.protection_impact))
|
||||||
|
item.setText(4, str(armor.protection_cut))
|
||||||
|
item.setText(5, str(armor.protection_stab))
|
||||||
|
item.setText(6, str(armor.protection_burn))
|
||||||
|
item.setText(7, str(armor.protection_cold))
|
||||||
|
item.setData(0, Qt.ItemDataRole.UserRole, armor)
|
||||||
|
self.results_tree.addTopLevelItem(item)
|
||||||
|
|
||||||
|
def _on_search(self):
|
||||||
|
"""Handle search."""
|
||||||
|
query = self.search_input.text().lower()
|
||||||
|
if not query:
|
||||||
|
self._populate_results(self.armors)
|
||||||
|
return
|
||||||
|
|
||||||
|
filtered = [a for a in self.armors if query in a.name.lower()]
|
||||||
|
self._populate_results(filtered)
|
||||||
|
self.status_label.setText(f"Found {len(filtered)} armors matching '{query}'")
|
||||||
|
|
||||||
|
def _on_selection_changed(self):
|
||||||
|
"""Handle selection change."""
|
||||||
|
items = self.results_tree.selectedItems()
|
||||||
|
if items:
|
||||||
|
self.selected_armor = items[0].data(0, Qt.ItemDataRole.UserRole)
|
||||||
|
|
||||||
|
def _on_double_click(self, item, column):
|
||||||
|
"""Handle double click."""
|
||||||
|
self._on_accept()
|
||||||
|
|
||||||
|
def _on_accept(self):
|
||||||
|
"""Handle OK button."""
|
||||||
|
if self.selected_armor:
|
||||||
|
self.armor_selected.emit(self.selected_armor)
|
||||||
|
self.accept()
|
||||||
|
|
||||||
|
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
# Main Loadout Manager Dialog
|
# Main Loadout Manager Dialog
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue