DreamGUI
Reference

UDreamTileView

A tile view whose hierarchy is code, not an asset: a list whose rows are laid out across as well

Inherits from UDreamListViewBase.

Declared in Public/Controls/DreamTileView.h.

A tile view whose hierarchy is code, not an asset: a list whose rows are laid out across as well as down.

UMG's TileView derives from its ListView and adds an entry WIDTH; this is the same relationship, for the same reason. Everything that makes a list -- the viewport, the bar, the scrolled column, the row template, the pool, the selection, the recycling threshold -- is UDreamListViewBase's and is not restated here. What a tile view adds is one question answered differently: how many rows sit side by side.

THE COLUMN COUNT IS MEASURED, NOT AUTHORED

UMG's tile view fits as many entries across as the width allows and re-flows when it changes, and so does this one: ResolveColumnCount divides the viewport by the tile pitch. An authored count would be a second number that has to agree with the width, and the first resize would end that agreement -- the same equation-in-two-places the row placement was rewritten to remove.

A floor of one, always: a viewport narrower than a tile shows one tile per line and clips it, which is visible and recoverable, where zero columns is a division by zero and a blank control.

WHAT A TILE'S SIZE IS

Its height is FDreamListStyle::RowHeight -- the SAME field a list's row height comes from, because it is the same measurement -- and its width is FDreamTileViewStyle::TileWidth. There is no aspect lock and no "square" flag: two numbers already say every shape those flags could, and a lock would make one of the two unreadable in the panel.

See UDreamListViewBase for the rest, and UDreamListView for the flat case.

Properties

NameTypeCategoryIn the details panelFrom BlueprintDescription
StyleFDreamTileViewStyleTile ViewyesGetStyle / SetStyleThis instance's own look. The project sheet wins while StyleSource says so AND a sheet actually exists; with no sheet in the project this IS the look in effect.
TileAlignmentEDreamTileAlignmentTile ViewyesGetTileAlignment / SetTileAlignmentHow a line's tiles are distributed across the width -- UMG's TileAlignment.
bWrapHorizontalNavigationboolTile ViewyesGetWrapHorizontalNavigation / SetWrapHorizontalNavigationWhether stepping off the end of a line lands on the next one -- UMG's bWrapHorizontalNavigation.

Functions

FunctionKindDescription
int32 GetColumnCount()pureHow many tiles fit across the viewport right now: the measured answer the layout is using.
float GetEntryHeight()pureA tile's height -- UMG's EntryHeight, which is FDreamListStyle::RowHeight here because it is the same measurement a list's row height is. One tile, one size, and the style holds it.
float GetEntryWidth()pureA tile's width -- UMG's EntryWidth, which is FDreamTileViewStyle::TileWidth.
int32 GetNavigationTarget(int32 InDisplayIndex, EDreamUINavigationDirection InDirection)pureThe display index one step in a direction from InDisplayIndex, or INDEX_NONE for "off the grid".
int32 GetRowLineCount()pureHow many LINES of tiles the source makes at the current column count.
FDreamTileViewStyle GetStyle()pureBy value, not by reference: a UFUNCTION return has to be a value, and a style is a small struct.
EDreamTileAlignment GetTileAlignment()pureGet Tile Alignment
bool GetWrapHorizontalNavigation()pureGet Wrap Horizontal Navigation
void SetEntryHeight(float InHeight)callableSet Entry Height
void SetEntryWidth(float InWidth)callableChanges how many tiles fit across, so it re-flows rather than repaints.
void SetStyle(FDreamTileViewStyle InStyle)callableReplace the whole look and re-push it. A tile's size is style, so this rebuilds the tiles.
void SetTileAlignment(EDreamTileAlignment InAlignment)callableChanges where every tile sits without changing how many fit, so it re-places rather than re-flows.
void SetWrapHorizontalNavigation(bool bInWrap)callableSet Wrap Horizontal Navigation

Compared with UMG

Every Blueprint-facing member of the UMG class, and where it went. adopt: same name, same meaning. map: here under another name or on another type. reject: deliberately absent, with the reason.

UMGMemberStatusHereNote
UTileViewSetEntryHeightadoptSetEntryHeightWrites FDreamListStyle::RowHeight and switches StyleSource to Inline, so the next style push does not throw the number away.
UTileViewSetEntryWidthadoptSetEntryWidthWrites FDreamTileViewStyle::TileWidth. A different width is a different column count, so it re-flows rather than repaints.
UTileViewGetEntryHeightadoptGetEntryHeightOff the RESOLVED style, so a tile view wearing the project sheet answers with the size it is actually drawn at.
UTileViewGetEntryWidthadoptGetEntryWidthOff the resolved style, as GetEntryHeight is.
UTileViewEntryHeightmapFDreamListStyle::RowHeightThe SAME field a list's row height comes from, because it is the same measurement. One tile, one size, and the style holds it -- a second field on the control would be the same number written twice.
UTileViewEntryWidthmapFDreamTileViewStyle::TileWidthThe one thing a tile adds to a row. No aspect lock and no square flag: two numbers already say every shape those would, and a lock makes one of the two unreadable in the panel.
UTileViewTileAlignmentadoptTileAlignmentEDreamTileAlignment, UMG's seven answers. LeftAligned by default, not UMG's EvenlyDistributed: it is what every tile view here has drawn, and a grid that re-spaced itself on upgrade would be a layout change nobody asked for. All seven are one function, ResolveLineLayout, which returns the line's start, its tile size and its pitch TOGETHER -- they are three views of the same leftover space, and answering them separately is how two modes end up disagreeing about it. EvenlySize sizes by the COLUMN count so every line matches; Fill sizes by THIS line's count so a short last line stretches. That is the only difference between them.
UTileViewbWrapHorizontalNavigationadoptbWrapHorizontalNavigationAnswered by INDEX in UDreamTileView::GetNavigationTarget, not by geometry: off the end of a line is the first tile of the next, and the tile it lands on is at the OPPOSITE edge of the control -- exactly the step a nearest-rect navigator cannot make. GetNavigationTarget is what a navigation press on a tile steps by, so the switch reaches the player. Off by default, as UMG's is: a press off the end of a line then leaves the tile view.
UTileViewScrollbarDisabledVisibilitymapScrollBarVisibilityAutoHide already means 'gone while everything fits', which is the state UMG's disabled visibility describes. A second enum for the disabled case would be a second answer.
UTileViewbEntrySizeIncludesEntrySpacingrejectA switch over whether the authored size is the tile or the tile plus its gap. Here they are two fields that are never added into one: TileWidth is the tile and TileSpacing is the gap beside it, so there is no ambiguity for a flag to resolve.

On this page