253 lines
8.9 KiB
C#
253 lines
8.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Avalonia.Data.Converters;
|
|
using MarketData.MarketDataModel;
|
|
using MarketData.Utils;
|
|
|
|
namespace PortfolioManager.UIUtils
|
|
{
|
|
|
|
/// <summary>
|
|
/// If the OS is not Window then multiply the first parameter.
|
|
/// For example: "30|.5" would multiply 30 * .5 if the OS is not Windows and return 15 as the result. Otherwise (if Windows) it will return 30
|
|
/// I am doing this because I need to adjust image sizes across Windows and Unix platforms where Unix images appear quite larger than Windows
|
|
/// </summary>
|
|
public class OSValueConverter : IValueConverter
|
|
{
|
|
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
|
{
|
|
String[] parameters = parameter.ToString().Split('|');
|
|
double valueItem = double.Parse(parameters[0]);
|
|
double multiplier = double.Parse(parameters[1]);
|
|
|
|
if (Utility.IsOSWindows())
|
|
{
|
|
return (int)valueItem;
|
|
}
|
|
else
|
|
{
|
|
return (int)(valueItem * multiplier);
|
|
}
|
|
}
|
|
|
|
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public class RMultipleValueConverter : IValueConverter
|
|
{
|
|
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
|
{
|
|
double doubleValue = (double)value;
|
|
if (double.IsNaN(doubleValue) || double.IsInfinity(doubleValue)) return Constants.CONST_DASHES;
|
|
return Utility.FormatNumber(doubleValue, 2) + "R";
|
|
}
|
|
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public class DoubleValueConverter : IValueConverter
|
|
{
|
|
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
|
{
|
|
double doubleValue = (double)value;
|
|
if (double.IsNaN(doubleValue) || double.IsInfinity(doubleValue)) return Constants.CONST_DASHES;
|
|
if (null != parameter) return Utility.FormatNumber(doubleValue, int.Parse(parameter.ToString()));
|
|
return Utility.FormatNumber(doubleValue, 4);
|
|
}
|
|
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public class CurrencyValueConverter : IValueConverter
|
|
{
|
|
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
|
{
|
|
double doubleValue = (double)value;
|
|
if (double.IsNaN(doubleValue) || double.IsInfinity(doubleValue)) return Constants.CONST_DASHES;
|
|
if (null != parameter) return Utility.FormatCurrency(doubleValue, int.Parse(parameter.ToString()));
|
|
return Utility.FormatCurrency(doubleValue, 4);
|
|
}
|
|
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public class IntValueConverter : IValueConverter
|
|
{
|
|
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
|
{
|
|
int intValue = (int)value;
|
|
if (int.MinValue.Equals(intValue)) return Constants.CONST_DASHES;
|
|
if (null != parameter) return Utility.FormatNumber(intValue, int.Parse(parameter.ToString()), true);
|
|
return Utility.FormatNumber(intValue, 2, true);
|
|
}
|
|
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public class BoolValueConverter:IValueConverter
|
|
{
|
|
public object Convert(object value,Type targetType,object parameter,System.Globalization.CultureInfo culture)
|
|
{
|
|
bool boolValue=(bool)value;
|
|
if(null!=parameter)
|
|
{
|
|
if("0".Equals(parameter.ToString())) return boolValue?"T":"F";
|
|
if("1".Equals(parameter.ToString())) return boolValue?"Y":"N";
|
|
if("2".Equals(parameter.ToString())) return boolValue?"Yes":"No";
|
|
if("3".Equals(parameter.ToString())) return boolValue?"True":"False";
|
|
}
|
|
return boolValue.ToString();
|
|
}
|
|
public object ConvertBack(object value,Type targetType,object parameter,System.Globalization.CultureInfo culture)
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public class DateValueConverter:IValueConverter
|
|
{
|
|
public object Convert(object value,Type targetType,object parameter,System.Globalization.CultureInfo culture)
|
|
{
|
|
DateTime dateValue=(DateTime)value;
|
|
if(Utility.IsEpoch(dateValue))return Constants.CONST_DASHES;
|
|
return Utility.DateTimeToStringMMSDDSYYYY(dateValue);
|
|
}
|
|
public object ConvertBack(object value,Type targetType,object parameter,System.Globalization.CultureInfo culture)
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
// ********************************************************************
|
|
public class SubStringConverter : IValueConverter
|
|
{
|
|
/// <summary> the zero-based starting character position </summary>
|
|
public int StartIndex { get; set; }
|
|
|
|
/// <summary> The number of characters in the substring </summary>
|
|
public int Length { get; set; }
|
|
|
|
/// <summary> shows "..." if value was truncated after StartIndex</summary>
|
|
public bool ShowEllipse { get; set; }
|
|
|
|
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
|
{
|
|
string valueString = value as string;
|
|
if (string.IsNullOrWhiteSpace(valueString) == false)
|
|
{
|
|
if (Length > 0 && Length < (valueString.Length + StartIndex))
|
|
{
|
|
if (ShowEllipse)
|
|
return valueString.Substring(StartIndex, Length - 3) + "...";
|
|
else
|
|
return valueString.Substring(StartIndex, Length);
|
|
}
|
|
else if (StartIndex < valueString.Length)
|
|
return valueString.Substring(StartIndex);
|
|
else
|
|
return ""; //because startIndex must be past the length of the string
|
|
}
|
|
else
|
|
{
|
|
return value;
|
|
}
|
|
}
|
|
|
|
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|
|
public class TextMarkerOffsets
|
|
{
|
|
private static int MAX_HITS=12;
|
|
private Dictionary<String,double> tradesBySymbolAndDate=new Dictionary<String,double>();
|
|
private double defaultOffset=0.00;
|
|
private double increment=-18;
|
|
private int hits;
|
|
|
|
public TextMarkerOffsets()
|
|
{
|
|
hits=0;
|
|
}
|
|
public TextMarkerOffsets(double defaultOffset)
|
|
{
|
|
this.defaultOffset=defaultOffset;
|
|
hits=0;
|
|
}
|
|
public TextMarkerOffsets(double defaultOffset,double increment)
|
|
{
|
|
this.defaultOffset=defaultOffset;
|
|
this.increment=increment;
|
|
this.hits=0;
|
|
}
|
|
public double GetOffset(PortfolioTrade portfolioTrade)
|
|
{
|
|
String key;
|
|
double offset=defaultOffset;
|
|
|
|
if (portfolioTrade.IsOpen)
|
|
{
|
|
key = portfolioTrade.Symbol + portfolioTrade.TradeDate.ToShortDateString();
|
|
}
|
|
else
|
|
{
|
|
key = portfolioTrade.Symbol + portfolioTrade.SellDate.ToShortDateString();
|
|
}
|
|
if (tradesBySymbolAndDate.ContainsKey(key))
|
|
{
|
|
if(hits>MAX_HITS)increment=5;
|
|
offset=tradesBySymbolAndDate[key]+increment;
|
|
tradesBySymbolAndDate[key]=offset;
|
|
hits++;
|
|
}
|
|
else
|
|
{
|
|
offset=defaultOffset;
|
|
tradesBySymbolAndDate.Add(key,defaultOffset);
|
|
}
|
|
return offset;
|
|
}
|
|
}
|
|
// public class MenuItemSorter : IComparer<System.Windows.Controls.MenuItem>
|
|
// {
|
|
// public int Compare(System.Windows.Controls.MenuItem v1,System.Windows.Controls.MenuItem v2)
|
|
// {
|
|
// return v1.Header.ToString().CompareTo(v2.Header.ToString());
|
|
// }
|
|
// }
|
|
// public static class UIServices
|
|
// {
|
|
// /// <summary>
|
|
// /// A value indicating whether the UI is currently busy
|
|
// /// </summary>
|
|
// //private static bool isBusy;
|
|
|
|
// /// <summary>
|
|
// /// Sets the busystate as busy.
|
|
// /// </summary>
|
|
// public static void ClearProperty(int fromSeconds, EventHandler dispatchEventHandler)
|
|
// {
|
|
// new DispatcherTimer(TimeSpan.FromSeconds(fromSeconds), DispatcherPriority.ApplicationIdle, dispatchEventHandler, Application.Current.Dispatcher);
|
|
// }
|
|
// public static void SortMenuItems(ObservableCollection<System.Windows.Controls.MenuItem> menuCollection)
|
|
// {
|
|
// List<System.Windows.Controls.MenuItem> items=new List<System.Windows.Controls.MenuItem>();
|
|
// foreach(System.Windows.Controls.MenuItem item in menuCollection)items.Add(item);
|
|
// items.Sort(new MenuItemSorter());
|
|
// menuCollection.Clear();
|
|
// foreach(System.Windows.Controls.MenuItem item in items)menuCollection.Add(item);
|
|
// }
|
|
// }
|
|
}
|