Skip to content
117 changes: 117 additions & 0 deletions Mapping_Tools/Viewmodels/RadialDesignerVm.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using Mapping_Tools.Classes.SystemTools;
using Newtonsoft.Json;

namespace Mapping_Tools.Viewmodels {
public class RadialDesignerVm : BindableBase {
#region Properties

[JsonIgnore]
public string[] Paths {
get; set;
}

[JsonIgnore]
public bool Quick {
get; set;
}

private int copies;
public int Copies {
get => copies;
set => Set(ref copies, value);
}

private double distance;
public double Distance {
get => distance;
set => Set(ref distance, value);
}

private double localRotation;
public double LocalRotation {
get => localRotation;
set => Set(ref localRotation, value);
}

private double globalRotation;
public double GlobalRotation {
get => globalRotation;
set => Set(ref globalRotation, value);
}
private string importTimeCode;
public string ImportTimeCode {
get => importTimeCode;
set => Set(ref importTimeCode, value);
}

private string exportTimeCode;
public string ExportTimeCode {
get => exportTimeCode;
set => Set(ref exportTimeCode, value);
}

public enum ImportMode {
Selected,
Bookmarked,
Time,
Everything
}

private ImportMode importModeSetting;
public ImportMode ImportModeSetting {
get => importModeSetting;
set {
if (Set(ref importModeSetting, value)) {
RaisePropertyChanged(nameof(ImportTimeCodeBoxVisibility));
}
}
}

[JsonIgnore]
public IEnumerable<ImportMode> ImportModes => Enum.GetValues(typeof(ImportMode)).Cast<ImportMode>();

[JsonIgnore]
public Visibility ImportTimeCodeBoxVisibility =>
ImportModeSetting == ImportMode.Time ? Visibility.Visible : Visibility.Collapsed;

public enum ExportMode {
Auto,
Current,
Time,
}

private ExportMode exportModeSetting;
public ExportMode ExportModeSetting {
get => exportModeSetting;
set {
if (Set(ref exportModeSetting, value)) {
RaisePropertyChanged(nameof(ExportTimeCodeBoxVisibility));
}
}
}


[JsonIgnore]
public IEnumerable<ExportMode> ExportModes => Enum.GetValues(typeof(ExportMode)).Cast<ExportMode>();

[JsonIgnore]
public Visibility ExportTimeCodeBoxVisibility =>
ExportModeSetting == ExportMode.Time ? Visibility.Visible : Visibility.Collapsed;

#endregion

public RadialDesignerVm() {
Copies = 1;
Distance = 0;
LocalRotation = 0;
GlobalRotation = 0;

ImportModeSetting = ImportMode.Selected;
ImportTimeCode = "";
}
}
}
154 changes: 154 additions & 0 deletions Mapping_Tools/Views/RadialDesigner/RadialDesignerView.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
<local:SingleRunMappingTool x:Class="Mapping_Tools.Views.RadialDesigner.RadialDesignerView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Mapping_Tools.Views"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:objectVisualiser="clr-namespace:Mapping_Tools.Components.ObjectVisualiser"
xmlns:domain="clr-namespace:Mapping_Tools.Components.Domain"
mc:Ignorable="d"
x:Name="This"
d:DesignHeight="450" Width="800" d:DataContext="{d:DesignData RadialDesignerVM}">
<local:SingleRunMappingTool.Resources>
<domain:DoubleToStringConverter x:Key="DoubleToStringConverter"/>
<domain:TimeToStringConverter x:Key="TimeToStringConverter"/>
<domain:CircleSizeToThicknessConverter x:Key="CircleSizeToThicknessConverter"/>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
<domain:EnumToBoolConverter x:Key="EnumToBoolConverter"/>
</local:SingleRunMappingTool.Resources>
<Grid Name="MasterGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" MinWidth="200"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*" MinWidth="300"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid Name="FirstGrid" Grid.Column="0" Grid.Row="0" Margin="10">
<StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock FontSize="32" FontWeight="Bold" Foreground="{DynamicResource PrimaryHueMidBrush}">
<Run Text="Radial Designer"/>
</TextBlock>
<materialDesign:PopupBox Margin="10" VerticalAlignment="Bottom" ToolTip="Click me!">
<materialDesign:PopupBox.ToggleContent>
<materialDesign:PackIcon Kind="HelpCircle" Width="24" Height="24" Foreground="{DynamicResource SecondaryHueMidBrush}"/>
</materialDesign:PopupBox.ToggleContent>
<TextBlock TextWrapping="Wrap" MaxWidth="600" Padding="5">
Generate radial patterns by copying and rotating hit objects around a center point.
<LineBreak/>
Adjust the number of copies, distance, and rotation to create various circular patterns.
</TextBlock>
</materialDesign:PopupBox>
</StackPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>

