Move SSD internal review view property updates to typed Kotlin

ober

b5a271c04e193b736d1e8368c65d3ee35814e966

diff --git a/templates/ssd-review.ss b/templates/ssd-review.ss
index 3d5e7a6..aa27f2f 100644
--- a/templates/ssd-review.ss
+++ b/templates/ssd-review.ss
@@ -4642,7 +4642,8 @@
                 viewportStatePresent viewportStateOrEmpty
                 hasReplacementLabel missingReplacementLabel hasResolvedLabel
                 reviewViewSelectGroupId reviewViewSetSelectMode
-                reviewViewSetSsdAreaFromSession reviewViewShowSession
+                reviewViewSetSsdAreaFromSession
+                reviewViewSetSsdAreaFromNullableSession reviewViewShowSession
                 reviewViewClearSessionState reviewViewShowBitmap
                 ssdBrowserResumeReady focusChangeShouldShowDropdown
                 dialogReadyToShowDropdown focusedDialogReadyToShowDropdown
@@ -5246,6 +5247,12 @@
         (def (reviewViewSetSsdAreaFromSession (view : SsdReviewView)
                                               (session : SsdSession)) : Unit
           (reviewViewSsdAreaSet view (SsdSession-ssdArea session)))
+        (def (reviewViewSetSsdAreaFromNullableSession
+               (view : SsdReviewView)
+               (session : (Nullable SsdSession))) : Unit
+          (if (nullable-null? session)
+            (reviewViewSsdAreaSet view (nullable-none FloatArray))
+            (reviewViewSetSsdAreaFromSession view (nullable-get session))))
         (def (reviewViewShowSession (view : SsdReviewView)
                                     (session : SsdSession)) : Unit
           (begin
@@ -8566,7 +8573,7 @@
 	       "    var session: SsdSession? = null"
 	       "        set(value) {"
 	       "            field = value"
-	       "            ssdArea = ssdSessionAreaOrNone(value)"
+	       "            reviewViewSetSsdAreaFromNullableSession(this, value)"
 	       "            invalidate()"
 	       "        }"
 	       "    var selectMode: Boolean = false"
@@ -8691,7 +8698,7 @@
        "                    val tappedGroup = hitGroupIdForSession(session, point[0], point[1], hitGroupPad(scale))"
        "                    if (nullableTextPresent(tappedGroup)) {"
        "                        val tappedGroupId = nullableTextOrEmpty(tappedGroup)"
-       "                        selectedGroupId = tappedGroupId"
+       "                        reviewViewSelectGroupId(this, tappedGroupId)"
        "                        onGroupTapped(tappedGroupId)"
        "                    }"
 	       "                    performClick()"
@@ -8754,7 +8761,7 @@
 	       "    }"
        ""
        "    fun clearInteractionState() {"
-	       "        selectMode = false"
+	       "        reviewViewSetSelectMode(this, false, snapSelectionToCells)"
 	       "        dragStart = null"
 	       "        dragEnd = null"
 	       "        pointerActive = false"