|
1 | 1 | @page "/" |
2 | 2 | @using SpawnDev.BlazorJS |
3 | 3 | @using SpawnDev.BlazorJS.JSObjects |
| 4 | +@using SpawnDev.BlazorJS.Toolbox |
| 5 | +@using SpawnDev.MatrixLEDDisplay.Demo.Services |
4 | 6 | @implements IAsyncDisposable |
5 | 7 |
|
6 | 8 | <div> |
|
9 | 11 | <RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" Gap="0"> |
10 | 12 | <div style="width: 100%;"> |
11 | 13 | <RadzenMenu> |
12 | | - <RadzenMenuItem title="Connect MI Matrix Display" Text="MI Matrix Display" Icon="add" Click="@(() => ConnectClick())" /> |
| 14 | + <RadzenMenuItem title="Add image(s) to media library" Text="Image" Icon="add" Click="@(() => AddImages())" /> |
| 15 | + <RadzenMenuItem title="Connect MI Matrix Display" Text="Display" Icon="add" Click="@(() => ConnectClick())" /> |
13 | 16 | </RadzenMenu> |
14 | 17 | </div> |
15 | 18 | </RadzenStack> |
16 | 19 | </div> |
17 | 20 | <div> |
18 | | - <RadzenTabs RenderMode="TabRenderMode.Client" > |
| 21 | + <RadzenTabs RenderMode="TabRenderMode.Client"> |
19 | 22 | <Tabs> |
20 | | - @* <RadzenTabsItem Text="Test"> |
21 | | - <div> |
22 | | - <select @onchange=SelectDisplay_OnChange style="min-width: 23rem;"> |
23 | | - <option selected="@(_selectedDisplayDeviceIdHex == "")" value="">None</option> |
24 | | - @foreach (var display in DisplayService.Displays) |
25 | | - { |
26 | | - <option selected="@(_selectedDisplayDeviceIdHex == display.DeviceHexId)" value="@display.DeviceHexId">@display.DeviceHexId</option> |
27 | | - } |
28 | | - </select> |
29 | | - <button disabled="@(SelectedDisplay == null)" @onclick=Send>Send</button> |
30 | | - </div> |
31 | | - <div> |
32 | | - <textarea @bind=_textArea cols="50" rows="10"></textarea> |
33 | | - </div> |
34 | | - <div> |
35 | | - Status: @_testStatus |
36 | | - </div> |
37 | | - </RadzenTabsItem> *@ |
38 | | - @foreach (var display in DisplayService.Displays) |
| 23 | + <RadzenTabsItem Text="Media Library"> |
| 24 | + <MediaLibraryViewer /> |
| 25 | + </RadzenTabsItem> |
| 26 | + @foreach (var display in DisplayService.Displays.Values) |
39 | 27 | { |
40 | | - <RadzenTabsItem Text="@display.DeviceHexId"> |
| 28 | + var metadata = DisplayService.GetMetaData(display); |
| 29 | + <RadzenTabsItem Text="@metadata!.Name"> |
41 | 30 | <MatrixDisplayControl Display="@display" /> |
42 | 31 | </RadzenTabsItem> |
43 | 32 | } |
|
48 | 37 |
|
49 | 38 | @code |
50 | 39 | { |
| 40 | + |
| 41 | + [Inject] |
| 42 | + MediaLibraryManager MediaLibraryManager { get; set; } = default!; |
| 43 | + |
| 44 | + [Inject] |
| 45 | + NotificationService NotificationService { get; set; } = default!; |
| 46 | + |
51 | 47 | [Inject] |
52 | 48 | BlazorJSRuntime JS { get; set; } = default!; |
53 | 49 |
|
|
67 | 63 | void SelectDisplay_OnChange(ChangeEventArgs args) |
68 | 64 | { |
69 | 65 | var deviceIdHex = args.Value as string; |
70 | | - var selectedDisplay = DisplayService.Displays.FirstOrDefault(o => o.DeviceHexId == deviceIdHex); |
| 66 | + var selectedDisplay = DisplayService.Displays.Values.FirstOrDefault(o => o.DeviceHexId == deviceIdHex); |
71 | 67 | SelectedDisplay = selectedDisplay; |
72 | 68 | JS.Log("SelectedDisplay", SelectedDisplay?.DeviceHexId); |
73 | 69 | StateHasChanged(); |
|
112 | 108 | } |
113 | 109 | async Task LoadPenguinImage(MIMatrixDisplay display, bool save) |
114 | 110 | { |
115 | | - await display.LoadImageFromURL("pixelart/penguin_16.png", save); |
| 111 | + await display.SendImage("pixelart/penguin_16.png", save); |
116 | 112 | } |
117 | 113 | protected override void OnAfterRender(bool firstRender) |
118 | 114 | { |
|
140 | 136 | display.BackgroundColor.HexColor = newColor!; |
141 | 137 | } |
142 | 138 | bool _connecting = false; |
| 139 | + |
| 140 | + async Task AddImages() |
| 141 | + { |
| 142 | + await MediaLibraryManager.ShowImageSelectDialog(); |
| 143 | + } |
143 | 144 | async Task ConnectClick() |
144 | 145 | { |
145 | 146 | if (_connecting || !isWebBluetoothEnabled) return; |
146 | 147 | _connecting = true; |
147 | 148 | bleState = "Connecting..."; |
148 | 149 | StateHasChanged(); |
| 150 | + MIMatrixDisplay? display = null; |
149 | 151 | try |
150 | 152 | { |
151 | | - await DisplayService.ConnectDisplay(); |
| 153 | + display = await DisplayService.ConnectDisplay(); |
152 | 154 | } |
153 | 155 | finally |
154 | 156 | { |
| 157 | + if (display == null) |
| 158 | + { |
| 159 | + NotificationService.Notify(NotificationSeverity.Warning, "Connect was cancelled or failed"); |
| 160 | + } |
| 161 | + else |
| 162 | + { |
| 163 | + NotificationService.Notify(NotificationSeverity.Success, "Display connected"); |
| 164 | + } |
155 | 165 | _connecting = false; |
156 | 166 | bleState = "Ready"; |
157 | 167 | StateHasChanged(); |
|
0 commit comments