using SteamWare; using System; using System.Web.UI; namespace MoonProTablet.WebUserControls { public partial class mod_tempoMSMC : System.Web.UI.UserControl { /// /// stringa UID univoca /// public string uid { get { return this.UniqueID.Replace("$", "_").Replace("-", "_"); } } /// /// modalità rendering controllo /// public timeControlMode modoControllo { get; set; } /// /// modalità controllo tempo /// public timeMode modoTempo { get; set; } /// /// tempo min.cent /// protected decimal _tempoMC { get { decimal answ = 0; try { answ = Convert.ToDecimal(memLayer.ML.objSessionObj(string.Format("tempoMC-{0}", uid))); } catch { } return answ; } set { memLayer.ML.setSessionVal(string.Format("tempoMC-{0}", uid), value); } } /// /// tempo min:sec /// protected TimeSpan _tempoMS { get { TimeSpan answ = new TimeSpan(0, 0, 0); try { answ = (TimeSpan)memLayer.ML.objSessionObj(string.Format("tempoMS-{0}", uid)); } catch { } return answ; } set { memLayer.ML.setSessionVal(string.Format("tempoMS-{0}", uid), value); } } /// /// caricamento pagina /// /// /// protected void Page_Load(object sender, EventArgs e) { // a secondo del modo di controllo mostro textbox o selettori... bool showTesto = true; if (modoControllo == timeControlMode.testo) { showTesto = true; } else { showTesto = false; } // sistemo visualizzazione dei 2 div divTesto.Visible = showTesto; divSelettori.Visible = !showTesto; if (!Page.IsPostBack) { // fix numero item secondi odsSecondi.SelectParameters.Clear(); odsSecondi.SelectParameters.Add("minVal", "0"); odsSecondi.SelectParameters.Add("maxVal", numItemSec.ToString()); // fix visualizzazione showControls(); } } /// /// mostra i controlli secondo richiesta /// private void showControls() { if (modoControllo == timeControlMode.testo) { if (modoTempo == timeMode.MC) { txtTempo.Text = string.Format("{0:0.000}", tempoMC); } else { txtTempo.Text = string.Format("{0:#0}:{1:00}", tempoMS.Minutes, tempoMS.Seconds); } } else { 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(); } } // fix label... if (modoTempo == timeMode.MC) { lblTempo.Text = string.Format("--> {0:#0}' {1:00}s (min,sec)", tempoMS.Minutes, tempoMS.Seconds); } else { lblTempo.Text = string.Format("--> {0:0.000} (min,cent)", tempoMC); } } /// /// num item x controllo secondi/centesimi /// public int numItemSec { get { int answ = 60; if (modoTempo == timeMode.MS) { answ = 59; } else { answ = 99; } return answ; } } /// /// tempo selezionato in formato Minuti Secondi /// public TimeSpan tempoMS { get { return _tempoMS; } set { _tempoMS = value; _tempoMC = minSec2Cent(value); showControls(); } } /// /// verifica se TC sia stato caricato dai controlli, se zero va caricato (almento tentato caricamento...) /// public void checkTC() { if (tempoMC == 0) { if (modoControllo == timeControlMode.testo) { updFromTextBox(); } else { updFromDropDown(); } } } /// /// tempo selezionato in formato Minuti Centesimi /// public decimal tempoMC { get { return _tempoMC; } set { _tempoMC = value; _tempoMS = minCent2Sec(value); showControls(); } } /// /// conversione da tempo minuti/secondi a minuti centesimali /// /// /// protected decimal minSec2Cent(TimeSpan valore) { Decimal answ = 0; try { answ = Math.Round((valore.Minutes + (decimal)valore.Seconds / 60), 3); } catch { } return answ; } /// /// conversione da tempo minuti centesimali a minuti/secondi /// /// /// protected TimeSpan minCent2Sec(decimal valore) { TimeSpan answ = new TimeSpan(0, 0, 1); try { answ = new TimeSpan(0, Convert.ToInt32(valore), Convert.ToInt32((valore - Convert.ToInt32(valore)) * 60)); } catch { } return answ; } /// /// cambiato valore tempo... /// /// /// protected void txtTempo_TextChanged(object sender, EventArgs e) { updFromTextBox(); } /// /// update da casella testo /// private void updFromTextBox() { if (modoControllo == timeControlMode.testo) { if (modoTempo == timeMode.MC) { tempoMC = Convert.ToDecimal(txtTempo.Text.Replace(".", ",")); } else { string tempoDP = txtTempo.Text.Replace(".", ":").Replace(",", ":"); int min = 0; int sec = 0; try { min = Convert.ToInt32(tempoDP.Substring(0, tempoDP.IndexOf(":"))); sec = Convert.ToInt32(tempoDP.Substring(tempoDP.IndexOf(":") + 1, tempoDP.Length - tempoDP.IndexOf(":") - 1)); } catch { } tempoMS = new TimeSpan(0, min, sec); } } } /// /// update da controlli dropdown /// private void updFromDropDown() { if (modoControllo == timeControlMode.selettori) { if (modoTempo == timeMode.MS) { tempoMS = new TimeSpan(0, Convert.ToInt32(ddlMinuti.SelectedValue), Convert.ToInt32(ddlSecondi.SelectedValue)); } else { tempoMC = Convert.ToDecimal(Convert.ToDecimal(ddlMinuti.SelectedValue) + Convert.ToDecimal(ddlSecondi.SelectedValue) / 100); } } } /// /// selezione minuti /// /// /// protected void ddlMinuti_SelectedIndexChanged(object sender, EventArgs e) { updFromDropDown(); } /// /// selezione secondi/centesimi /// /// /// protected void ddlSecondi_SelectedIndexChanged(object sender, EventArgs e) { updFromDropDown(); } } } /// /// modalità tempo principale (Minuti Secondi o Minuti Centesimali= /// public enum timeMode { /// /// Minuti Secondi /// MS = 0, /// /// Minuti Centesimali /// MC = 1 } /// /// modalità di visualizzazione ed interazione controllo tempo /// public enum timeControlMode { /// /// controllo textbox /// testo = 0, /// /// selettori dropdown list /// selettori = 1 }