Files
mapo-core/MP-TAB3/Components/SelTempoMSMC.razor.cs
Samuele E. Locatelli 30e7ad2c5a TAB3:
- ancora code cleanup
2025-03-08 09:10:52 +01:00

295 lines
7.5 KiB
C#

using global::Microsoft.AspNetCore.Components;
using MP.Data.Services;
using System.Globalization;
using System.Text.RegularExpressions;
namespace MP_TAB3.Components
{
public partial class SelTempoMSMC
{
#region Public Enums
/// <summary>
/// modalit di visualizzazione ed interazione controllo tempo
/// </summary>
public enum timeControlMode
{
/// <summary>
/// controllo textbox
/// </summary>
testo = 0,
/// <summary>
/// selettori dropdown list
/// </summary>
selettori = 1
}
/// <summary>
/// modalit tempo principale (Minuti Secondi o Minuti Centesimali=
/// </summary>
public enum timeMode
{
/// <summary>
/// Minuti Secondi
/// </summary>
MS = 0,
/// <summary>
/// Minuti Centesimali
/// </summary>
MC = 1
}
#endregion Public Enums
#region Public Properties
[Parameter]
public EventCallback<decimal> E_TCRich { get; set; }
/// <summary>
/// modalit rendering controllo
/// </summary>
[Parameter]
public timeControlMode modoControllo { get; set; } = timeControlMode.testo;
/// <summary>
/// Valore tempo (centesimale)
/// </summary>
[Parameter]
public decimal TempoMC
{
get => _tempoMC;
set
{
_tempoMC = value;
_tempoMS = minCent2Sec(value);
}
}
#endregion Public Properties
#region Protected Properties
/// <summary>
/// tempo min.cent
/// </summary>
protected decimal _tempoMC { get; set; } = 0;
[Inject]
protected MessageService MsgServ { get; set; } = null!;
protected int selMin
{
get => TempoMS.Minutes;
set
{
TempoMS = new TimeSpan(selOre, value, selSec);
E_TCRich.InvokeAsync(TempoMC);
}
}
protected int selOre
{
get => TempoMS.Hours;
set
{
TempoMS = new TimeSpan(value, selMin, selSec);
E_TCRich.InvokeAsync(TempoMC);
}
}
protected int selSec
{
get => TempoMS.Seconds;
set
{
TempoMS = new TimeSpan(selOre, selMin, value);
E_TCRich.InvokeAsync(TempoMC);
}
}
/// <summary>
/// tempo selezionato in formato Minuti Secondi
/// </summary>
protected DateTime selTempoMS
{
get => DateTime.Today.Add(TempoMS);
set
{
TempoMS = value.Subtract(value.Date);
E_TCRich.InvokeAsync(TempoMC);
}
}
protected bool ShowMS { get; set; } = true;
[Inject]
protected SharedMemService SMServ { get; set; } = null!;
protected string tcMode
{
get => MsgServ.UserPrefGet("TcMode");
}
/// <summary>
/// tempo selezionato in formato Minuti Secondi
/// </summary>
protected TimeSpan TempoMS
{
get
{
return _tempoMS;
}
set
{
_tempoMS = value;
_tempoMC = minSec2Cent(value);
}
}
protected string txtSelMS
{
get => ShowMS ? Traduci("ShowMS") : Traduci("ShowMC");
}
#endregion Protected Properties
#region Private Properties
private string _baseLang { get; set; } = "IT";
/// <summary>
/// tempo min:sec
/// </summary>
private TimeSpan _tempoMS { get; set; } = TimeSpan.FromSeconds(3599);
private string baseLang
{
get => _baseLang;
set { MsgServ.UserPrefGet("Lang"); }
}
/// <summary>
/// INdica il formato del tempo IN INGRESSO (selezionato)
/// </summary>
private string labelTempoIN
{
get
{
string answ = "";
if (tcMode == "mc")
{
answ = "min.cent";
}
else
{
answ = "h:m:s";
}
return answ;
}
}
private string lblTempo
{
get
{
string answ = tcMode == "mc" ? $"{TempoMS.TotalMinutes:N0}:{TempoMS:ss} (min:sec)" : $"{TempoMC:0.000} (min.cent)";
return answ;
}
}
private string txtTempo
{
get
{
string answ = tcMode == "mc" ? $"{TempoMC:0.000}" : $"{TempoMS.TotalMinutes:N0}:{TempoMS:ss}";
return answ;
}
set
{
if (tcMode == "mc")
{
decimal tMC = 1;
decimal.TryParse(value, out tMC);
TempoMC = tMC;
}
else
{
var tPart = value.Split(':');
double min = 0;
double sec = 0;
double.TryParse((tPart[0]), out min);
double.TryParse((tPart[1]), out sec);
TimeSpan tMS = TimeSpan.FromMinutes(min).Add(TimeSpan.FromSeconds(sec));
TempoMS = tMS;
}
}
}
#endregion Private Properties
#region Protected Methods
/// <summary>
/// conversione da tempo minuti centesimali a minuti/secondi
/// </summary>
/// <param name="valore"></param>
/// <returns></returns>
protected TimeSpan minCent2Sec(decimal valore)
{
TimeSpan answ = TimeSpan.FromSeconds(Math.Round((double)(valore * 60)));
return answ;
}
/// <summary>
/// conversione da tempo minuti/secondi a minuti centesimali
/// </summary>
/// <param name="valore"></param>
/// <returns></returns>
protected decimal minSec2Cent(TimeSpan valore)
{
decimal answ = 0;
decimal.TryParse($"{Math.Floor(valore.TotalMinutes) + (double)valore.Seconds / 60}", out answ);
return answ;
}
protected override void OnInitialized()
{
//baseLang = SMServ.GetConf("baseLang");
}
protected override void OnParametersSet()
{
showControls();
}
protected string Traduci(string lemma)
{
return SMServ.Traduci($"{baseLang}_{lemma}".ToUpper());
}
#endregion Protected Methods
#region Private Methods
/// <summary>
/// mostra i controlli secondo richiesta
/// </summary>
private void showControls()
{
//ddlMinuti.SelectedValue = TempoMS.Minutes.ToString();
//if (modoTempo == timeMode.MC)
//{
// ddlSecondi.SelectedValue = Convert.ToInt32((tempoMC - Math.Floor(tempoMC)) * 100).ToString();
//}
//else
//{
// ddlSecondi.SelectedValue = TempoMS.Seconds.ToString();
//}
}
#endregion Private Methods
}
}