Wichtig
Detail
Detail
Detail
#26663
TreeGridComponent: Selektion wird nach Verwerfen einer transienten Zeile nicht zurück gesetzt
Problem
Eine neue Zeile wird als transientes Objekt automatisch selektiert. Wird die Objektanlage abgebrochen, wird die neue Zeile verworfen. Das Problem ist, das hierbei zuerst die Zeile verworfen und erst danach die zugehörige Selektion gesucht und zurück gesetzt wird (GridComponent#dropRow()). Die wird aber zu diesem Zeitpunkt nicht gefunden, weshalb zwar die Zeile entfernt, die Selektion aber erhalten bleibt.
Wenn in diesem Zustand nun in den Bearbeitungsmodus gewechselt und dieser wieder verlassen wird, wird über GridComponent#handleComponenteModeChange() die Funktion dropRow(...) mit null aufgerufen, weil für die noch bestehende Selektion keine Zeile mehr gefunden wird. Das führt zu einer NullPointerException.
Wird hingegen noch einmal versucht ein neues Objekt anzulegen, wird das alte "neue Objekt" als Kontext-Objekt benutzt, was ebenso fehlschlägt.
Lösung
In der Methode dropRow(...) zuerst die betroffenen Zeilen ermitteln, merken und danach entfernen. Dann kann für die betroffenen Zeilen die Selektion zurück gesetzt werden.
Test
- TestDropGridRow.script.xml oder
- Manuell:
- In leerer Baum- tl:GridComponent neues Objekt als neue Zeile anlegen.
- Erwartung: Die neue Zeile wird angezeigt und ist selektiert.
- Nicht speichern, sondern direkt abbrechen.
- Die neue Zeile verschwindet. Es ist keine sichtbare Selektion vorhanden.
- In den Bearbeitungsmodus wechseln.
- Es ist weiterhin keine sichtbare Selektion vorhanden.
- Bearbeitungsmodus verlassen / abbrechen.
- Erwartung: Es kommt zu keiner NullPointerException.
- In leerer Baum- tl:GridComponent neues Objekt als neue Zeile anlegen.