Console: Seats spinner replaces Add/Remove pilot in relay mode

Rows are capacity + per-seat defaults now -- joiners auto-populate them
live and launch trims to whoever is seated, so hand-managing rows is
busywork.  A Seats spinner (1-8) maintains the row count in relay mode;
Add pilot / Remove selected remain for mesh mode, where explicit
addresses matter.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-22 15:59:56 -05:00
co-authored by Claude Opus 4.8
parent 3ef179d1a6
commit 2cccf877f5
+36 -3
View File
@@ -283,11 +283,22 @@ class Operator(QMainWindow):
self.table.verticalHeader().setVisible(True)
rl.addWidget(self.table, 1)
btns = QHBoxLayout()
add = QPushButton("Add pilot"); add.clicked.connect(self._add_pilot)
rem = QPushButton("Remove selected"); rem.clicked.connect(self._remove_pilot)
# RELAY mode (2026-07-22): rows are just CAPACITY + per-seat defaults
# -- joiners auto-populate them live and launch trims to whoever is
# seated, so hand add/remove is busywork. A Seats spinner maintains
# the row count; Add/Remove stay for MESH mode (explicit addresses).
self.seats_label = QLabel("Seats:")
self.seats_spin = QSpinBox()
self.seats_spin.setRange(1, 8)
self.seats_spin.valueChanged.connect(self._set_seat_count)
self.add_btn = QPushButton("Add pilot")
self.add_btn.clicked.connect(self._add_pilot)
self.rem_btn = QPushButton("Remove selected")
self.rem_btn.clicked.connect(self._remove_pilot)
self.export_btn = QPushButton("Export player scripts…")
self.export_btn.clicked.connect(self._export_scripts)
btns.addWidget(add); btns.addWidget(rem)
btns.addWidget(self.seats_label); btns.addWidget(self.seats_spin)
btns.addWidget(self.add_btn); btns.addWidget(self.rem_btn)
btns.addStretch(1); btns.addWidget(self.export_btn)
rl.addLayout(btns)
upper_l.addWidget(roster_box, 1)
@@ -462,8 +473,29 @@ class Operator(QMainWindow):
for r, tag in enumerate(tags):
self.table.item(r, 0).setText(tag)
def _set_seat_count(self, n):
if self.mode.currentIndex() != 0:
return
while self.table.rowCount() < n:
self._add_pilot()
while self.table.rowCount() > n:
self.table.removeRow(self.table.rowCount() - 1)
self._renumber_relay_tags()
def _apply_roster_controls_mode(self):
relay = self.mode.currentIndex() == 0
self.seats_label.setVisible(relay)
self.seats_spin.setVisible(relay)
self.add_btn.setVisible(not relay)
self.rem_btn.setVisible(not relay)
if relay:
self.seats_spin.blockSignals(True)
self.seats_spin.setValue(self.table.rowCount())
self.seats_spin.blockSignals(False)
def _mode_changed(self, _index):
relay = self.mode.currentIndex() == 0
self._apply_roster_controls_mode()
for r in range(self.table.rowCount()):
item = self.table.item(r, 0)
flags = item.flags()
@@ -493,6 +525,7 @@ class Operator(QMainWindow):
for i, p in enumerate(self.egg.pilots()):
self._add_pilot_row(p, local=(relay and i == 0))
self._renumber_relay_tags()
self._apply_roster_controls_mode() # Seats spinner mirrors rows
self.egg_label.setText(os.path.basename(self.egg_path))
def _collect_egg(self):