mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-11-03 00:26:22 +01:00
feat(editor): a track deleted cuts the design kept for its line down to the tracks left along it, in the same step of the undo history: a design keeps the stretch of its line it stands for (//$h kept <from> <to>), a track deleted in the middle parts it in two, one at an end shortens it, a design with no track left is forgotten. The geometry stays as designed, only its reach changes. A design cut down isn't taken whole by the route plan nor merged with a new one nor carried along by a switch slid, and gives no designed curve to the tracks left of a curve it cut, which are recognized as they lie: a track laid by hand into the gap is never pulled back to the old shape. The status tells of it. The //$h click lines are the editor's own now: read back with their design, and written once on save instead of staying behind and piling up. Selftests on a copy of wgr.scn: a track of a compound curve deleted in the middle, undone and redone, one at an end, all of a piece, saved and read back
This commit is contained in:
@@ -1596,6 +1596,14 @@ void editor_mode::render_path_ui()
|
||||
|
||||
|
||||
|
||||
// the designs kept for the lines the tracks deleted lay along cut down to the tracks left, in the same step of the undo history: what
|
||||
// the status tells of it
|
||||
std::string editor_mode::designs_trimmed(std::vector<TTrack *> const &Removed)
|
||||
{
|
||||
auto const cut{alignment_store::trim(Removed)};
|
||||
return cut > 0 ? std::string{STR_P("The design kept for the line is cut down to the tracks left along it", "The designs kept for the lines are cut down to the tracks left along them", static_cast<long long>(cut))} : std::string{};
|
||||
}
|
||||
|
||||
void editor_mode::delete_selected_track()
|
||||
{
|
||||
auto *track{selected_track()};
|
||||
@@ -1630,6 +1638,8 @@ void editor_mode::delete_selected_track()
|
||||
created.push_back(straight);
|
||||
ui()->set_status(STR_C("The double switch is replaced by its main track, Shift+Del removes all of it"), false);
|
||||
}
|
||||
if (auto const note{designs_trimmed({set->first, set->link, set->second})}; false == note.empty())
|
||||
ui()->set_status(note, false);
|
||||
push_track_snapshot({}, created, {set->first, set->link, set->second});
|
||||
if (std::any_of(m_route.chain.tracks.begin(), m_route.chain.tracks.end(), [&](TTrack const *Each) { return Each == set->first || Each == set->link || Each == set->second; }))
|
||||
m_route = {};
|
||||
@@ -1653,6 +1663,8 @@ void editor_mode::delete_selected_track()
|
||||
created.push_back(main);
|
||||
ui()->set_status(STR_C("The switch is replaced by its main track, Shift+Del removes all of it"), false);
|
||||
}
|
||||
if (auto const note{designs_trimmed({track})}; false == note.empty())
|
||||
ui()->set_status(note, false);
|
||||
push_track_snapshot({}, created, {track});
|
||||
// the model and the events of a turntable can't stay without its track
|
||||
if (track->eType == tt_Table)
|
||||
|
||||
Reference in New Issue
Block a user