From 591898c838eff814b10bddafd6e0f32f26b75d4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20R=C3=A4tzel?= Date: Mon, 2 Sep 2024 19:34:10 +0000 Subject: [PATCH] Add parsing of the 'Locations' window proposed by Paul today As discussed at --- .../alternate-ui/source/src/Common/App.elm | 2 +- .../src/EveOnline/ParseUserInterface.elm | 65 +++++++++++++++++++ .../Frontend/InspectParsedUserInterface.elm | 34 ++++++++++ 3 files changed, 100 insertions(+), 1 deletion(-) diff --git a/implement/alternate-ui/source/src/Common/App.elm b/implement/alternate-ui/source/src/Common/App.elm index 4024935..75f7b1d 100644 --- a/implement/alternate-ui/source/src/Common/App.elm +++ b/implement/alternate-ui/source/src/Common/App.elm @@ -3,4 +3,4 @@ module Common.App exposing (versionId) versionId : String versionId = - "2024-05-28" + "2024-09-02" diff --git a/implement/alternate-ui/source/src/EveOnline/ParseUserInterface.elm b/implement/alternate-ui/source/src/EveOnline/ParseUserInterface.elm index 4028ab7..983bc10 100644 --- a/implement/alternate-ui/source/src/EveOnline/ParseUserInterface.elm +++ b/implement/alternate-ui/source/src/EveOnline/ParseUserInterface.elm @@ -46,6 +46,7 @@ type alias ParsedUserInterface = , repairShopWindow : Maybe RepairShopWindow , characterSheetWindow : Maybe CharacterSheetWindow , fleetWindow : Maybe FleetWindow + , locationsWindow : Maybe LocationsWindow , watchListPanel : Maybe WatchListPanel , standaloneBookmarkWindow : Maybe StandaloneBookmarkWindow , moduleButtonTooltip : Maybe ModuleButtonTooltip @@ -572,6 +573,18 @@ type alias CompressionWindow = } +type alias LocationsWindow = + { uiNode : UITreeNodeWithDisplayRegion + , placeEntries : List LocationsWindowPlaceEntry + } + + +type alias LocationsWindowPlaceEntry = + { uiNode : UITreeNodeWithDisplayRegion + , mainText : String + } + + type alias WindowControls = { uiNode : UITreeNodeWithDisplayRegion , minimizeButton : Maybe UITreeNodeWithDisplayRegion @@ -618,6 +631,7 @@ parseUserInterfaceFromUITree uiTree = , repairShopWindow = parseRepairShopWindowFromUITreeRoot uiTree , characterSheetWindow = parseCharacterSheetWindowFromUITreeRoot uiTree , fleetWindow = parseFleetWindowFromUITreeRoot uiTree + , locationsWindow = parseLocationsWindowFromUITreeRoot uiTree , watchListPanel = parseWatchListPanelFromUITreeRoot uiTree , standaloneBookmarkWindow = parseStandaloneBookmarkWindowFromUITreeRoot uiTree , neocom = parseNeocomFromUITreeRoot uiTree @@ -2991,6 +3005,57 @@ parseCompressionWindow windowUiNode = } +parseLocationsWindowFromUITreeRoot : UITreeNodeWithDisplayRegion -> Maybe LocationsWindow +parseLocationsWindowFromUITreeRoot uiTreeRoot = + {- + 2024-09-02 'Locations' window as shared by Paul with 'session-recording-2024-08-26T22-54-47.zip' + For discussion of the 'Locations' window, see + -} + uiTreeRoot + |> listDescendantsWithDisplayRegion + |> List.filter (.uiNode >> .pythonObjectTypeName >> (==) "LocationsWindow") + |> List.head + |> Maybe.map parseLocationsWindow + + +parseLocationsWindow : UITreeNodeWithDisplayRegion -> LocationsWindow +parseLocationsWindow windowNode = + let + placeEntries : List LocationsWindowPlaceEntry + placeEntries = + windowNode + |> listDescendantsWithDisplayRegion + |> List.filter (.uiNode >> .pythonObjectTypeName >> String.contains "PlaceEntry") + |> List.filterMap parseLocationsWindowPlaceEntry + in + { uiNode = windowNode + , placeEntries = placeEntries + } + + +parseLocationsWindowPlaceEntry : UITreeNodeWithDisplayRegion -> Maybe LocationsWindowPlaceEntry +parseLocationsWindowPlaceEntry entryNode = + {- + Screenshots show a grid layout of cells with text in each cell aligned in columns. + But at least in 'session-recording-2024-08-26T22-54-47.zip', the text appeared in a single node of type "EveLabelMedium" + As already seen in other windows, that text appears split into the cells texts by '' tags. + Following is a middle part of an observed text in a 'EveLabelMedium' node in a 'PlaceEntry' node: + ...Refinery0Y5C-YD... + -} + case + entryNode + |> getAllContainedDisplayTextsWithRegion + |> List.sortBy (Tuple.second >> .totalDisplayRegion >> areaFromDisplayRegion >> Maybe.withDefault 0) + |> List.map Tuple.first + |> List.head + of + Nothing -> + Nothing + + Just mainText -> + Just { uiNode = entryNode, mainText = mainText } + + parseWindowControlsFromWindow : UITreeNodeWithDisplayRegion -> Maybe WindowControls parseWindowControlsFromWindow = listDescendantsWithDisplayRegion diff --git a/implement/alternate-ui/source/src/Frontend/InspectParsedUserInterface.elm b/implement/alternate-ui/source/src/Frontend/InspectParsedUserInterface.elm index 34b08c6..f94384e 100644 --- a/implement/alternate-ui/source/src/Frontend/InspectParsedUserInterface.elm +++ b/implement/alternate-ui/source/src/Frontend/InspectParsedUserInterface.elm @@ -227,6 +227,12 @@ renderTreeNodeFromParsedUserInterface maybeInputRoute uiNodesWithDisplayRegion p , fieldValueSummary = always "..." , fieldValueChildren = treeNodeChildrenFromFleetWindow viewConfig } + , parsedUserInterface.locationsWindow + |> fieldFromMaybeInstance + { fieldName = "locationsWindow" + , fieldValueSummary = always "..." + , fieldValueChildren = treeNodeChildrenFromLocationsWindow viewConfig + } , parsedUserInterface.watchListPanel |> fieldFromMaybeInstance { fieldName = "watchListPanel" @@ -1448,6 +1454,34 @@ treeNodeChildrenFromFleetWindow viewConfig fleetWindow = ] +treeNodeChildrenFromLocationsWindow : + ViewConfig event + -> EveOnline.ParseUserInterface.LocationsWindow + -> List (TreeViewNode event ParsedUITreeViewPathNode) +treeNodeChildrenFromLocationsWindow viewConfig locationsWindow = + treeNodeChildrenFromRecordWithUINode + viewConfig + locationsWindow.uiNode + [ locationsWindow.placeEntries + |> fieldFromListInstance + { fieldName = "placeEntries" + , fieldValueChildren = treeNodeChildrenFromLocationsWindowPlaceEntry viewConfig + } + ] + + +treeNodeChildrenFromLocationsWindowPlaceEntry : + ViewConfig event + -> EveOnline.ParseUserInterface.LocationsWindowPlaceEntry + -> List (TreeViewNode event ParsedUITreeViewPathNode) +treeNodeChildrenFromLocationsWindowPlaceEntry viewConfig node = + treeNodeChildrenFromRecordWithUINode + viewConfig + node.uiNode + [ node.mainText |> fieldFromString "mainText" + ] + + treeNodeChildrenFromWatchListPanel : ViewConfig event -> EveOnline.ParseUserInterface.WatchListPanel