added pinevents

This commit is contained in:
beo3000 2025-11-08 20:44:27 +01:00
parent 3418a95f05
commit 495bd39050
9 changed files with 223 additions and 59 deletions

View File

@ -1,4 +1,9 @@
<MudGrid>
@using KoogleApp.Model.EventMessages
@using KoogleApp.Services
@inject IMyEventAggregator EventAggregator
<MudGrid>
<MudItem xs="4">
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
@ -27,7 +32,7 @@
{
<MudItem xs="4">
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
<MudButton OnClick="OneClick">
<MudButton OnClick="@(async _ => await OneClick(1))">
<MudIcon Class="ma-2" Icon="@Icons.Material.Filled.Filter1" Color="Color.Primary"
Style="font-size: 3rem;"/>
</MudButton>
@ -35,7 +40,7 @@
</MudItem>
<MudItem xs="4">
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
<MudButton OnClick="OneClick">
<MudButton OnClick="@(async _ => await OneClick(2))">
<MudIcon Class="ma-2" Icon="@Icons.Material.Filled.Filter2" Color="Color.Primary"
Style="font-size: 3rem;"/>
</MudButton>
@ -43,7 +48,7 @@
</MudItem>
<MudItem xs="4">
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
<MudButton OnClick="OneClick">
<MudButton OnClick="@(async _ => await OneClick(3))">
<MudIcon Class="ma-2" Icon="@Icons.Material.Filled.Filter3" Color="Color.Primary"
Style="font-size: 3rem;"/>
</MudButton>
@ -54,7 +59,7 @@
<MudItem xs="4">
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
<MudButton OnClick="OneClick">
<MudButton OnClick="@(async _ => await OneClick(4))">
<MudIcon Class="ma-2" Icon="@Icons.Material.Filled.Filter4" Color="Color.Primary"
Style="font-size: 3rem;"/>
</MudButton>
@ -62,7 +67,7 @@
</MudItem>
<MudItem xs="4">
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
<MudButton OnClick="OneClick">
<MudButton OnClick="@(async _ => await OneClick(5))">
<MudIcon Class="ma-2" Icon="@Icons.Material.Filled.Filter5" Color="Color.Primary"
Style="font-size: 3rem;"/>
</MudButton>
@ -70,7 +75,7 @@
</MudItem>
<MudItem xs="4">
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
<MudButton OnClick="OneClick">
<MudButton OnClick="@(async _ => await OneClick(6))">
<MudIcon Class="ma-2" Icon="@Icons.Material.Filled.Filter6" Color="Color.Primary"
Style="font-size: 3rem;"/>
</MudButton>
@ -81,7 +86,7 @@
<MudItem xs="4">
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
<MudButton OnClick="OneClick">
<MudButton OnClick="@(async _ => await OneClick(7))">
<MudIcon Class="ma-2" Icon="@Icons.Material.Filled.Filter7" Color="Color.Primary"
Style="font-size: 3rem;"/>
</MudButton>
@ -89,7 +94,7 @@
</MudItem>
<MudItem xs="4">
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
<MudButton OnClick="OneClick">
<MudButton OnClick="@(async _ => await OneClick(8))">
<MudIcon Class="ma-2" Icon="@Icons.Material.Filled.Filter8" Color="Color.Primary"
Style="font-size: 3rem;"/>
</MudButton>
@ -97,7 +102,7 @@
</MudItem>
<MudItem xs="4">
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
<MudButton OnClick="OneClick">
<MudButton OnClick="@(async _ => await OneClick(9))">
<MudIcon Class="ma-2" Icon="@Icons.Material.Filled.Filter9" Color="Color.Primary"
Style="font-size: 3rem;"/>
</MudButton>
@ -111,7 +116,7 @@
{
<MudItem xs="12">
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
<MudButton OnClick="OneClick">
<MudButton>
<p>Spieler auswählen</p>
</MudButton>
</MudPaper>
@ -133,14 +138,15 @@
get;
set;
}
private void ToggleClick(MouseEventArgs obj)
{
}
private void OneClick(MouseEventArgs obj)
private async Task OneClick(int number)
{
await EventAggregator.PublishAsync(new NumberPanelMessage(number));
}
}

View File

@ -1,5 +1,9 @@
<MudItem xs="12" md="6">
<NumberPanel ShowNumbers="ShowNumbers" CanSelectPlayer="CanSelectPlayers" />
@using KoogleApp.Services
<MudItem xs="12" md="6">
<NumberPanel ShowNumbers="ShowNumbers"
CanSelectPlayer="CanSelectPlayers" />
</MudItem>
<MudItem xs="12" md="6">

