/// <summary>Returns the string representation of the value of this instance.</summary> /// <param name="format">Format string using the usual characters to interpret custom datetime - as per standard Timespan custom formats</param> /// <returns>A string that represents the value of this instance.</returns> public String ToString(String format, IFormatProvider provider) { //parse and replace the format stuff MatchCollection matches = Regex.Matches(format, "([a-zA-z])\\1{0,}"); for (int i = matches.Count - 1; i >= 0; i--) { Match m = matches[i]; Int32 mIndex = m.Index, mLength = m.Length; if (mIndex > 0 && format[m.Index - 1] == '\\') { if (m.Length == 1) { continue; } else { mIndex++; mLength--; } } switch (m.Value[0]) { case 'y': format = format.Substring(0, mIndex) + Years.ToString("D" + mLength) + format.Substring(mIndex + mLength); break; case 'd': format = format.Substring(0, mIndex) + Days.ToString("D" + mLength) + format.Substring(mIndex + mLength); break; case 'h': format = format.Substring(0, mIndex) + Hours.ToString("D" + mLength.Clamp(1, KSPDateStructure.HoursPerDay.ToString().Length)) + format.Substring(mIndex + mLength); break; case 'm': format = format.Substring(0, mIndex) + Minutes.ToString("D" + mLength.Clamp(1, KSPDateStructure.MinutesPerHour.ToString().Length)) + format.Substring(mIndex + mLength); break; case 's': format = format.Substring(0, mIndex) + Seconds.ToString("D" + mLength.Clamp(1, KSPDateStructure.SecondsPerMinute.ToString().Length)) + format.Substring(mIndex + mLength); break; default: break; } } //Now strip out the \ , but not multiple \\ format = Regex.Replace(format, "\\\\(?=[a-z])", ""); return(format); //if (KSPDateStructure.CalendarType == CalendarTypeEnum.Earth) // return String.Format(format, _EarthDateTime); //else // return String.Format(format, this); //"TEST"; }
/// <summary> /// Invoked when the current value is changed, and informs the viewmodel. /// </summary> /// <param name="sender">Sending object.</param> /// <param name="e">Event args.</param> private void DepthUpdated(Object sender, EventArgs e) { Object value = this.DepthHexDecBox.GetValue(); Int32 realValue = value == null ? 0 : (Int32)Conversions.ParsePrimitiveStringAsPrimitive(DataTypes.Int32, value.ToString()); if (this.DepthHexDecBox.IsValid()) { this.DepthHexDecBox.SetValue(realValue.Clamp <Int32>(0, PointerScannerViewModel.MaximumPointerScanDepth)); } this.PointerScannerViewModel.SetDepthCommand.Execute(realValue); }
private void DepthHexDecBoxViewModelPropertyChanged(Object sender, PropertyChangedEventArgs args) { if (args.PropertyName == nameof(HexDecBoxViewModel.Text)) { Object value = this.DepthHexDecBoxViewModel.GetValue(); Int32 realValue = value == null ? 0 : (Int32)Conversions.ParsePrimitiveStringAsPrimitive(DataType.Int32, value.ToString()); if (this.DepthHexDecBoxViewModel.IsValid) { this.DepthHexDecBoxViewModel.SetValue(realValue.Clamp <Int32>(0, PointerScannerViewModel.MaximumPointerScanDepth)); } this.PointerScannerViewModel.SetDepthCommand.Execute(realValue); } }
/// <summary>Returns the string representation of the value of this instance.</summary> /// <param name="format">Format string using the usual characters to interpret custom datetime - as per standard DateTime custom formats</param> /// <returns>A string that represents the value of this instance.</returns> public String ToString(String format, IFormatProvider provider) { //parse and replace the format stuff MatchCollection matches = Regex.Matches(format, "([a-zA-z])\\1{0,}"); for (int i = matches.Count - 1; i >= 0; i--) { Match m = matches[i]; Int32 mIndex = m.Index, mLength = m.Length; if (mIndex > 0 && format[m.Index - 1] == '\\') { if (m.Length == 1) { continue; } else { mIndex++; mLength--; } } switch (m.Value[0]) { case 'y': format = format.Substring(0, mIndex) + Year.ToString("D" + mLength) + format.Substring(mIndex + mLength); break; case 'M': if (mLength < 3) { String input2 = Month.ToString("D" + mLength); format = format.Substring(0, mIndex) + input2 + format.Substring(mIndex + mLength); } else if (mLength == 3) { if (KSPDateStructure.CalendarType == CalendarTypeEnum.Earth) { format = format.Substring(0, mIndex) + System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetAbbreviatedMonthName(Month) + format.Substring(mIndex + mLength); } else if (KSPDateStructure.MonthCount < 1) { String input2 = Month.ToString("D" + mLength); format = format.Substring(0, mIndex) + input2 + format.Substring(mIndex + mLength); } else { format = format.Substring(0, mIndex) + KSPDateStructure.Months[Month].ToString().Substring(0, 3) + format.Substring(mIndex + mLength); } } else { if (KSPDateStructure.CalendarType == CalendarTypeEnum.Earth) { format = format.Substring(0, mIndex) + System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(Month) + format.Substring(mIndex + mLength); } else if (KSPDateStructure.MonthCount < 1) { String input2 = Month.ToString("D" + mLength); format = format.Substring(0, mIndex) + input2 + format.Substring(mIndex + mLength); } else { format = format.Substring(0, mIndex) + KSPDateStructure.Months[Month] + format.Substring(mIndex + mLength); } } break; case 'd': format = format.Substring(0, mIndex) + Day.ToString("D" + mLength) + format.Substring(mIndex + mLength); break; case 'h': //how to do this one AM/PM Hours String HalfDayTime = ""; switch (AMPM) { case AMPMEnum.AM: HalfDayTime = Hour.ToString("D" + mLength.Clamp(1, (KSPDateStructure.HoursPerDay / 2).ToString().Length)); break; case AMPMEnum.PM: HalfDayTime = (Hour - (KSPDateStructure.HoursPerDay / 2)).ToString("D" + mLength.Clamp(1, (KSPDateStructure.HoursPerDay / 2).ToString().Length)); break; case AMPMEnum.OddHoursPerDay: default: HalfDayTime = Hour.ToString("D" + mLength.Clamp(1, KSPDateStructure.HoursPerDay.ToString().Length)); break; } format = format.Substring(0, mIndex) + HalfDayTime + format.Substring(mIndex + mLength); break; case 't': if (AMPM != AMPMEnum.OddHoursPerDay) { format = format.Substring(0, mIndex) + AMPM.ToString().ToLower() + format.Substring(mIndex + mLength); } break; case 'T': if (AMPM != AMPMEnum.OddHoursPerDay) { format = format.Substring(0, mIndex) + AMPM.ToString().ToUpper() + format.Substring(mIndex + mLength); } break; case 'H': format = format.Substring(0, mIndex) + Hour.ToString("D" + mLength.Clamp(1, KSPDateStructure.HoursPerDay.ToString().Length)) + format.Substring(mIndex + mLength); break; case 'm': format = format.Substring(0, mIndex) + Minute.ToString("D" + mLength.Clamp(1, KSPDateStructure.MinutesPerHour.ToString().Length)) + format.Substring(mIndex + mLength); break; case 's': format = format.Substring(0, mIndex) + Second.ToString("D" + mLength.Clamp(1, KSPDateStructure.SecondsPerMinute.ToString().Length)) + format.Substring(mIndex + mLength); break; default: break; } } //Now strip out the \ , but not multiple \\ format = Regex.Replace(format, "\\\\(?=[a-z])", ""); return(format); //if (KSPDateStructure.CalendarType == CalendarTypeEnum.Earth) // return String.Format(format, _EarthDateTime); //else // return String.Format(format, this); //"TEST"; }
public static Int32 ClampIndex <T>(this Int32 index, T[] array) { return(index.Clamp(0, array.Length - 1)); }