public void UpdateView()
        {
            timerDc.Cancel();

            DateTime    d = DateTimeSelector.SelectedTime;
            CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture;

            try
            {
                // Copy the Tx:* keys from the loaded dictionary file into TxLib and restore them later
                Tx.ReplaceSystemTexts(MainViewModel.Instance.GetSystemTexts());

                Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);

                // .NET formats

                YearMonthLabel.Text       = d.ToString(CultureInfo.CurrentCulture.DateTimeFormat.YearMonthPattern);
                YearMonthFormatLabel.Text = CultureInfo.CurrentCulture.DateTimeFormat.YearMonthPattern + " [Y]";

                ShortDateLabel.Text       = d.ToShortDateString();
                ShortDateFormatLabel.Text = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern + " [d]";
                LongDateLabel.Text        = d.ToLongDateString();
                LongDateFormatLabel.Text  = CultureInfo.CurrentCulture.DateTimeFormat.LongDatePattern + " [D]";

                MonthDayLabel.Text       = d.ToString(CultureInfo.CurrentCulture.DateTimeFormat.MonthDayPattern);
                MonthDayFormatLabel.Text = CultureInfo.CurrentCulture.DateTimeFormat.MonthDayPattern + " [M]";

                ShortTimeLabel.Text       = d.ToShortTimeString();
                ShortTimeFormatLabel.Text = CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern + " [t]";
                LongTimeLabel.Text        = d.ToLongTimeString();
                LongTimeFormatLabel.Text  = CultureInfo.CurrentCulture.DateTimeFormat.LongTimePattern + " [T]";

                // Tx formats

                TxTime addDow = 0;
                if (TxDowAbbrCheckBox.IsChecked == true)
                {
                    addDow = TxTime.DowAbbr;
                }
                if (TxDowLongCheckBox.IsChecked == true)
                {
                    addDow = TxTime.DowLong;
                }

                // First only the format strings
                // (They should be finished if the data can't be displayed because of format string
                // errors, possibly while the user is currently editing them.)

                TxYMShortFormatLabel.Text = Tx.Time(d, TxTime.YearMonth | addDow, true);
                TxYMTabFormatLabel.Text   = Tx.Time(d, TxTime.YearMonthTab | addDow, true);
                TxYMAbbrFormatLabel.Text  = Tx.Time(d, TxTime.YearMonthAbbr | addDow, true);
                TxYMLongFormatLabel.Text  = Tx.Time(d, TxTime.YearMonthLong | addDow, true);

                TxYMDShortFormatLabel.Text = Tx.Time(d, TxTime.YearMonthDay | addDow, true);
                TxYMDTabFormatLabel.Text   = Tx.Time(d, TxTime.YearMonthDayTab | addDow, true);
                TxYMDAbbrFormatLabel.Text  = Tx.Time(d, TxTime.YearMonthDayAbbr | addDow, true);
                TxYMDLongFormatLabel.Text  = Tx.Time(d, TxTime.YearMonthDayLong | addDow, true);

                TxMShortFormatLabel.Text = Tx.Time(d, TxTime.Month | addDow, true);
                TxMTabFormatLabel.Text   = Tx.Time(d, TxTime.MonthTab | addDow, true);
                TxMAbbrFormatLabel.Text  = Tx.Time(d, TxTime.MonthAbbr | addDow, true);
                TxMLongFormatLabel.Text  = Tx.Time(d, TxTime.MonthLong | addDow, true);

                TxMDShortFormatLabel.Text = Tx.Time(d, TxTime.MonthDay | addDow, true);
                TxMDTabFormatLabel.Text   = Tx.Time(d, TxTime.MonthDayTab | addDow, true);
                TxMDAbbrFormatLabel.Text  = Tx.Time(d, TxTime.MonthDayAbbr | addDow, true);
                TxMDLongFormatLabel.Text  = Tx.Time(d, TxTime.MonthDayLong | addDow, true);

                TxDShortFormatLabel.Text = Tx.Time(d, TxTime.Day | addDow, true);
                TxDTabFormatLabel.Text   = Tx.Time(d, TxTime.DayTab | addDow, true);

                TxHShortFormatLabel.Text = Tx.Time(d, TxTime.Hour, true);
                TxHTabFormatLabel.Text   = Tx.Time(d, TxTime.HourTab, true);

                TxHMShortFormatLabel.Text = Tx.Time(d, TxTime.HourMinute, true);
                TxHMTabFormatLabel.Text   = Tx.Time(d, TxTime.HourMinuteTab, true);

                TxHMSShortFormatLabel.Text = Tx.Time(d, TxTime.HourMinuteSecond, true);
                TxHMSTabFormatLabel.Text   = Tx.Time(d, TxTime.HourMinuteSecondTab, true);

                // Now the data

                TxYMShortLabel.Text = Tx.Time(d, TxTime.YearMonth | addDow);
                TxYMTabLabel.Text   = Tx.Time(d, TxTime.YearMonthTab | addDow);
                TxYMAbbrLabel.Text  = Tx.Time(d, TxTime.YearMonthAbbr | addDow);
                TxYMLongLabel.Text  = Tx.Time(d, TxTime.YearMonthLong | addDow);

                TxYMDShortLabel.Text = Tx.Time(d, TxTime.YearMonthDay | addDow);
                TxYMDTabLabel.Text   = Tx.Time(d, TxTime.YearMonthDayTab | addDow);
                TxYMDAbbrLabel.Text  = Tx.Time(d, TxTime.YearMonthDayAbbr | addDow);
                TxYMDLongLabel.Text  = Tx.Time(d, TxTime.YearMonthDayLong | addDow);

                TxMShortLabel.Text = Tx.Time(d, TxTime.Month | addDow);
                TxMTabLabel.Text   = Tx.Time(d, TxTime.MonthTab | addDow);
                TxMAbbrLabel.Text  = Tx.Time(d, TxTime.MonthAbbr | addDow);
                TxMLongLabel.Text  = Tx.Time(d, TxTime.MonthLong | addDow);

                TxMDShortLabel.Text = Tx.Time(d, TxTime.MonthDay | addDow);
                TxMDTabLabel.Text   = Tx.Time(d, TxTime.MonthDayTab | addDow);
                TxMDAbbrLabel.Text  = Tx.Time(d, TxTime.MonthDayAbbr | addDow);
                TxMDLongLabel.Text  = Tx.Time(d, TxTime.MonthDayLong | addDow);

                TxDShortLabel.Text = Tx.Time(d, TxTime.Day | addDow);
                TxDTabLabel.Text   = Tx.Time(d, TxTime.DayTab | addDow);

                TxHShortLabel.Text = Tx.Time(d, TxTime.Hour);
                TxHTabLabel.Text   = Tx.Time(d, TxTime.HourTab);

                TxHMShortLabel.Text = Tx.Time(d, TxTime.HourMinute);
                TxHMTabLabel.Text   = Tx.Time(d, TxTime.HourMinuteTab);

                TxHMSShortLabel.Text = Tx.Time(d, TxTime.HourMinuteSecond);
                TxHMSTabLabel.Text   = Tx.Time(d, TxTime.HourMinuteSecondTab);

                RelativeTimeLabel.Text     = Tx.RelativeTime(d);
                RelativeTimeSpanLabel.Text = Tx.TimeSpan(d);
            }
            catch (FormatException)
            {
                // Ignore invalid date formats, but clear any already displayed or now outdated data
                TxYMShortLabel.Text = "";
                TxYMTabLabel.Text   = "";
                TxYMAbbrLabel.Text  = "";
                TxYMLongLabel.Text  = "";

                TxYMDShortLabel.Text = "";
                TxYMDTabLabel.Text   = "";
                TxYMDAbbrLabel.Text  = "";
                TxYMDLongLabel.Text  = "";

                TxMShortLabel.Text = "";
                TxMTabLabel.Text   = "";
                TxMAbbrLabel.Text  = "";
                TxMLongLabel.Text  = "";

                TxMDShortLabel.Text = "";
                TxMDTabLabel.Text   = "";
                TxMDAbbrLabel.Text  = "";
                TxMDLongLabel.Text  = "";

                TxDShortLabel.Text = "";
                TxDTabLabel.Text   = "";

                TxHShortLabel.Text = "";
                TxHTabLabel.Text   = "";

                TxHMShortLabel.Text = "";
                TxHMTabLabel.Text   = "";

                TxHMSShortLabel.Text = "";
                TxHMSTabLabel.Text   = "";

                RelativeTimeLabel.Text     = "";
                RelativeTimeSpanLabel.Text = "";
            }
            finally
            {
                Thread.CurrentThread.CurrentCulture = originalCulture;
                Tx.RestoreSystemTexts();
            }

            timerDc.Start();
        }