View File

@ -1,4 +1,11 @@

@using KoogleApp.Model.EventMessages
@using KoogleApp.Services
@implements IDisposable
@implements IMyHandle<PinValueChangedMessage>
@inject IMyEventAggregator EventAggregator
@if (Disabled)
{
<MudIcon Class="ma-2" Icon="@Icons.Material.Filled.CheckCircle" Color="Color.Dark"
@ -11,20 +18,14 @@
}
}
else
{
@if (!Value)
{
<MudButton OnClick="ToggleClick" Disabled="Disabled">
<MudIcon Class="ma-2" Icon="@Icons.Material.Filled.ModeStandby" Color="Color.Primary" Style="font-size: 3rem;" />
</MudButton>
}
else
{
<MudButton OnClick="ToggleClick" Disabled="Disabled">
<MudIcon Class="ma-2" Icon="@Icons.Material.Filled.CheckCircleOutline" Color="Color.Warning"
Style="font-size: 3rem;"/>
</MudButton>
}
{
<MudButton OnClick="ToggleClick" Disabled="Disabled">
<MudIcon Class="ma-2"
Icon="@(Value ? Icons.Material.Filled.CheckCircleOutline: Icons.Material.Filled.ModeStandby)"
Color="@(Value ? Color.Warning: Color.Primary)"
Style="font-size: 3rem;" />
</MudButton>
@if (ShowSwitch)
{
<MudSwitch T="bool" Label="" Size="Size.Medium" Disabled="Disabled"
@ -37,8 +38,21 @@ else
@code {
private bool _value;
[Parameter]
public bool Value { get; set; } = false;
public bool Value
{
get => _value;
set
{
_value = value;
InvokeAsync(StateHasChanged);
}
}
[Parameter]
public int PinNumber { get; set; }
[Parameter]
public bool Disabled { get; set; }
@ -49,9 +63,28 @@ else
private const string PinIconStr =
"<image width=\"24\" height=\"24\" xlink:href=\"icons/pin_64.png\" />";
private void ToggleClick(MouseEventArgs obj)
private async Task ToggleClick(MouseEventArgs obj)
{
Value = !Value;
await EventAggregator.PublishAsync(new PinValueChangedMessage(pinNumber: PinNumber, Value));
}
protected override void OnInitialized()
{
EventAggregator.Subscribe(this);
}
public void Dispose()
{
EventAggregator.Unsubscribe(this);
}
public async Task HandleAsync(PinValueChangedMessage message)
{
if (message.PinNumber == PinNumber)
{
Value = message.Value;
}
}
}

View File

@ -1,7 +1,16 @@
<MudGrid>
@using System.Reflection.Metadata.Ecma335
@using KoogleApp.Model.EventMessages
@using KoogleApp.Services
@implements IMyHandle<NumberPanelMessage>
@implements IDisposable
@inject IMyEventAggregator EventAggregator
<MudGrid>
<MudItem xs="12">
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
<Pin/>
<Pin @ref="_pin1" PinNumber="1" />
</MudPaper>
</MudItem>
@ -9,12 +18,12 @@
<MudItem xs="6">
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
<Pin />
<Pin @ref="_pin2" PinNumber="2" />
</MudPaper>
</MudItem>
<MudItem xs="6">
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
<Pin />
<Pin @ref="_pin3" PinNumber="3" />
</MudPaper>
</MudItem>
@ -22,17 +31,17 @@
<MudItem xs="4">
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
<Pin />
<Pin @ref="_pin4" PinNumber="4" />
</MudPaper>
</MudItem>
<MudItem xs="4">
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
<Pin />
<Pin @ref="_pin5" PinNumber="5" />
</MudPaper>
</MudItem>
<MudItem xs="4">
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
<Pin />
<Pin @ref="_pin6" PinNumber="6" />
</MudPaper>
</MudItem>
@ -40,23 +49,76 @@
<MudItem xs="6">
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
<Pin />
<Pin @ref="_pin7" PinNumber="7" />
</MudPaper>
</MudItem>
<MudItem xs="6">
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
<Pin />
<Pin @ref="_pin8" PinNumber="8" />
</MudPaper>
</MudItem>
<MudFlexBreak />
<MudItem xs="12">
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
<Pin/>
<Pin @ref="_pin9" PinNumber="9" />
</MudPaper>
</MudItem>
</MudGrid>
@code {
Pin _pin1;
Pin _pin2;
Pin _pin3;
Pin _pin4;
Pin _pin5;
Pin _pin6;
Pin _pin7;
Pin _pin8;
Pin _pin9;
readonly List<Pin> _pins = [];
protected override void OnInitialized()
{
EventAggregator.Subscribe(this);
}
public void Dispose()
{
EventAggregator.Unsubscribe(this);
}
protected override void OnAfterRender(bool firstRender)
{
if (firstRender)
{
_pins.Add(_pin9);
_pins.Add(_pin8);
_pins.Add(_pin7);
_pins.Add(_pin6);
_pins.Add(_pin5);
_pins.Add(_pin4);
_pins.Add(_pin3);
_pins.Add(_pin2);
_pins.Add(_pin1);
}
}
public async Task HandleAsync(NumberPanelMessage message)
{
var chgCnt = 0;
foreach (var pin in _pins)
{
var nr = _pins.IndexOf(pin) + 1;
if (!pin.Disabled)
{
pin.Value = chgCnt < message.Number;
chgCnt++;
}
}
await InvokeAsync(StateHasChanged);
}
}

View File

@ -1,6 +1,9 @@
<MudGrid>
@using KoogleApp.Model
<MudGrid>
<NumberPinPanel ShowNumbers="true" CanSelectPlayers="true" />
<NumberPinPanel ShowNumbers="true"
CanSelectPlayers="true"
/>
<MudItem xs="4">
<MudPaper Class="d-flex align-center justify-center mud-width-full py-0">
@ -33,15 +36,31 @@
@code {
[Parameter]
public EventCallback<ThrowEventArgs> OnClick { get; set; }
private void SinkLeftClick(MouseEventArgs obj)
{
DoThrow(true, false);
}
private void SinkRightClick(MouseEventArgs obj)
{
DoThrow(false, true);
}
private async Task DoThrow(bool leftSink, bool rightSink)
{
var ev = new ThrowEventArgs
{
LeftSink = leftSink,
RightSink = rightSink
};
// if (GetDisabledState())
// return;
await OnClick.InvokeAsync(ev);
// Activatable?.Activate(this, ev);
}
private void ThrowClick(MouseEventArgs obj)
{

View File

@ -0,0 +1,15 @@
using KoogleApp.Model.Framework;
namespace KoogleApp.Model.EventMessages
{
public class NumberPanelMessage: ScopedEventBase
{
public int Number { get; private set; }
public NumberPanelMessage(int number)
{
Scope = EventScope.Global;
Number = number;
}
}
}

View File

@ -0,0 +1,18 @@
using KoogleApp.Components.Controls;
using KoogleApp.Model.Framework;
namespace KoogleApp.Model.EventMessages
{
public class PinValueChangedMessage : ScopedEventBase
{
public int PinNumber { get; private set; }
public bool Value { get; private set; }
public PinValueChangedMessage(int pinNumber, bool value)
{
Scope = EventScope.Global;
Value = value;
PinNumber = pinNumber;
}
}
}

View File

@ -0,0 +1,8 @@
namespace KoogleApp.Model
{
public class ThrowEventArgs
{
public bool LeftSink { get; set; }
public bool RightSink { get; set; }
}
}

View File

@ -3,11 +3,19 @@
"Status": {
"Content": "Willkommen! Starte die Zusammenarbeit."
},
"Version": 2,
"LastModified": "2025-11-03T19:09:57.4404986+01:00",
"Version": 3,
"LastModified": "2025-11-05T20:53:27.735651+01:00",
"LastModifiedBy": "test1@test.de"
},
"UndoHistory": [
{
"Status": {
"Content": "Willkommen! Starte die Zusammenarbeit."
},
"Version": 2,
"LastModified": "2025-11-03T19:09:57.4404986+01:00",
"LastModifiedBy": "test1@test.de"
},
{
"Status": {
"Content": "Willkommen! Starte die Zusammenarbeit."
@ -17,14 +25,5 @@
"LastModifiedBy": "System"
}
],
"RedoHistory": [
{
"Status": {
"Content": "Willkommen! Starte die Zusammenarbeit."
},
"Version": 3,
"LastModified": "2025-11-05T20:53:27.735651+01:00",
"LastModifiedBy": "test1@test.de"
}
]
"RedoHistory": []
}