What players get
| Action | Gamepad | Keyboard | Mouse | Touch |
|---|---|---|---|---|
| Open search | right stick button | Ctrl+F | click the entry | tap the entry |
| Type | the on-screen keyboard: A types, X deletes (held, it repeats), Y types a space, B ends typing | type | click keys | tap keys |
| To the results | B, or the keyboard’s Done | Escape, Enter or Down | click a result | tap a result |
| Go to a result’s row | A | Enter | click its name or caption | tap its name or caption |
- Results are the real rows, ranked: the name starts with the query, then a word of the name, another name, an option, the category or section, the description. Each result’s caption says where it lives and, when the name did not match, what did. Left and Right change a result’s value in place.
- Every word typed has to start a word of the row’s texts; capitals and accents do not matter. Languages written without spaces (Chinese, Japanese, Thai) match inside words.
- The query stays for the session, per player. Back leaves search for the category and row the player was on (the side rail goes back to the search entry, the couch hub to the hub). Menu closes the screen from any phase.
- Letter shortcuts (Q, E, F, R) do not fire while the field has the keyboard, and Ctrl+F never applies.
- The keyboard’s letters follow the interface language: QWERTY, AZERTY for French, QWERTZ for German, Czech, Slovak and Hungarian, the Russian and Greek layouts, and a grid of the text’s letters for other alphabets. Letters the text uses that a layout lacks get one more row. Chinese, Japanese and Korean get no keys: search opens on the sorted list of every row.
Offer search in your category screen
A screen derived from URollySaveCoreUICategoryScreen offers search once it describes its rows. Search Mode (class defaults, category Search) decides when: Auto shows the entry while the screen has two or more categories and 20 or more searchable rows; On and Off force it. Search Keys holds the keys that open it (a keyboard key needs Ctrl).
// The rows search can find, in the screen's order: only rows and categories that show.
void UMyCodexScreen::CollectSearchEntries(TArray<FRollySaveCoreUISearchEntry>& OutEntries) const
{
for (const FMyEntry& Data : Entries)
{
FRollySaveCoreUISearchEntry& Entry = OutEntries.AddDefaulted_GetRef();
Entry.CategoryIndex = Data.Category;
Entry.RowId = Data.Id; // the row's Get Row Id
Entry.Name = Data.Name; // as the player sees it
Entry.Description = Data.Description;
Entry.Section = Data.Section; // the heading it sits under, or empty
Entry.Keywords = Data.OtherNames; // "fps" for Frame Rate Limit
}
}
// The real row of an entry, made in this screen's widget tree (search adds it to the list).
URollySaveCoreUIRow* UMyCodexScreen::BuildSearchRow(const FRollySaveCoreUISearchEntry& Entry)
{
return MakeRowFor(Entry.RowId);
}CarrySearchRowStatepasses a result’s state to its row when the player goes to it (a key row’s picked column).- The texts search shows are generic (“12 results”); override
MakeSearchCount,MakeSearchAllCount,GetSearchEmptyMessage,MakeSearchNoMatch,GetSearchRuleandMakeSearchLimitto name your rows (“12 settings”). - Call
RebuildRowswhen rows show or hide: while search shows it refreshes the results instead. - A Blueprint layout of the whole screen gets search by binding the parts
SearchField(andSearchEntry,SearchCount,SearchMessage,SearchRule,SearchHint,Keyboardwhere it wants them).
Keyboard rows of your own
Project Settings > Plugins > Rolly Save Core UI > Keyboard Layouts maps a culture (“pt”, or “pt-BR” for one region) to letter rows, top to bottom, each written as its keys’ characters (“qwertyuiop”). The digits come first by themselves. A culture you list replaces the built-in rows.
The text field and keyboard in screens of your own
The palette’s Rolly Save Core category has Rolly Text Field and Rolly Keyboard. A field shows a placeholder (Field Name), the caret while it is active, the key that opens it while empty, and a clear button; Max Length adds a counter. A physical keyboard types into it with the platform’s input method; give a gamepad player the keyboard:
NameField->SetActive(true, /*bPhysicalKeyboard*/ false);
Keyboard->SetMode(ERollySaveCoreUIKeyboardMode::Name); // capitals after a space, LT is Shift
Keyboard->SetLayout(FRollySaveCoreUIKeyboardLayouts::Resolve(TEXT("en"), {}));
Keyboard->SetTarget(NameField);
Keyboard->FocusFirstKey();
Keyboard->OnDone().AddUObject(this, &UMyNameScreen::HandleNameDone);Limits
- A small area makes room for the keyboard: at short heights the field takes the navigation line while searching, and where the area hides the title the header’s actions sit at the end of the navigation line (a Side Rail gives them a line of their own above its search field, at any height); in a narrow area the header’s field is 280 units wide; in a short narrow area (960 x 540) one line names the first results and the footer hides while the keyboard shows; at tiny heights only the field and the keyboard show until typing ends.
- Steam’s own on-screen keyboard needs Steamworks: a game that wants it replaces the Rolly keyboard with its own call.