// Copyright © 2017 Paddy Xu // // This file is part of QuickLook program. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . using System; using System.Globalization; using System.Windows; using System.Windows.Data; namespace QuickLook.Plugin.VideoViewer { public sealed class DecimalToTimeSpanConverter : DependencyObject, IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value == null) return "00:00:00"; var time = TimeSpan.FromSeconds((double) (decimal) value); return time.ToString(@"hh\:mm\:ss"); } object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } public sealed class DoubleToTimeSpanConverter : DependencyObject, IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value == null) return "00:00:00"; var time = TimeSpan.FromSeconds((double) value); return time.ToString(@"hh\:mm\:ss"); } object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } public sealed class BooleanToVisibilityHiddenConverter : DependencyObject, IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value == null) return Visibility.Hidden; var v = (bool) value; return v ? Visibility.Hidden : Visibility.Visible; } object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } public class TimeSpanToSecondsConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value is TimeSpan) return ((TimeSpan) value).TotalSeconds; if (value is Duration) return ((Duration) value).HasTimeSpan ? ((Duration) value).TimeSpan.TotalSeconds : 0d; return 0d; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { var result = TimeSpan.FromTicks((long) Math.Round(TimeSpan.TicksPerSecond * (double) value, 0)); // Do the conversion from visibility to bool if (targetType == typeof(TimeSpan)) return result; if (targetType == typeof(Duration)) return new Duration(result); return Activator.CreateInstance(targetType); } } }