Skip to content

Multi-object group selection (iD-style)#17

Open
tordans wants to merge 1 commit into
masterfrom
feature/multi-object-group-selection
Open

Multi-object group selection (iD-style)#17
tordans wants to merge 1 commit into
masterfrom
feature/multi-object-group-selection

Conversation

@tordans
Copy link
Copy Markdown
Owner

@tordans tordans commented May 31, 2026

Problem

Als GoMap-Nutzer/in, möchte ich mehrere Kartenobjekte zu einer temporären Gruppe zusammenfassen und gemeinsam bearbeiten können, damit ich mehrere POIs oder Wege effizient verschieben und deren Attribute in einem Durchgang anpassen kann — ähnlich wie im iD-Editor.

Aktuelles Verhalten: Beim Anklicken eines Objekts erscheint ein Tooltipp (Pushpin) mit Verschiebe-Symbol; es ist immer nur ein Objekt ausgewählt. Attribute bearbeiten betrifft nur dieses eine Objekt. Es gibt keine Möglichkeit, mehrere Objekte zu gruppieren, gemeinsam zu verschieben oder Tags mit Konfliktbehandlung („mehrfache Werte") zu pflegen.

Gewünschtes Verhalten:

  1. Gruppe anlegen: Objekt anklicken → Tooltipp erscheint. Langer Druck auf den Tooltipp erzeugt eine Gruppe; die Gruppe bleibt als ausgewähltes Element sichtbar.
  2. Gruppenleiste: Sobald eine Gruppe existiert, erscheint oben am Bildschirm eine Leiste mit Icons der Gruppenmitglieder — in der Reihenfolge der Auswahl.
  3. Attribute: Bei Gruppe und „Attribute" werden alle Objekte bearbeitet. Felder mit unterschiedlichen Werten zeigen „Mehrfache Werte"; Tipp darauf öffnet eine Liste der Werte je Objekt (iD-Stil).
  4. Mitglied hinzufügen: +-Button in der Gruppenleiste → gedrückter Zustand bis ein Kartenobjekt angetippt wird → Objekt wird der Gruppe hinzugefügt, + deaktiviert sich wieder.
  5. Batch-Hinzufügen: Langer Druck auf + → haptisches Feedback → fortlaufend Objekte auf der Karte antippen; alle werden nacheinander der Gruppe hinzugefügt.
  6. Gruppe verschieben: Solange die Gruppe aktiv ist, bleiben alle Mitglieder selektiert. Der Tooltipp zeigt „Gruppe" (statt Name) mit Verschiebe-Symbol; Verschieben bewegt alle Mitglieder gemeinsam.

Implementation notes (by Cursor)

Branch: feature/multi-object-group-selection
Plan doc: docs/plans/multi-object-group-selection.md

This PR adds the feature plan; implementation follows in subsequent commits on this branch.

Architecture

  • Extend selection from single selectedNode/Way/Relation to an ordered SelectionGroup: [OsmBaseObject] on EditorMapLayer / MapView. Keep selectedPrimary as anchor (first member / pushpin target).
  • Group creation: long-press on pushpin callout while one object is selected.
  • Group bar: new GroupSelectionBar at top of map — member chips (preset/geometry icons) in selection order, + for add modes.
  • Add modes: tap + → pressed state → next map tap appends member and resets +; long-press + → haptic + batch-add mode (each tap adds until + toggled off).

Map & pushpin

  • Highlight all group members in editor render pass.
  • Pushpin text: single → friendlyDescription(); group → localized “Group” + existing move handle.
  • Extend dragMove / dragFinish to translate all member geometries together (with undo grouping).

Attributes (POI)

  • POITabBarController takes multiple selections; merge tag dict per key.
  • Equal values → show value; differing → “Multiple values” placeholder; tap → sheet listing (object → value) (iD-style).
  • commitChanges() applies changes to every group member.
  • Gate edit-toolbar actions that are undefined for multi-select (split, join, turn restrictions, …).

Suggested phases

  1. Selection group model + member highlighting + read-only group bar
  2. Long-press pushpin → group; group pushpin label & group move
  3. Add / batch-add modes on group bar +
  4. Multi-tag merge UI + batch commit
  5. Toolbar gating, edge cases, xliff strings

Key files

  • EditorMapLayer.swift, EditorMapLayer+Edit.swift, MapView.swift, PushPinView.swift, MainViewController.swift
  • POITabBarController.swift, POICommonTagsViewController.swift, POIAllTagsViewController.swift
  • New: GroupSelectionBar.swift, multi-value tag presenter

Testing notes (by @tordans)

Gruppe anlegen & Leiste

  • Ein Objekt auswählen → Pushpin mit Name und Verschiebe-Symbol erscheint.
  • Langer Druck auf Pushpin → Gruppe wird erstellt; alle bisherigen Mitglieder bleiben hervorgehoben.
  • Gruppenleiste oben erscheint mit Icons in Auswahlreihenfolge.
  • Gruppe aufheben (Tap ins Leere / explizites Deselektieren) → Leiste verschwindet, Einzelauswahl wie bisher.

Mitglieder hinzufügen

  • + tippen → Button im gedrückten Zustand; Kartenobjekt antippen → wird Gruppe hinzugefügt, + wieder normal.
  • + lange drücken → Vibration/Haptik; mehrere Objekte nacheinander antippen → alle werden hinzugefügt; Modus beenden (erneut + oder Abbruch).
  • Bereits gruppiertes Objekt erneut hinzufügen → kein Duplikat.
  • Add-Modus abbrechen ohne Tap auf Karte → Gruppe unverändert.

Verschieben

  • Pushpin zeigt „Gruppe" (nicht Einzelname); Verschieben bewegt alle Mitglieder synchron.
  • Undo nach Gruppenverschieben stellt alle Positionen wieder her.
  • Einzelobjekt außerhalb Gruppe: bisheriges Verschiebeverhalten unverändert.

Attribute (Mehrfachbearbeitung)

  • Gruppe mit gleichen Tags → Felder zeigen gemeinsamen Wert; Änderung gilt für alle.
  • Gruppe mit unterschiedlichen Werten für dieselbe Key → „Mehrfache Werte"; Tipp → Liste je Objekt.
  • Neuen gemeinsamen Wert setzen → alle Objekte aktualisiert nach Done/Speichern.
  • Key entfernen / leer setzen → bei allen Mitgliedern entfernt.
  • Nur ein Objekt in Gruppe → Verhalten wie bisherige Einzelbearbeitung.

Regression

  • Long-Press auf Karte bei überlappenden Objekten → bisheriges Auswahl-Sheet (wenn nicht im Add-Modus).
  • Haupt-+ (Geometrie anlegen) und Gruppen-+ kollidieren nicht.
  • Bearbeiten-Werkzeugleiste: nicht unterstützte Aktionen bei Gruppe ausgeblendet/deaktiviert.
  • iPad / Mac Catalyst: Gruppenleiste und Sheets layouten korrekt.

Made with Cursor


Note

Low Risk
Documentation-only change with no production code or behavior impact.

Overview
This PR only adds docs/plans/multi-object-group-selection.md — a design/planning write-up for iD-style multi-select editing. No application code ships here (SelectionGroup, GroupSelectionBar, etc. are not in the tree yet).

The doc spells out how selection would move from single-object to an ordered group on EditorMapLayer / MapView, a top group bar with add/batch-add modes, group pushpin/move, merged tag editing with “Multiple values” conflict UI, and phased rollout across editor/POI files. It also lists open questions (group size, persistence, relations).

Reviewed by Cursor Bugbot for commit 978eea8. Bugbot is set up for automated code reviews on this repo. Configure here.

Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant