feat(D.2b): ChatWindowController — bind chat LayoutDesc, place widgets, route chat
Implements Task G2: binds the imported chat LayoutDesc (0x21000006) to live behavior, the acdream analogue of retail ChatInterface + gmMainChatUI::PostInit. - UiDatElement: add OnClick hook + OnEvent override so Send/max-min buttons can be wired by a controller without needing a dedicated widget type. - ChatWindowController.Bind: reads transcript (0x10000011) and input (0x10000016) rects from the raw ElementInfo tree (factory skips them as Type-12/no-media), places UiChatView under the transcript panel and UiChatInput under the input bar; replaces the imported scrollbar track (0x10000012) with UiChatScrollbar driving UiChatView.Scroll; replaces the channel menu placeholder (0x10000014) with UiChannelMenu; wires Send button and max/min toggle via the new OnClick hook. ChatCommandRouter.Submit routes all input through the existing pipeline. - 6 smoke tests: Bind returns non-null, Transcript is child of panel, Input is child of bar, Input.OnSubmit publishes SendChatCmd, channel change updates submit channel, returns null when panels missing. Build: 0 errors. Test suite: 392 passed / 1 skipped / 0 failed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
6e6339b026
commit
9d9e036e4c
3 changed files with 524 additions and 0 deletions
|
|
@ -76,6 +76,17 @@ public sealed class UiDatElement : UiElement
|
|||
: _info.StateMedia.TryGetValue("", out var d) ? d
|
||||
: (0u, 0);
|
||||
|
||||
/// <summary>Optional click handler. Set by a controller for interactive dat
|
||||
/// elements (e.g. the chat Send / max-min buttons). Requires
|
||||
/// <see cref="UiElement.ClickThrough"/> = false to receive click events.</summary>
|
||||
public Action? OnClick { get; set; }
|
||||
|
||||
public override bool OnEvent(in UiEvent e)
|
||||
{
|
||||
if (e.Type == UiEventType.Click && OnClick is not null) { OnClick(); return true; }
|
||||
return false;
|
||||
}
|
||||
|
||||
protected override void OnDraw(UiRenderContext ctx)
|
||||
{
|
||||
var (file, _) = ActiveMedia();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue