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 /// /// modalit� di visualizzazione ed interazione controllo tempo /// public enum timeControlMode { /// /// controllo textbox /// testo = 0, /// /// selettori dropdown list /// selettori = 1 } /// /// modalit� tempo principale (Minuti Secondi o Minuti Centesimali= /// public enum timeMode { /// /// Minuti Secondi /// MS = 0, /// /// Minuti Centesimali /// MC = 1 } #endregion Public Enums #region Public Properties [Parameter] public EventCallback E_TCRich { get; set; } /// /// modalit� rendering controllo /// [Parameter] public timeControlMode modoControllo { get; set; } = timeControlMode.testo; #if false /// /// modalit� controllo tempo /// [Parameter] public timeMode modoTempo { get; set; } = timeMode.MC; #endif /// /// Valore tempo (centesimale) /// [Parameter] public decimal TempoMC { get => _tempoMC; set { _tempoMC = value; _tempoMS = minCent2Sec(value); } } #endregion Public Properties #region Protected Properties /// /// tempo min.cent /// protected decimal _tempoMC { get; set; } = 0; [Inject] protected MessageService MsgServ { get; set; } = null!; /// /// tempo selezionato in formato Minuti Secondi /// protected DateTime selTempoMS { get => DateTime.Today.Add(TempoMS); set { TempoMS = value.Subtract(value.Date); E_TCRich.InvokeAsync(TempoMC); } } protected int selOre { get => TempoMS.Hours; set { TempoMS = new TimeSpan(value, selMin, selSec); E_TCRich.InvokeAsync(TempoMC); } } protected int selMin { get => TempoMS.Minutes; set { TempoMS = new TimeSpan(selOre,value, selSec); E_TCRich.InvokeAsync(TempoMC); } } protected int selSec { get => TempoMS.Seconds; set { TempoMS = new TimeSpan(selOre, selMin, value); E_TCRich.InvokeAsync(TempoMC); } } protected bool ShowMS { get; set; } = true; [Inject] protected SharedMemService SMServ { get; set; } = null!; protected string tcMode { get => MsgServ.UserPrefGet("TcMode"); } /// /// tempo selezionato in formato Minuti Secondi /// 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 Protected Methods /// /// conversione da tempo minuti centesimali a minuti/secondi /// /// /// protected TimeSpan minCent2Sec(decimal valore) { TimeSpan answ = TimeSpan.FromSeconds(Math.Round((double)(valore * 60))); return answ; } /// /// conversione da tempo minuti/secondi a minuti centesimali /// /// /// 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 Properties private string _baseLang { get; set; } = "IT"; /// /// tempo min:sec /// private TimeSpan _tempoMS { get; set; } = TimeSpan.FromSeconds(3599); private string baseLang { get => _baseLang; set { MsgServ.UserPrefGet("Lang"); } } /// /// INdica il formato del tempo IN INGRESSO (selezionato) /// 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 Private Methods /// /// mostra i controlli secondo richiesta /// 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 } }