<ComboBox Grid.Column="0" ItemsSource="{Binding ImportModes}" SelectedItem="{Binding ImportModeSetting}" Margin="0 0 5 0"
ToolTip="Object selection mode"
Style="{StaticResource MaterialDesignFloatingHintComboBox}"
materialDesign:HintAssist.Hint="Import mode"/>

<TextBox Grid.Column="1" Text="{Binding ImportTimeCode}" Visibility="{Binding ImportTimeCodeBoxVisibility}" Margin="5 0 5 2" Width="100"
materialDesign:HintAssist.Hint="Time code"
ToolTip="Input a time code here. Example: 01:23:456 (1,2) " />

<Button Grid.Column="2" Style="{StaticResource MaterialDesignRaisedButton}" Command="{Binding DummyCommand}" Margin="5 0 0 0"
ToolTip="Import sliders into the preview." HorizontalAlignment="Right" VerticalAlignment="Top">
Dummy
</Button>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>

<ComboBox Grid.Column="0" ItemsSource="{Binding ExportModes}" SelectedItem="{Binding ExportModeSetting}" Margin="0 0 5 0"
ToolTip="Determines where to put the pattern"
Style="{StaticResource MaterialDesignFloatingHintComboBox}"
materialDesign:HintAssist.Hint="Export mode"/>

<TextBox Grid.Column="1" Text="{Binding ExportTimeCode}" Visibility="{Binding ExportTimeCodeBoxVisibility}" Margin="5 0 5 2" Width="100"
materialDesign:HintAssist.Hint="Time code"
ToolTip="Input a time code here. Example: 01:23:456 (1,2) " />
</Grid>
<TextBlock Text="Copies" FontWeight="Bold" Margin="0,20,0,0"/>
<Slider Value="{Binding Copies, Mode=TwoWay}"
Minimum="1" Maximum="20"
TickFrequency="1"
IsSnapToTickEnabled="True"
Style="{StaticResource MaterialDesignDiscreteSlider}"
ToolTip="Number of copies to generate."
/>

<TextBlock Text="Distance" FontWeight="Bold" Margin="0,10,0,0"/>
<Slider Value="{Binding Distance, Mode=TwoWay}"
Minimum="0" Maximum="500"
Style="{StaticResource MaterialDesignDiscreteSlider}"
ToolTip="The distance between each copy."
/>

<TextBlock Text="Local Rotation" FontWeight="Bold" Margin="0,10,0,0"/>
<Slider Value="{Binding LocalRotation, Mode=TwoWay}"
Minimum="0" Maximum="360"
Style="{StaticResource MaterialDesignDiscreteSlider}"
ToolTip="Rotation applied locally to each copy."
/>

<TextBlock Text="Global Rotation" FontWeight="Bold" Margin="0,10,0,0"/>
<Slider Value="{Binding GlobalRotation, Mode=TwoWay}"
Minimum="0" Maximum="360"
Style="{StaticResource MaterialDesignDiscreteSlider}"
ToolTip="Overall rotation applied to the radial pattern."
/>
</StackPanel>
</Grid>

<GridSplitter Grid.Column="1" Grid.Row="0"
HorizontalAlignment="Center"
VerticalAlignment="Stretch"
Width="5"
Background="{DynamicResource MaterialDesignDivider}"
ShowsPreview="True"/>

<Grid Name="SecondGrid" Grid.Column="2" Grid.Row="0" Margin="10">
<materialDesign:Card Padding="10" ToolTip="Result preview">
<TextBlock Text="Placeholder" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</materialDesign:Card>
</Grid>

<Grid Name="BottomGrid" Grid.Row="1" Grid.ColumnSpan="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid Grid.Column="0">
<WrapPanel VerticalAlignment="Bottom">
<TextBlock TextWrapping="NoWrap" Text="Made by Ferro" FontWeight="Bold" Opacity="0.58"/>
</WrapPanel>
</Grid>
<Grid Grid.Column="1">
<ProgressBar Value="{Binding ElementName=This, Path=Progress}" Margin="20,0,20,0" Height="20" Background="{x:Null}" BorderBrush="{x:Null}"/>
</Grid>
</Grid>

<Viewbox VerticalAlignment="Bottom" HorizontalAlignment="Right" Width="70" Grid.ColumnSpan="3" Grid.Row="0" Margin="10">
<Button
IsEnabled="{Binding ElementName=This, Path=CanRun}"
Style="{StaticResource MaterialDesignFloatingActionButton}"
Click="Start_Click"
ToolTip="Run this tool.">
<materialDesign:PackIcon
Kind="Play" Height="36" Width="36" />
</Button>
</Viewbox>
</Grid>
</local:SingleRunMappingTool>
Loading