Extract set-signal-type into core; add it to the wx GUI.

Fourth editing op into the wx frontend. Extract the type-name parse + apply
into core/app/edit.hpp::set_signal_type(Signal*, name) -> {ok, error, type},
failing without mutation on an unrecognised name. The interactive sigtype modal
keeps its own SignalType-cycling path (different interaction, trivial mutation).

The TUI `set-signal-type` command now renders that result (output unchanged).
The wx GUI gains Edit ▸ Set signal type…: a shared PickModule() helper (PickPart
now builds on it) + inline signal choice + a power/gnd/other dropdown, then the
core op, logged as "module/signal: signal type = …" and reflected.

tests/test_edit.cpp: name parsed and applied; unknown name refused without
mutation. 387 core assertions green; tui + wx build clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-03 21:27:44 +02:00
parent fc3ef333fa
commit 19dbec9672
6 changed files with 112 additions and 20 deletions

View File

@@ -25,14 +25,16 @@ private:
void OnSetConnectorType(wxCommandEvent &);
void OnAttachBsdl(wxCommandEvent &);
void OnConnect(wxCommandEvent &);
void OnSetSignalType(wxCommandEvent &);
void OnVerify(wxCommandEvent &);
void OnQuit(wxCommandEvent &);
void OnAbout(wxCommandEvent &);
// Prompt the user to pick a module then a part from the current System.
// `caption` titles the dialogs (e.g. to distinguish two picks). Returns
// nullptr if there is nothing to pick or the user cancels.
class Part *PickPart(const wxString &caption = "Select part");
// Modal pickers over the current System. `caption` titles the dialogs (e.g.
// to distinguish two picks). Each returns nullptr if there is nothing to
// pick or the user cancels.
class Module *PickModule(const wxString &caption);
class Part *PickPart(const wxString &caption = "Select part");
void RebuildModelView(); ///< refresh tree + overview from the System
void Log(const wxString &line); ///< append a line to the log pane