Esempio n. 2
0
        public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            string text;

            // Return the text key only in design mode. Nothing better to do for now.
            if (DesignerProperties.GetIsInDesignMode(new DependencyObject()))
            {
                switch (relKind)
                {
                case RelativeTimeKind.None:
                    text = Tx.Time(DateTime.Now, details);
                    break;

                case RelativeTimeKind.PointInTime:
                    text = Tx.RelativeTime(DateTime.Now.AddHours(2).AddMinutes(34));
                    break;

                case RelativeTimeKind.CurrentTimeSpan:
                    text = Tx.TimeSpan(DateTime.Now.AddHours(2).AddMinutes(34));
                    break;

                case RelativeTimeKind.TimeSpan:
                    text = Tx.TimeSpan(TimeSpan.FromHours(2) + TimeSpan.FromMinutes(34));
                    break;

                default:
                    text = "{Error: Invalid relKind}";                               // Should not happen
                    break;
                }
            }
            else
            {
                // values[0] is the dictionary Dummy binding, don't use it
                // values[1] is the timer Dummy binding, don't use it

                // Read the time value from binding number three.
                if (values[2] == DependencyProperty.UnsetValue)
                {
                    return(DependencyProperty.UnsetValue);
                }

                DateTime ConvertToDateTime(object obj) =>
                obj is DateTimeOffset dtos ? dtos.LocalDateTime : System.Convert.ToDateTime(obj);

                DateTime dt;
                TimeSpan ts;
                switch (relKind)
                {
                case RelativeTimeKind.None:
                    dt   = ConvertToDateTime(values[2]);
                    text = Tx.Time(dt, details);
                    break;

                case RelativeTimeKind.PointInTime:
                    dt   = ConvertToDateTime(values[2]);
                    text = Tx.RelativeTime(dt);
                    break;

                case RelativeTimeKind.CurrentTimeSpan:
                    dt   = ConvertToDateTime(values[2]);
                    text = Tx.TimeSpan(dt);
                    break;

                case RelativeTimeKind.TimeSpan:
                    if (values[2] is TimeSpan)
                    {
                        ts   = (TimeSpan)values[2];
                        text = Tx.TimeSpan(ts);
                    }
                    else
                    {
                        text = "";
                    }
                    break;

                default:
                    text = "{Error: Invalid relKind}";                               // Should not happen
                    break;
                }
            }

            if (upperCase)
            {
                text = Tx.UpperCase(text);
            }

            return(text);
        }