mirror of
https://github.com/azaion/annotations.git
synced 2026-04-22 12:26:30 +00:00
add altitude + camera spec component and calc tile size by this
also restrict detections to be no bigger than in classes.json
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
using System.Globalization;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
|
||||
namespace Azaion.Common.Controls;
|
||||
|
||||
public partial class NumericUpDown : UserControl
|
||||
{
|
||||
public static readonly DependencyProperty MinValueProperty = DependencyProperty.Register(
|
||||
nameof(MinValue), typeof(decimal), typeof(NumericUpDown), new PropertyMetadata(0m));
|
||||
|
||||
public static readonly DependencyProperty MaxValueProperty = DependencyProperty.Register(
|
||||
nameof(MaxValue), typeof(decimal), typeof(NumericUpDown), new PropertyMetadata(100m));
|
||||
|
||||
public static readonly DependencyProperty ValueProperty = DependencyProperty.Register(
|
||||
nameof(Value), typeof(decimal), typeof(NumericUpDown), new PropertyMetadata(10m, OnValueChanged));
|
||||
|
||||
public static readonly DependencyProperty StepProperty = DependencyProperty.Register(
|
||||
nameof(Step), typeof(decimal), typeof(NumericUpDown), new PropertyMetadata(1m));
|
||||
|
||||
public decimal MinValue
|
||||
{
|
||||
get => (decimal)GetValue(MinValueProperty);
|
||||
set => SetValue(MinValueProperty, value);
|
||||
}
|
||||
|
||||
public decimal MaxValue
|
||||
{
|
||||
get => (decimal)GetValue(MaxValueProperty);
|
||||
set => SetValue(MaxValueProperty, value);
|
||||
}
|
||||
|
||||
public decimal Value
|
||||
{
|
||||
get => (decimal)GetValue(ValueProperty);
|
||||
set => SetValue(ValueProperty, value);
|
||||
}
|
||||
|
||||
public decimal Step
|
||||
{
|
||||
get => (decimal)GetValue(StepProperty);
|
||||
set => SetValue(StepProperty, value);
|
||||
}
|
||||
|
||||
public NumericUpDown()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
if (d is NumericUpDown control)
|
||||
{
|
||||
control.NudTextBox.Text = ((decimal)e.NewValue).ToString(CultureInfo.InvariantCulture);
|
||||
control.NudTextBox.SelectionStart = control.NudTextBox.Text.Length;
|
||||
}
|
||||
}
|
||||
|
||||
private void NUDTextBox_OnTextChanged(object sender, TextChangedEventArgs e)
|
||||
{
|
||||
if (string.IsNullOrEmpty(NudTextBox.Text) || !decimal.TryParse(NudTextBox.Text, NumberStyles.Any, CultureInfo.InvariantCulture, out var number))
|
||||
{
|
||||
NudTextBox.Text = Value.ToString(CultureInfo.InvariantCulture);
|
||||
return;
|
||||
}
|
||||
if (number > MaxValue )
|
||||
{
|
||||
Value = MaxValue;
|
||||
NudTextBox.Text = MaxValue.ToString(CultureInfo.InvariantCulture);
|
||||
}
|
||||
else if (number < MinValue)
|
||||
{
|
||||
Value = MinValue;
|
||||
NudTextBox.Text = Value.ToString(CultureInfo.InvariantCulture);
|
||||
}
|
||||
else
|
||||
{
|
||||
Value = number;
|
||||
}
|
||||
|
||||
NudTextBox.SelectionStart = NudTextBox.Text.Length;
|
||||
}
|
||||
|
||||
private void NudButtonUp_OnClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var step = Step <= 0 ? 1m : Step;
|
||||
var newVal = Math.Min(MaxValue, Value + step);
|
||||
Value = newVal;
|
||||
NudTextBox.Text = Value.ToString(CultureInfo.InvariantCulture);
|
||||
NudTextBox.SelectionStart = NudTextBox.Text.Length;
|
||||
}
|
||||
|
||||
private void NudButtonDown_OnClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var step = Step <= 0 ? 1m : Step;
|
||||
var newVal = Math.Max(MinValue, Value - step);
|
||||
Value = newVal;
|
||||
NudTextBox.Text = Value.ToString(CultureInfo.InvariantCulture);
|
||||
NudTextBox.SelectionStart = NudTextBox.Text.Length;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user