aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio
diff options
context:
space:
mode:
authorVictoria Plitt <Victoria.Plitt@twine-s.com>2022-03-01 14:19:50 +0200
committerVictoria Plitt <Victoria.Plitt@twine-s.com>2022-03-01 14:19:50 +0200
commit38052847502dd46b47269addae91aef0aa8fb747 (patch)
treeacb339261eb604991b71edfeb21e626e44a01a58 /Software/Visual_Studio
parent1f6b9e23c21b2f31781f4372378a965c109657ca (diff)
downloadTango-38052847502dd46b47269addae91aef0aa8fb747.tar.gz
Tango-38052847502dd46b47269addae91aef0aa8fb747.zip
Group Repeating - add logic in Dyeing.
Related Work Items: #6229
Diffstat (limited to 'Software/Visual_Studio')
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Controls/JobModelSummaryViewerControl.xaml119
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Controls/JobModelSummaryViewerControl.xaml.cs63
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Controls/JobSummeryViewer.xaml18
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Controls/JobSummeryViewer.xaml.cs7
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/ISegmentModel.cs4
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/JobModel.cs162
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/SegmentModel.cs54
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/SegmentsGroupModel.cs24
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Tango.PPC.JobsV2.csproj9
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/AddNewSegmentCommand.cs7
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/CopySegmentCommand.cs23
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/DeleteSegmentsGroupCommand.cs24
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/PasteSegmentsCommand.cs61
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/RemoveSegmentsCommand.cs43
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/RepeatCommand.cs69
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/ReverseCommand.cs43
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/UnGroupSegmentsCommand.cs31
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/ViewModels/JobSummeryViewVM.cs1
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/ViewModels/JobViewVM.cs291
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/ViewModels/JobsViewVM.cs2
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobSummeryView.xaml2
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobView.xaml14
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobsView.xaml13
-rw-r--r--Software/Visual_Studio/Tango.BL/Builders/JobBuilder.cs8
-rw-r--r--Software/Visual_Studio/Tango.BL/Builders/JobsCollectionBuilder.cs11
-rw-r--r--Software/Visual_Studio/Tango.BL/Builders/MachineBuilder.cs2
-rw-r--r--Software/Visual_Studio/Tango.BL/Entities/Job.cs157
-rw-r--r--Software/Visual_Studio/Tango.BL/Entities/Segment.cs19
-rw-r--r--Software/Visual_Studio/Tango.BL/Entities/SegmentsGroup.cs86
-rw-r--r--Software/Visual_Studio/Tango.BL/Interfaces/ISegment.cs16
-rw-r--r--Software/Visual_Studio/Tango.ColorConversion/DefaultColorConverter.cs6
-rw-r--r--Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs62
-rw-r--r--Software/Visual_Studio/Utilities/Tango.JobProgressTester.UI/MainWindowVM.cs1
33 files changed, 1128 insertions, 324 deletions
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Controls/JobModelSummaryViewerControl.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Controls/JobModelSummaryViewerControl.xaml
new file mode 100644
index 000000000..e7be33574
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Controls/JobModelSummaryViewerControl.xaml
@@ -0,0 +1,119 @@
+<UserControl x:Class="Tango.PPC.Jobs.Controls.JobModelSummaryViewerControl"
+ 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:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI"
+ xmlns:enumerations="clr-namespace:Tango.BL.Enumerations;assembly=Tango.BL"
+ xmlns:entities="clr-namespace:Tango.BL.Entities;assembly=Tango.BL"
+ xmlns:local="clr-namespace:Tango.PPC.Jobs.Controls"
+ mc:Ignorable="d"
+ d:DesignHeight="60" d:DesignWidth="500" Height="38" x:Name="control">
+ <Grid>
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="1*"/>
+ <ColumnDefinition Width="Auto"/>
+ </Grid.ColumnDefinitions>
+ <Grid>
+ <Grid.RowDefinitions>
+ <RowDefinition Height="Auto" />
+ <RowDefinition Height="1*" />
+ </Grid.RowDefinitions>
+
+ <ItemsControl ClipToBounds="False" ItemsSource="{Binding ElementName=control,Path=JobModel.EffectiveSegments}" Visibility="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DisplayMarkers,Converter={StaticResource BooleanToVisibilityConverter}}">
+ <ItemsControl.ItemsPanel>
+ <ItemsPanelTemplate>
+ <StackPanel Orientation="Horizontal" ClipToBounds="False"></StackPanel>
+ </ItemsPanelTemplate>
+ </ItemsControl.ItemsPanel>
+ <ItemsControl.ItemTemplate>
+ <DataTemplate>
+ <Grid x:Name="grid">
+ <Grid.Width>
+ <MultiBinding Converter="{StaticResource SegmentLengthToWidthConverter}">
+ <Binding RelativeSource="{RelativeSource AncestorType=UserControl}" Path="JobModel.Length"></Binding>
+ <Binding RelativeSource="{RelativeSource AncestorType=ItemsControl}" Path="ActualWidth"></Binding>
+ <Binding Path="LengthWithInterSegment"></Binding>
+ </MultiBinding>
+ </Grid.Width>
+
+ <DockPanel HorizontalAlignment="Center" TextElement.FontSize="{StaticResource TangoSmallFontSize}">
+ <DockPanel.Style>
+ <Style TargetType="DockPanel">
+ <Setter Property="Visibility" Value="Visible"></Setter>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding ElementName=grid,Path=ActualWidth,Converter={StaticResource SmallerThanToBooleanConverter},ConverterParameter=20}" Value="True">
+ <Setter Property="Visibility" Value="Collapsed"></Setter>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </DockPanel.Style>
+ <controls:FastTextBlock Text="{Binding LengthWithInterSegment,Mode=OneWay,StringFormat=N0}" />
+ <controls:FastTextBlock Text="m" />
+ </DockPanel>
+ </Grid>
+ </DataTemplate>
+ </ItemsControl.ItemTemplate>
+ </ItemsControl>
+
+ <Border Grid.Row="1" x:Name="brush_border" ClipToBounds="False" CornerRadius="10" Margin="0 5 0 0">
+ <Border.Clip>
+ <RectangleGeometry RadiusX="10" RadiusY="10">
+ <RectangleGeometry.Rect>
+ <MultiBinding Converter="{StaticResource WidthHeightToRectConverter}">
+ <Binding ElementName="brush_border" Path="ActualWidth" />
+ <Binding ElementName="brush_border" Path="ActualHeight" />
+ </MultiBinding>
+ </RectangleGeometry.Rect>
+ </RectangleGeometry>
+ </Border.Clip>
+ <Grid>
+ <ItemsControl ClipToBounds="False" ItemsSource="{Binding ElementName=control,Path=JobModel.EffectiveSegments}">
+ <ItemsControl.ItemsPanel>
+ <ItemsPanelTemplate>
+ <StackPanel Orientation="Horizontal" ClipToBounds="False"></StackPanel>
+ </ItemsPanelTemplate>
+ </ItemsControl.ItemsPanel>
+ <ItemsControl.ItemTemplate>
+ <DataTemplate>
+ <Grid>
+ <Grid.Width>
+ <MultiBinding Converter="{StaticResource SegmentLengthToWidthConverter}">
+ <Binding RelativeSource="{RelativeSource AncestorType=UserControl}" Path="JobModel.Length"></Binding>
+ <Binding RelativeSource="{RelativeSource AncestorType=ItemsControl}" Path="ActualWidth"></Binding>
+ <Binding Path="LengthWithInterSegment"></Binding>
+ </MultiBinding>
+ </Grid.Width>
+ <Rectangle Fill="{Binding SegmentBrush}"></Rectangle>
+ </Grid>
+ </DataTemplate>
+ </ItemsControl.ItemTemplate>
+ </ItemsControl>
+
+ <Rectangle Stroke="{StaticResource TangoGrayBrush}" StrokeThickness="1" StrokeDashArray="5 5 5 5" RadiusX="8" RadiusY="8" />
+ </Grid>
+ </Border>
+ </Grid>
+
+ <Grid Grid.Column="1" VerticalAlignment="Bottom">
+ <Grid.Style>
+ <Style TargetType="Grid">
+ <Setter Property="Visibility" Value="Collapsed"></Setter>
+ <Style.Triggers>
+ <MultiDataTrigger>
+ <MultiDataTrigger.Conditions>
+ <Condition Binding="{Binding ElementName=control,Path=JobModel.JobType}" Value="{x:Static enumerations:JobTypes.Embroidery}" />
+ <Condition Binding="{Binding ElementName=control,Path=IsActive}" Value="False" />
+ </MultiDataTrigger.Conditions>
+ <Setter Property="Visibility" Value="Visible"></Setter>
+ </MultiDataTrigger>
+ </Style.Triggers>
+ </Style>
+ </Grid.Style>
+
+ <TextBlock Margin="10 0 0 -2" VerticalAlignment="Center" FontSize="{StaticResource TangoTitleFontSize}">
+ <Run Text="x"></Run><Run Text="{Binding ElementName=control,Path=JobModel.NumberOfUnits}"></Run>
+ </TextBlock>
+ </Grid>
+ </Grid>
+</UserControl>
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Controls/JobModelSummaryViewerControl.xaml.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Controls/JobModelSummaryViewerControl.xaml.cs
new file mode 100644
index 000000000..5bc74e046
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Controls/JobModelSummaryViewerControl.xaml.cs
@@ -0,0 +1,63 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using Tango.BL.Entities;
+using Tango.PPC.Jobs.Models;
+
+namespace Tango.PPC.Jobs.Controls
+{
+ /// <summary>
+ /// Interaction logic for JobModelSummaryViewerControl.xaml
+ /// </summary>
+ public partial class JobModelSummaryViewerControl : UserControl
+ {
+ /// <summary>
+ /// Gets or sets the job.
+ /// </summary>
+ public JobModel JobModel
+ {
+ get { return (JobModel)GetValue(JobProperty); }
+ set { SetValue(JobProperty, value); }
+ }
+ public static readonly DependencyProperty JobProperty =
+ DependencyProperty.Register("JobModel", typeof(JobModel), typeof(JobModelSummaryViewerControl), new PropertyMetadata(null));
+
+ /// <summary>
+ /// Maybe not necessary!
+ /// </summary>
+ public bool IsActive
+ {
+ get { return (bool)GetValue(IsActiveProperty); }
+ set { SetValue(IsActiveProperty, value); }
+ }
+ public static readonly DependencyProperty IsActiveProperty =
+ DependencyProperty.Register("IsActive", typeof(bool), typeof(JobModelSummaryViewerControl), new PropertyMetadata(false));
+
+ /// <summary>
+ /// Gets or sets a value indicating whether to display summery markers.
+ /// </summary>
+ public bool DisplayMarkers
+ {
+ get { return (bool)GetValue(DisplayMarkersProperty); }
+ set { SetValue(DisplayMarkersProperty, value); }
+ }
+ public static readonly DependencyProperty DisplayMarkersProperty =
+ DependencyProperty.Register("DisplayMarkers", typeof(bool), typeof(JobModelSummaryViewerControl), new PropertyMetadata(true));
+
+ public JobModelSummaryViewerControl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Controls/JobSummeryViewer.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Controls/JobSummeryViewer.xaml
index 8c84777a3..bd0bbfd11 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Controls/JobSummeryViewer.xaml
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Controls/JobSummeryViewer.xaml
@@ -21,7 +21,7 @@
<RowDefinition Height="1*" />
</Grid.RowDefinitions>
- <ItemsControl ClipToBounds="False" ItemsSource="{Binding ElementName=control,Path=JobModel.EffectiveSegments}" Visibility="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DisplayMarkers,Converter={StaticResource BooleanToVisibilityConverter}}">
+ <ItemsControl ClipToBounds="False" ItemsSource="{Binding ElementName=control,Path=Job.EffectiveSegments}" Visibility="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DisplayMarkers,Converter={StaticResource BooleanToVisibilityConverter}}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" ClipToBounds="False"></StackPanel>
@@ -32,9 +32,9 @@
<Grid x:Name="grid">
<Grid.Width>
<MultiBinding Converter="{StaticResource SegmentLengthToWidthConverter}">
- <Binding RelativeSource="{RelativeSource AncestorType=UserControl}" Path="JobModel.Length"></Binding>
+ <Binding RelativeSource="{RelativeSource AncestorType=UserControl}" Path="Job.Length"></Binding>
<Binding RelativeSource="{RelativeSource AncestorType=ItemsControl}" Path="ActualWidth"></Binding>
- <Binding Path="LengthWithInterSegment"></Binding>
+ <Binding Path="LengthWithFactor"></Binding>
</MultiBinding>
</Grid.Width>
@@ -49,7 +49,7 @@
</Style.Triggers>
</Style>
</DockPanel.Style>
- <controls:FastTextBlock Text="{Binding LengthWithInterSegment,Mode=OneWay,StringFormat=N0}" />
+ <controls:FastTextBlock Text="{Binding LengthWithFactor,Mode=OneWay,StringFormat=N0}" />
<controls:FastTextBlock Text="m" />
</DockPanel>
</Grid>
@@ -69,7 +69,7 @@
</RectangleGeometry>
</Border.Clip>
<Grid>
- <ItemsControl ClipToBounds="False" ItemsSource="{Binding ElementName=control,Path=JobModel.EffectiveSegments}">
+ <ItemsControl ClipToBounds="False" ItemsSource="{Binding ElementName=control,Path=Job.EffectiveSegments}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" ClipToBounds="False"></StackPanel>
@@ -80,9 +80,9 @@
<Grid>
<Grid.Width>
<MultiBinding Converter="{StaticResource SegmentLengthToWidthConverter}">
- <Binding RelativeSource="{RelativeSource AncestorType=UserControl}" Path="JobModel.Length"></Binding>
+ <Binding RelativeSource="{RelativeSource AncestorType=UserControl}" Path="Job.Length"></Binding>
<Binding RelativeSource="{RelativeSource AncestorType=ItemsControl}" Path="ActualWidth"></Binding>
- <Binding Path="LengthWithInterSegment"></Binding>
+ <Binding Path="LengthWithFactor"></Binding>
</MultiBinding>
</Grid.Width>
<Rectangle Fill="{Binding SegmentBrush}"></Rectangle>
@@ -103,7 +103,7 @@
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
- <Condition Binding="{Binding ElementName=control,Path=JobModel.JobType}" Value="{x:Static enumerations:JobTypes.Embroidery}" />
+ <Condition Binding="{Binding ElementName=control,Path=Job.JobType}" Value="{x:Static enumerations:JobTypes.Embroidery}" />
<Condition Binding="{Binding ElementName=control,Path=IsActive}" Value="False" />
</MultiDataTrigger.Conditions>
<Setter Property="Visibility" Value="Visible"></Setter>
@@ -113,7 +113,7 @@
</Grid.Style>
<TextBlock Margin="10 0 0 -2" VerticalAlignment="Center" FontSize="{StaticResource TangoTitleFontSize}">
- <Run Text="x"></Run><Run Text="{Binding ElementName=control,Path=JobModel.NumberOfUnits}"></Run>
+ <Run Text="x"></Run><Run Text="{Binding ElementName=control,Path=Job.NumberOfUnits}"></Run>
</TextBlock>
</Grid>
</Grid>
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Controls/JobSummeryViewer.xaml.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Controls/JobSummeryViewer.xaml.cs
index 121be0477..c977e71d0 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Controls/JobSummeryViewer.xaml.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Controls/JobSummeryViewer.xaml.cs
@@ -13,7 +13,6 @@ using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Tango.BL.Entities;
-using Tango.PPC.Jobs.Models;
namespace Tango.PPC.Jobs.Controls
{
@@ -28,13 +27,13 @@ namespace Tango.PPC.Jobs.Controls
/// <summary>
/// Gets or sets the job.
/// </summary>
- public JobModel JobModel
+ public Job Job
{
- get { return (JobModel)GetValue(JobProperty); }
+ get { return (Job)GetValue(JobProperty); }
set { SetValue(JobProperty, value); }
}
public static readonly DependencyProperty JobProperty =
- DependencyProperty.Register("JobModel", typeof(JobModel), typeof(JobSummeryViewer), new PropertyMetadata(null));
+ DependencyProperty.Register("Job", typeof(Job), typeof(JobSummeryViewer), new PropertyMetadata(null));
/// <summary>
/// Maybe not necessary!
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/ISegmentModel.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/ISegmentModel.cs
index 85e280c6e..e97d1342c 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/ISegmentModel.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/ISegmentModel.cs
@@ -18,5 +18,7 @@ namespace Tango.PPC.Jobs.Models
double InterSegmentLength { get; }
bool EnableInterSegment { get; set; }
bool ShowGap { get; }
-}
+
+ ISegmentModel Clone();
+ }
}
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/JobModel.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/JobModel.cs
index 0d6855c40..fdb06ac3e 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/JobModel.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/JobModel.cs
@@ -340,6 +340,29 @@ namespace Tango.PPC.Jobs.Models
}
}
+ protected SynchronizedObservableCollection<SegmentsGroupModel> _segmentsGroups;
+
+ /// <summary>
+ /// Gets or sets the JobModel segments.
+ /// </summary>
+
+ public SynchronizedObservableCollection<SegmentsGroupModel> SegmentsGroups
+ {
+ get
+ {
+ return _segmentsGroups;
+ }
+ set
+ {
+ if (_segmentsGroups != value)
+ {
+ _segmentsGroups = value;
+ RaisePropertyChangedAuto();
+
+ }
+ }
+ }
+
private bool _enableintersegment;
public bool EnableInterSegment
{
@@ -403,10 +426,10 @@ namespace Tango.PPC.Jobs.Models
public bool HasSelectedItems
{
get {
- //bool test = Segments.ToList().Any(x => x.IsSelected);
- return Segments.ToList().Any(x => x.IsSelected); }
+ return GroupingSegments.Any(x => x.IsSelected);
+ }
}
- public List<SegmentModel> SegmentsToCopy { get; set; }
+ public List<ISegmentModel> SegmentsToCopy { get; set; }
public TimeSpan GetEstimatedDuration
{
@@ -439,8 +462,9 @@ namespace Tango.PPC.Jobs.Models
{
ColorSpacesList = list;
_segments = new SynchronizedObservableCollection<SegmentModel>();
+ _segmentsGroups = new SynchronizedObservableCollection<SegmentsGroupModel>();
_groupingSegments = new SynchronizedObservableCollection<ISegmentModel>();
- SegmentsToCopy = new List<SegmentModel>();
+ SegmentsToCopy = new List<ISegmentModel>();
_effectiveSegments = new ObservableCollection<SegmentModel>();
Segments.CollectionChanged -= Segments_CollectionChanged;
@@ -459,43 +483,79 @@ namespace Tango.PPC.Jobs.Models
LoadGroupingSegments();
}
+ /// <summary>
+ /// Gets the ordered segments with groups.
+ /// </summary>
+ /// <value>
+ /// The ordered segments with groups.
+ /// </value>
+ public List<ISegmentModel> OrderedSegmentsWithGroups
+ {
+ get
+ {
+ if (Segments == null)
+ return null;
+ List<ISegmentModel> orderedSegmentsWithGroups = new List<ISegmentModel>();
+
+ orderedSegmentsWithGroups.AddRange(Segments.Where(x => x.SegmentsGroupModel == null));
+ orderedSegmentsWithGroups.AddRange(SegmentsGroups);
+ return orderedSegmentsWithGroups.OrderBy(x => x.SegmentIndex).ToList();
+ }
+ }
+
+ /// <summary>
+ /// Loads the grouping segments.
+ /// </summary>
public void LoadGroupingSegments()
{
_groupingSegments.Clear();
- var groupedList = Segments.Where(x => x.GroupID >0).Select(grp => grp.SegmentsGroupModel).Distinct().ToList();//List<SegmentsGroupModel>
- int ID = 1;
- groupedList.ForEach(x => x.SegmentIndex = ID++);
+ //List<ISegmentModel> segmentsWithGroups = new List<ISegmentModel>();
- Dictionary<int, SegmentsGroupModel> groupIDToSegmentsGroup = new Dictionary<int, SegmentsGroupModel>();
- foreach (var group in groupedList)
- {
- var groupID = group.SegmentIndex;
- groupIDToSegmentsGroup[groupID] = group;
- };
- int currentIndex = 1;
- foreach (var segment in Segments)
+ //segmentsWithGroups.AddRange(Segments.Where(x => x.SegmentsGroupModel == null));
+ //segmentsWithGroups.AddRange(SegmentsGroups);
+ OrderedSegmentsWithGroups.ForEach(x => _groupingSegments.Add(x));
+
+ if (_groupingSegments.Count > 0)
+ _groupingSegments.Last().IsLast = true;
+ RaisePropertyChanged(nameof(GroupingSegments));
+ }
+
+ /// <summary>
+ /// Arranges the segment indixes in groups.
+ /// </summary>
+ public void ArrangeSegmentIndixesInGroups()
+ {
+ foreach (var group in SegmentsGroups)
{
- if (!segment.IsGroupSegment)
+ int index = 1;
+ foreach (var segm in Segments)
{
- segment.SegmentIndex = currentIndex;
- _groupingSegments.Add(segment);
+ segm.SegmentIndex = index;
+ index++;
}
- else
- {
- SegmentsGroupModel segmentsGroup;
- if (groupIDToSegmentsGroup.TryGetValue(segment.GroupID, out segmentsGroup))
- {
- _groupingSegments.Add(segmentsGroup);
- segmentsGroup.SegmentIndex = currentIndex;
- groupIDToSegmentsGroup.Remove(segment.GroupID);
- }
- }
- currentIndex++;
}
- if(_groupingSegments.Count > 0)
- _groupingSegments.Last().IsLast = true;
- RaisePropertyChanged(nameof(GroupingSegments));
}
+
+ /// <summary>
+ /// Arranges the segments indixes.
+ /// </summary>
+ public void ArrangeSegmentsIndixes()
+ {
+ int index = 1;
+ int count = GroupingSegments.Count();
+ ArrangeSegmentIndixesInGroups();
+ foreach (var segment in GroupingSegments)
+ {
+ segment.IsLast = (index == count) ? true : false;
+ segment.SegmentIndex = index++;
+ }
+ }
+
+ /// <summary>
+ /// Creates the inter segment.
+ /// </summary>
+ /// <param name="length">The length.</param>
+ /// <returns></returns>
public static SegmentModel CreateInterSegment(double length)
{
SegmentModel segment = new SegmentModel()
@@ -512,6 +572,12 @@ namespace Tango.PPC.Jobs.Models
return segment;
}
+ /// <summary>
+ /// Adds the new segment.
+ /// </summary>
+ /// <param name="length">The length.</param>
+ /// <param name="segmentIndex">Index of the segment.</param>
+ /// <returns></returns>
public SegmentModel AddNewSegment( double length, Int32 segmentIndex)
{
SegmentModel segment = new SegmentModel();
@@ -522,15 +588,15 @@ namespace Tango.PPC.Jobs.Models
segment.Job = this;
segment.EnableInterSegment = InterSegmentLength > 0;
- if(segmentIndex < Segments.Count)
+ Segments.Add(segment);
+ if (segmentIndex < GroupingSegments.Count())
{
- Segments.Insert(segmentIndex,segment);
+ GroupingSegments.Insert(segmentIndex , segment);
}
else
- Segments.Add(segment);
-
- LoadGroupingSegments();
-
+ GroupingSegments.Add(segment);
+ ArrangeSegmentsIndixes();
+
return segment;
}
@@ -546,7 +612,7 @@ namespace Tango.PPC.Jobs.Models
private void UpdateEffectiveSegments()
{
- if (IsAllSegmentsPerSpool)
+ if (EnableInterSegment && IsAllSegmentsPerSpool)
{
int max = GroupingSegments.Count > 0 ? GroupingSegments.Max(x => x.SegmentIndex) : 0;
@@ -577,7 +643,7 @@ namespace Tango.PPC.Jobs.Models
//}
//else
effectiveSegments.Add(segments[i]);
- if (EnableInterSegment && i < segments.Count && repeats < segmentsGroup.Repeats)
+ if (EnableInterSegment && !(repeats == (segmentsGroup.Repeats - 1) && i == (segments.Count - 1)))
{
effectiveSegments.Add(CreateInterSegment(InterSegmentLength));
}
@@ -593,12 +659,13 @@ namespace Tango.PPC.Jobs.Models
}
else
{
+ ObservableCollection<SegmentModel> effectiveSegments = new ObservableCollection<SegmentModel>();
foreach (var s in GroupingSegments.OrderBy(x => x.SegmentIndex))
{
if (s is SegmentModel)
{
SegmentModel segment = s as SegmentModel;
- _effectiveSegments.Add(segment);
+ effectiveSegments.Add(segment);
}
else if (s is SegmentsGroupModel)
{
@@ -608,16 +675,17 @@ namespace Tango.PPC.Jobs.Models
{
for (int i = 0; i < segments.Count; i++)
{
- if (repeats > 0)
- {
- _effectiveSegments.Add(segments[i].Clone());
- }
- else
- _effectiveSegments.Add(segments[i]);
+ //if (repeats > 0)
+ //{
+ // effectiveSegments.Add(segments[i].Clone());
+ //}
+ //else
+ effectiveSegments.Add(segments[i]);
}
}
}
}
+ _effectiveSegments = effectiveSegments;
}
RaisePropertyChanged(nameof(EffectiveSegments));
}
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/SegmentModel.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/SegmentModel.cs
index 2b3bce545..e1a9a95f2 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/SegmentModel.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/SegmentModel.cs
@@ -27,14 +27,7 @@ namespace Tango.PPC.Jobs.Models
#region Properties
public string GUID { get; set; }
-
- public int GroupID {
- get
- {
- return SegmentsGroupModel == null ? -1 : SegmentsGroupModel.SegmentIndex;
- }
- }
-
+
protected String _name;
/// <summary>
/// Gets or sets the SegmentModel name.
@@ -55,11 +48,11 @@ namespace Tango.PPC.Jobs.Models
}
}
}
- protected Double _length;
+ protected double _length;
/// <summary>
/// Gets or sets the length.
/// </summary>
- public Double Length
+ public double Length
{
get
{
@@ -460,6 +453,8 @@ namespace Tango.PPC.Jobs.Models
public RelayCommand DeleteGapCommand { get; set; }
#endregion
+ #region construction
+
public SegmentModel(JobModel jobModel, string guid)
{
InitnewSegment();
@@ -475,6 +470,8 @@ namespace Tango.PPC.Jobs.Models
InitnewSegment();
}
+ #endregion
+
public void InitnewSegment()
{
BrushStops = new SynchronizedObservableCollection<BrushStopModel>();
@@ -490,6 +487,7 @@ namespace Tango.PPC.Jobs.Models
AddGapCommand = new RelayCommand(x => AddGap());
DeleteGapCommand = new RelayCommand(x => DeleteGap());
}
+
#region Public Methods
/// <summary>
@@ -532,6 +530,10 @@ namespace Tango.PPC.Jobs.Models
}
}
+ /// <summary>
+ /// Clones this instance.
+ /// </summary>
+ /// <returns></returns>
public SegmentModel Clone()
{
var cloned = new SegmentModel(Job, GUID);//(SegmentModel)Activator.CreateInstance(typeof(SegmentModel), this.Job);
@@ -553,6 +555,11 @@ namespace Tango.PPC.Jobs.Models
return cloned;
}
+ ISegmentModel ISegmentModel.Clone()
+ {
+ return Clone() as ISegmentModel;
+ }
+
public static SegmentModel CreateInterSegment(double length)
{
return new SegmentModel()
@@ -674,6 +681,31 @@ namespace Tango.PPC.Jobs.Models
else if (BrushStops.Count > 1)
BrushStops.ToList().ForEach(x => x.Position = (BrushStopModel.PositionStatus)x.StopIndex);
}
+
+ public void SwapBrushStops()
+ {
+ if (BrushStops.Count > 1)
+ {
+ int index = 0;
+ int lastIndex = BrushStops.Count - 1;
+ for (; index < lastIndex; index++, lastIndex--)
+ {
+ var left_temp = BrushStops[index];
+ var right_stopIndex = BrushStops[lastIndex].StopIndex;
+ var right_offsetPercent = BrushStops[lastIndex].OffsetPercent;
+
+ BrushStops[index] = BrushStops[lastIndex];
+ BrushStops[index].StopIndex = left_temp.StopIndex;
+ BrushStops[index].OffsetPercent = left_temp.OffsetPercent;
+ BrushStops[lastIndex] = left_temp;
+ BrushStops[lastIndex].StopIndex = right_stopIndex;
+ BrushStops[lastIndex].OffsetPercent = right_offsetPercent;
+ }
+ ArrangeBrushStopsIndexes();
+ UpdateMiddleColorBrush();
+ }
+ }
+
#endregion
#region Brush Stops Collection Changed
@@ -764,7 +796,7 @@ namespace Tango.PPC.Jobs.Models
{
EnableInterSegment = false;
}
-
+
#endregion
}
}
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/SegmentsGroupModel.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/SegmentsGroupModel.cs
index 153b93e8f..57f742b67 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/SegmentsGroupModel.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/SegmentsGroupModel.cs
@@ -188,5 +188,29 @@ namespace Tango.PPC.Jobs.Models
Repeats = 1;
EnableInterSegment = jobModel.EnableInterSegment;
}
+
+ /// <summary>
+ /// Clones this instance.
+ /// </summary>
+ /// <returns></returns>
+ public SegmentsGroupModel Clone()
+ {
+ SegmentsGroupModel cloned = new SegmentsGroupModel(this.Job);
+ cloned.SegmentIndex = this.SegmentIndex;
+
+ cloned.Segments = Segments.Select(x => x.Clone()).ToSynchronizedObservableCollection();
+
+ foreach (var stop in cloned.Segments)
+ {
+ stop.SegmentsGroupModel= cloned;
+ }
+
+ return cloned;
+ }
+
+ ISegmentModel ISegmentModel.Clone()
+ {
+ return Clone() as ISegmentModel;
+ }
}
}
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Tango.PPC.JobsV2.csproj b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Tango.PPC.JobsV2.csproj
index fb15b9182..dc79f92df 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Tango.PPC.JobsV2.csproj
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Tango.PPC.JobsV2.csproj
@@ -76,6 +76,10 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
+ <Page Include="Controls\JobModelSummaryViewerControl.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Page>
<Page Include="Controls\RunningJobViewer.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
@@ -187,6 +191,9 @@
</Compile>
<Compile Include="AppButtons\StartPrintingButton.cs" />
<Compile Include="AppButtons\StopPrintingButton.cs" />
+ <Compile Include="Controls\JobModelSummaryViewerControl.xaml.cs">
+ <DependentUpon>JobModelSummaryViewerControl.xaml</DependentUpon>
+ </Compile>
<Compile Include="Controls\JobOutlineControl.cs" />
<Compile Include="Controls\RunningJobViewer.xaml.cs">
<DependentUpon>RunningJobViewer.xaml</DependentUpon>
@@ -655,7 +662,7 @@
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ProjectExtensions>
<VisualStudio>
- <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" />
+ <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" />
</VisualStudio>
</ProjectExtensions>
</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/AddNewSegmentCommand.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/AddNewSegmentCommand.cs
index 60128b7d4..c8dff948c 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/AddNewSegmentCommand.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/AddNewSegmentCommand.cs
@@ -14,10 +14,10 @@ namespace Tango.PPC.Jobs.UndoRedoCommands
private int _index;
private double _defaultLength;
- public AddNewSegmentCommand(JobModel job, Int32 segmentIndex, double defaultLength)
+ public AddNewSegmentCommand(JobModel job, ISegmentModel segment, double defaultLength)
{
_jobModel = job;
- _index = segmentIndex;
+ _index = segment.SegmentIndex;
_defaultLength = defaultLength;
}
@@ -29,6 +29,9 @@ namespace Tango.PPC.Jobs.UndoRedoCommands
public void UnExecute()
{
_jobModel.Segments.Remove(_newSegment);
+ _jobModel.GroupingSegments.Remove(_newSegment);
+ _jobModel.ArrangeSegmentsIndixes();
+
}
}
}
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/CopySegmentCommand.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/CopySegmentCommand.cs
index e82e10e49..fbda54cfd 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/CopySegmentCommand.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/CopySegmentCommand.cs
@@ -18,30 +18,15 @@ namespace Tango.PPC.Jobs.UndoRedoCommands
}
public void Execute()
{
+ _jobModel.SegmentsToCopy.Clear();
+
if (false == _jobModel.Segments.ToList().Any(x => x.IsSelected))
return;
//LogManager.Log("Copy selected segments.");
- int additionalGroupIndex = 1;
foreach (var segment in _jobModel.GroupingSegments.Where(i => i.IsSelected).ToList())
{
- if (segment is SegmentModel)
- {
- SegmentModel newSegmentModel = ((SegmentModel)segment).Clone();
- _jobModel.SegmentsToCopy.Add(newSegmentModel);
- }
- else if (segment is SegmentsGroupModel)
- {
- SegmentsGroupModel group = (SegmentsGroupModel)segment;
- List<SegmentModel> copysegments = new List<SegmentModel>();
- foreach (var segm in group.Segments)
- {
- SegmentModel newSegmentModel = segm.Clone();
- copysegments.Add(newSegmentModel);
- }
- SegmentsGroupModel newgroup = new SegmentsGroupModel(_jobModel, copysegments) { SegmentIndex = (_jobModel.LastGroupID + additionalGroupIndex++) };
- copysegments.ForEach(x => { x.SegmentsGroupModel = newgroup; x.IsSelected = false; });
- _jobModel.SegmentsToCopy.AddRange(copysegments);
- }
+ segment.IsSelected = false;
+ _jobModel.SegmentsToCopy.Add(segment.Clone());
}
}
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/DeleteSegmentsGroupCommand.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/DeleteSegmentsGroupCommand.cs
index 83536825b..4b95d9bd7 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/DeleteSegmentsGroupCommand.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/DeleteSegmentsGroupCommand.cs
@@ -11,38 +11,40 @@ namespace Tango.PPC.Jobs.UndoRedoCommands
{
private JobModel _jobModel;
private SegmentsGroupModel _segmentsGroup;
+ private int _index;
public DeleteSegmentsGroupCommand(JobModel job, SegmentsGroupModel segmentsGroup)
{
_jobModel = job;
_segmentsGroup = segmentsGroup;
+ _index = _jobModel.GroupingSegments.IndexOf(_segmentsGroup);
}
public void Execute()
{
+ _jobModel.SegmentsGroups.Remove(_segmentsGroup);
foreach (var obj in _segmentsGroup.Segments)
{
_jobModel.Segments.Remove(obj);
}
_jobModel.GroupingSegments.Remove(_segmentsGroup);
- _jobModel.LoadGroupingSegments();
+ _jobModel.ArrangeSegmentsIndixes();
}
public void UnExecute()
{
- int firstIndex = _segmentsGroup.FirstSegmentIndex;
+ if (_jobModel.GroupingSegments.Count <= _index)
+ _jobModel.GroupingSegments.Add(_segmentsGroup);
+ else
+ {
+ _jobModel.GroupingSegments.Insert(_index, _segmentsGroup);
+ }
+ _jobModel.SegmentsGroups.Add(_segmentsGroup);
foreach (var obj in _segmentsGroup.Segments)
{
- if (_jobModel.Segments.Count < firstIndex)
- _jobModel.Segments.Add(obj);
- else
- {
- _jobModel.Segments.Insert((firstIndex-1), obj);
- firstIndex++;
- }
+ _jobModel.Segments.Add(obj);
}
- _jobModel.LoadGroupingSegments();
+ _jobModel.ArrangeSegmentsIndixes();
}
-
}
}
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/PasteSegmentsCommand.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/PasteSegmentsCommand.cs
index 73bcf3f22..827d3debd 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/PasteSegmentsCommand.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/PasteSegmentsCommand.cs
@@ -10,15 +10,15 @@ namespace Tango.PPC.Jobs.UndoRedoCommands
public class PasteSegmentsCommand : IUndoRedoCommand
{
private JobModel _jobModel;
- public List<SegmentModel> SegmentsToCopy { get; set; }
+ public List<ISegmentModel> SegmentsToCopy { get; set; }
public int _selectedIndex;
public PasteSegmentsCommand(JobModel jobModel)
{
_jobModel = jobModel;
- SegmentsToCopy = new List<SegmentModel>(_jobModel.SegmentsToCopy);
- _selectedIndex = _jobModel.Segments.OrderBy(x => x.SegmentIndex).ToList().FindIndex(x => x.IsSelected);
+ SegmentsToCopy = new List<ISegmentModel>(_jobModel.SegmentsToCopy);
+ _selectedIndex = _jobModel.GroupingSegments.OrderBy(x => x.SegmentIndex).ToList().FindIndex(x => x.IsSelected);
}
public void Execute()
@@ -27,13 +27,26 @@ namespace Tango.PPC.Jobs.UndoRedoCommands
{
return;
}
- SegmentsToCopy.ForEach(x => x.RaiseSegmentBrushChanged());
+ // SegmentsToCopy.ForEach(x => x.RaiseSegmentBrushChanged());
- if (_selectedIndex == -1 || _selectedIndex == (_jobModel.Segments.Count) - 1)
+ if (_selectedIndex == -1 || _selectedIndex == (_jobModel.GroupingSegments.Count) - 1)
{
foreach (var newSegmentModel in SegmentsToCopy)
{
- _jobModel.Segments.Add(newSegmentModel);
+ if(newSegmentModel is SegmentModel innerSegment)
+ {
+ _jobModel.GroupingSegments.Add(innerSegment);
+ _jobModel.Segments.Add(innerSegment);
+ }
+ else if(newSegmentModel is SegmentsGroupModel group)
+ {
+ _jobModel.GroupingSegments.Add(group);
+ _jobModel.SegmentsGroups.Add(group);
+ foreach (var segment in group.Segments)
+ {
+ _jobModel.Segments.Add(segment);
+ }
+ }
}
}
else
@@ -42,10 +55,25 @@ namespace Tango.PPC.Jobs.UndoRedoCommands
foreach (var newSegmentModel in SegmentsToCopy)
{
selctedIndex++;
- _jobModel.Segments.Insert(selctedIndex, newSegmentModel);
+ if (newSegmentModel is SegmentModel innerSegment)
+ {
+ _jobModel.GroupingSegments.Insert(selctedIndex, innerSegment);
+ _jobModel.Segments.Add(innerSegment);
+ }
+ else if (newSegmentModel is SegmentsGroupModel group)
+ {
+ _jobModel.GroupingSegments.Insert(selctedIndex, group);
+ _jobModel.SegmentsGroups.Add(group);
+ foreach (var segment in group.Segments)
+ {
+ _jobModel.Segments.Add(segment);
+ }
+ }
}
}
- _jobModel.LoadGroupingSegments();
+ _jobModel.GroupingSegments.ToList().ForEach(x => x.IsSelected = false);
+
+ _jobModel.ArrangeSegmentsIndixes();
_jobModel.SegmentsToCopy.Clear();
}
@@ -53,9 +81,22 @@ namespace Tango.PPC.Jobs.UndoRedoCommands
{
foreach (var segment in SegmentsToCopy)
{
- _jobModel.Segments.Remove(segment);
+ _jobModel.GroupingSegments.Remove(segment);
+ if (segment is SegmentModel innerSegment)
+ {
+ _jobModel.Segments.Remove(innerSegment);
+ }
+ else if (segment is SegmentsGroupModel group)
+ {
+ _jobModel.SegmentsGroups.Remove(group);
+ foreach (var insegment in group.Segments)
+ {
+ _jobModel.Segments.Remove(insegment);
+ }
+ }
}
- _jobModel.LoadGroupingSegments();
+ _jobModel.ArrangeSegmentsIndixes();
+ _jobModel.SegmentsToCopy = new List<ISegmentModel>(SegmentsToCopy);
}
}
}
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/RemoveSegmentsCommand.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/RemoveSegmentsCommand.cs
index 0ac2a9fc6..1b129a86e 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/RemoveSegmentsCommand.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/RemoveSegmentsCommand.cs
@@ -10,36 +10,59 @@ namespace Tango.PPC.Jobs.UndoRedoCommands
public class RemoveSegmentsCommand : IUndoRedoCommand
{
private JobModel _jobModel;
- private Dictionary<int,SegmentModel> _removedSegmentsDict;
-
+ private Dictionary<int, ISegmentModel> _removedSegmentsDict;
+
public RemoveSegmentsCommand(JobModel job )
{
_jobModel = job;
- _removedSegmentsDict = _jobModel.Segments.Select((segm, ind) => new { Index = ind, Segment = segm }).Where(x => x.Segment.IsSelected).ToDictionary(i => i.Index, i => i.Segment); ;
+ _removedSegmentsDict = _jobModel.GroupingSegments.Select((segm, ind) => new { Index = ind, Segment = segm }).Where(x => x.Segment.IsSelected).ToDictionary(i => i.Index, i => i.Segment); ;
}
public void Execute()
{
foreach (var obj in _removedSegmentsDict)
{
- _jobModel.Segments.Remove(obj.Value);
+ if (obj.Value is SegmentModel innerSegment)
+ {
+ _jobModel.Segments.Remove(innerSegment);
+ }
+ else if (obj.Value is SegmentsGroupModel group)
+ {
+ _jobModel.SegmentsGroups.Remove(group);
+ foreach (var segm in group.Segments)
+ {
+ _jobModel.Segments.Remove(segm);
+ }
+ }
+ _jobModel.GroupingSegments.Remove(obj.Value);
}
- _jobModel.LoadGroupingSegments();
}
public void UnExecute()
{
foreach (var obj in _removedSegmentsDict)
{
- if (_jobModel.Segments.Count <= obj.Key)
- _jobModel.Segments.Add(obj.Value);
+ if (obj.Value is SegmentModel innerSegment)
+ {
+ _jobModel.Segments.Add(innerSegment);
+ }
+ else if (obj.Value is SegmentsGroupModel group)
+ {
+ _jobModel.SegmentsGroups.Add(group);
+ foreach (var segm in group.Segments)
+ {
+ _jobModel.Segments.Add(segm);
+ }
+ }
+ if (_jobModel.GroupingSegments.Count <= obj.Key)
+ _jobModel.GroupingSegments.Add(obj.Value);
else
{
- _jobModel.Segments.Insert(obj.Key, obj.Value);
+ _jobModel.GroupingSegments.Insert(obj.Key, obj.Value);
}
}
- _jobModel.LoadGroupingSegments();
-
+ _jobModel.ArrangeSegmentsIndixes();
+
}
}
}
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/RepeatCommand.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/RepeatCommand.cs
index cdce7739a..01390ea71 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/RepeatCommand.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/RepeatCommand.cs
@@ -10,20 +10,21 @@ namespace Tango.PPC.Jobs.UndoRedoCommands
public class RepeatCommand : IUndoRedoCommand
{
private JobModel _jobModel;
- private List<ISegmentModel> _selectedSegments;
-
+ private Dictionary<int, ISegmentModel> _indexToSegmentsDict;
+ private SegmentsGroupModel _group;
+
public RepeatCommand(JobModel job)
{
_jobModel = job;
- _selectedSegments = new List<ISegmentModel>();
+ _indexToSegmentsDict = new Dictionary<int, ISegmentModel>();
for (int index = 0; index < _jobModel.GroupingSegments.Count; index++)
{
var segment = _jobModel.GroupingSegments[index];
if (segment.IsSelected )
{
- _selectedSegments.Add(segment);
+ _indexToSegmentsDict[index] = segment;
}
- else if (_selectedSegments.Count > 0)//selected items should be in turn
+ else if (_indexToSegmentsDict.Count > 0)//selected items should be in turn
{
break;
}
@@ -32,43 +33,67 @@ namespace Tango.PPC.Jobs.UndoRedoCommands
public void Execute()
{
- if (_selectedSegments.Count == 0)
+ if (_indexToSegmentsDict.Count == 0)
return;
List<SegmentModel> selectedsegments = new List<SegmentModel>();
- foreach (var segm in _selectedSegments)
+ foreach (var obj in _indexToSegmentsDict)
{
- if (segm is SegmentModel)
- selectedsegments.Add((SegmentModel)segm);
- else if (segm is SegmentsGroupModel)
+ if (obj.Value is SegmentModel simpleSegment)
{
- selectedsegments.AddRange(((SegmentsGroupModel)segm).Segments);
+ selectedsegments.Add(simpleSegment);
+ _jobModel.GroupingSegments.Remove(simpleSegment);
+ }
+ else if (obj.Value is SegmentsGroupModel segmentsGroup)
+ {
+ selectedsegments.AddRange(segmentsGroup.Segments);
+ _jobModel.SegmentsGroups.Remove(segmentsGroup);
+ _jobModel.GroupingSegments.Remove(segmentsGroup);
}
}
- SegmentsGroupModel group = new SegmentsGroupModel(_jobModel, selectedsegments) ;
- group.SegmentIndex = group.FirstSegmentIndex;
+ _group = new SegmentsGroupModel(_jobModel, selectedsegments) ;
+ _group.SegmentIndex = _group.FirstSegmentIndex;
- selectedsegments.ForEach(x => { x.SegmentsGroupModel = group; x.IsSelected = false; });
+ _jobModel.SegmentsGroups.Add(_group);
- _jobModel.LoadGroupingSegments();
+ if((_group.SegmentIndex - 1) < _jobModel.GroupingSegments.Count)
+ {
+ _jobModel.GroupingSegments.Insert((_group.SegmentIndex - 1), _group);
+ }
+ else
+ _jobModel.GroupingSegments.Add( _group);
+
+ _jobModel.ArrangeSegmentsIndixes();
}
public void UnExecute()
{
- if (_selectedSegments.Count == 0)
+ if (_indexToSegmentsDict.Count == 0)
return;
- foreach (var segm in _selectedSegments)
+
+ _jobModel.SegmentsGroups.Remove(_group);
+ _jobModel.GroupingSegments.Remove(_group);
+ foreach (var obj in _indexToSegmentsDict)
{
- if (segm is SegmentModel)
- ((SegmentModel)segm).SegmentsGroupModel = null;
- else if (segm is SegmentsGroupModel)
+ if (obj.Value is SegmentModel innerSegment)
{
- SegmentsGroupModel group = (SegmentsGroupModel)segm;
+ innerSegment.SegmentsGroupModel = null;
+ }
+ else if (obj.Value is SegmentsGroupModel group)
+ {
+ _jobModel.SegmentsGroups.Add(group);
group.Segments.ToList().ForEach(x => x.SegmentsGroupModel = group);
}
+ if (_jobModel.GroupingSegments.Count <= obj.Key)
+ _jobModel.GroupingSegments.Add(obj.Value);
+ else
+ {
+ _jobModel.GroupingSegments.Insert(obj.Key, obj.Value);
+ }
}
- _jobModel.LoadGroupingSegments();
+
+ _jobModel.ArrangeSegmentsIndixes();
}
}
}
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/ReverseCommand.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/ReverseCommand.cs
index f34a3eaf6..719460e71 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/ReverseCommand.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/ReverseCommand.cs
@@ -30,6 +30,28 @@ namespace Tango.PPC.Jobs.UndoRedoCommands
_jobModel.SwapSegments(firstIndexToSwap, lastIndexToSwap);
}
+ for (int index = 0; index < _indexes.Count && index < _jobModel.GroupingSegments.Count; index++)
+ {
+ if(_jobModel.GroupingSegments[_indexes[index]] is SegmentModel segmentModel)
+ {
+ if(segmentModel.IsGradient)
+ {
+ segmentModel.SwapBrushStops();
+ }
+ }
+ else if(_jobModel.GroupingSegments[_indexes[index]] is SegmentsGroupModel group)
+ {
+ foreach( var segment in group.Segments)
+ {
+ if (segment.IsGradient)
+ {
+ segment.SwapBrushStops();
+ }
+ }
+ }
+ }
+ _jobModel.GroupingSegments.ToList().ForEach(x => x.IsSelected = false);
+ _jobModel.ArrangeSegmentsIndixes();
}
public void UnExecute()
@@ -44,6 +66,27 @@ namespace Tango.PPC.Jobs.UndoRedoCommands
_jobModel.SwapSegments(firstIndexToSwap, lastIndexToSwap);
}
+ for (int index = 0; index < _indexes.Count && index < _jobModel.GroupingSegments.Count; index++)
+ {
+ if (_jobModel.GroupingSegments[_indexes[index]] is SegmentModel segmentModel)
+ {
+ if (segmentModel.IsGradient)
+ {
+ segmentModel.SwapBrushStops();
+ }
+ }
+ else if (_jobModel.GroupingSegments[_indexes[index]] is SegmentsGroupModel group)
+ {
+ foreach (var segment in group.Segments)
+ {
+ if (segment.IsGradient)
+ {
+ segment.SwapBrushStops();
+ }
+ }
+ }
+ }
+ _jobModel.ArrangeSegmentsIndixes();
}
}
}
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/UnGroupSegmentsCommand.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/UnGroupSegmentsCommand.cs
index b42dda221..cbf801266 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/UnGroupSegmentsCommand.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/UnGroupSegmentsCommand.cs
@@ -11,21 +11,44 @@ namespace Tango.PPC.Jobs.UndoRedoCommands
{
private JobModel _jobModel;
private SegmentsGroupModel _segmentsGroupModel;
+ private int _index;
+
public UnGroupSegmentsCommand(JobModel jobModel, SegmentsGroupModel segmentsGroup)
{
_jobModel = jobModel;
_segmentsGroupModel = segmentsGroup;
+ _index = _jobModel.GroupingSegments.IndexOf(_segmentsGroupModel);
}
public void Execute()
{
- _segmentsGroupModel.Segments.ToList().ForEach(x => x.SegmentsGroupModel = null);
- _jobModel.LoadGroupingSegments();
+ int index = _index;
+ foreach( var segment in _segmentsGroupModel.Segments)
+ {
+ segment.SegmentsGroupModel = null;
+ _jobModel.GroupingSegments.Insert(index++, segment);
+ }
+ _jobModel.SegmentsGroups.Remove(_segmentsGroupModel);
+ _jobModel.GroupingSegments.Remove(_segmentsGroupModel);
+ _jobModel.ArrangeSegmentsIndixes();
}
public void UnExecute()
{
- _segmentsGroupModel.Segments.ToList().ForEach(x => x.SegmentsGroupModel = _segmentsGroupModel);
- _jobModel.LoadGroupingSegments();
+ _jobModel.SegmentsGroups.Add(_segmentsGroupModel);
+ foreach (var segment in _segmentsGroupModel.Segments)
+ {
+ segment.SegmentsGroupModel = _segmentsGroupModel;
+ _jobModel.GroupingSegments.Remove(segment);
+ }
+
+ if (_jobModel.GroupingSegments.Count <= _index)
+ _jobModel.GroupingSegments.Add(_segmentsGroupModel);
+ else
+ {
+ _jobModel.GroupingSegments.Insert(_index, _segmentsGroupModel);
+ }
+
+ _jobModel.ArrangeSegmentsIndixes();
}
}
}
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/ViewModels/JobSummeryViewVM.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/ViewModels/JobSummeryViewVM.cs
index 10593cc36..299256d80 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/ViewModels/JobSummeryViewVM.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/ViewModels/JobSummeryViewVM.cs
@@ -163,6 +163,7 @@ namespace Tango.PPC.Jobs.ViewModels
.WithUser()
.WithSegments()
.WithBrushStops()
+ .WithSegmentsGroups()
.BuildAsync();
if (Job.Rml != null && _context != null)
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/ViewModels/JobViewVM.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/ViewModels/JobViewVM.cs
index 776b25d35..cadbc6275 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/ViewModels/JobViewVM.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/ViewModels/JobViewVM.cs
@@ -236,7 +236,7 @@ namespace Tango.PPC.Jobs.ViewModels
/// <summary>
/// Gets or sets the add solid segment command.
/// </summary>
- public RelayCommand<Int32> AddNewSegmentCommand { get; set; }
+ public RelayCommand<ISegmentModel> AddNewSegmentCommand { get; set; }
/// <summary>
/// Gets or sets the remove segment command.
@@ -335,7 +335,7 @@ namespace Tango.PPC.Jobs.ViewModels
});
//Initialize Commands
- AddNewSegmentCommand = new RelayCommand<Int32>(AddNewSegment);
+ AddNewSegmentCommand = new RelayCommand<ISegmentModel>(AddNewSegment);
RemoveSegmentCommand = new RelayCommand<SegmentModel>(RemoveSegment);
DuplicateSegmentCommand = new RelayCommand<SegmentModel>(DuplicateSegment);
@@ -426,6 +426,7 @@ namespace Tango.PPC.Jobs.ViewModels
.WithUser()
.WithSegments()
.WithBrushStops()
+ .WithSegmentsGroups()
.BuildAsync();
Job.NameChanged -= Job_NameChanged;
@@ -513,76 +514,73 @@ namespace Tango.PPC.Jobs.ViewModels
EnableInterSegment = Job.EnableInterSegment
};
Dictionary<string, SegmentsGroupModel> guidToGroup = new Dictionary<string, SegmentsGroupModel>();
- foreach (var segm in Job.Segments)
+ if (Job.Version == 1)
{
- if (Job.Version == 1 && segm.BrushStops.Count > 1)
+ foreach (var segm in Job.OrderedSegments)
{
- int segmentindex = 1;
-
- var brushes = segm.BrushStops;
- Segment currentSegment = segm;
- double lengthOfOldSegment = segm.Length;
- for (int index = 0; index < (brushes.Count - 1); index++)
+ if(segm.BrushStops.Count > 1)
{
- SegmentModel csegmentModel = new SegmentModel(jobModel, segm.Guid)
+ int segmentindex = 1;
+
+ var brushes = segm.BrushStops;
+ Segment currentSegment = segm;
+ double lengthOfOldSegment = segm.Length;
+ for (int index = 0; index < (brushes.Count - 1); index++)
{
- Name = segm.Name,
- Length = segm.Length,
- SegmentIndex = segm.SegmentIndex,
- IsInterSegment = segm.IsInterSegment,
- Job = jobModel
- };
+ SegmentModel csegmentModel = new SegmentModel(jobModel, segm.Guid)
+ {
+ Name = segm.Name,
+ Length = segm.Length,
+ SegmentIndex = segm.SegmentIndex,
+ IsInterSegment = segm.IsInterSegment,
+ Job = jobModel
+ };
- csegmentModel.SegmentIndex = segmentindex++;
+ csegmentModel.SegmentIndex = segmentindex++;
- brushes[index].Segment = currentSegment;
- brushes[index + 1].Segment = currentSegment;
- csegmentModel.Length = (lengthOfOldSegment * (brushes[index + 1].OffsetPercent - brushes[index].OffsetPercent) / 100d);
- BrushStopModel brushStopModelFirst = new BrushStopModel(brushes[index], csegmentModel, 1);
- BrushStopModel brushStopModelSecond = new BrushStopModel(brushes[index + 1], csegmentModel, 1);
- csegmentModel.CreateGradientBrushes(brushStopModelFirst, brushStopModelSecond);
+ brushes[index].Segment = currentSegment;
+ brushes[index + 1].Segment = currentSegment;
+ csegmentModel.Length = (lengthOfOldSegment * (brushes[index + 1].OffsetPercent - brushes[index].OffsetPercent) / 100d);
+ BrushStopModel brushStopModelFirst = new BrushStopModel(brushes[index], csegmentModel, 1);
+ BrushStopModel brushStopModelSecond = new BrushStopModel(brushes[index + 1], csegmentModel, 1);
+ csegmentModel.CreateGradientBrushes(brushStopModelFirst, brushStopModelSecond);
- jobModel.Segments.Add(csegmentModel);
+ jobModel.Segments.Add(csegmentModel);
+ }
+ }
+ else
+ {
+ SegmentModel segmentModel = LoadSegmentModel(segm, jobModel);
+ jobModel.Segments.Add(segmentModel);
}
}
- else
+ }
+ else
+ {
+ var segments = Job.OrderedSegmentsWithGroups;
+ foreach( var segment in segments)
{
- SegmentModel segmentModel = new SegmentModel(jobModel, segm.Guid)
+ if (segment is Segment simpleSegment)
{
- Name = segm.Name,
- Length = segm.Length,
- SegmentIndex = segm.SegmentIndex,
- IsInterSegment = segm.IsInterSegment,
- Job = jobModel,
- };
- if(segm.SegmentsGroupGuid != null)
+ SegmentModel segmentModel = LoadSegmentModel(simpleSegment, jobModel);
+ jobModel.Segments.Add(segmentModel);
+ }
+ else if (segment is SegmentsGroup group)
{
- SegmentsGroupModel segmentsGroupModel;
- if(guidToGroup.TryGetValue(segm.SegmentsGroupGuid, out segmentsGroupModel))
+ SegmentsGroupModel segmentsGroupModel = new SegmentsGroupModel(jobModel) { SegmentIndex = group.SegmentIndex, Repeats = group.Repeats };
+
+ foreach (var innerSegment in group.OrderedSegments)
{
+ SegmentModel segmentModel = LoadSegmentModel(innerSegment, jobModel);
+ jobModel.Segments.Add(segmentModel);
segmentsGroupModel.Segments.Add(segmentModel);
segmentModel.SegmentsGroupModel = segmentsGroupModel;
}
- else
- {
- segmentsGroupModel = new SegmentsGroupModel(jobModel) { SegmentIndex = segm.SegmentsGroup.SegmentIndex, Repeats = segm.SegmentsGroup.Repeats };
- guidToGroup[segm.SegmentsGroupGuid] = segmentsGroupModel;
- segmentsGroupModel.Segments.Add(segmentModel);
- segmentModel.SegmentsGroupModel = segmentsGroupModel;
- }
- }
- foreach (var brushStop in segm.BrushStops)
- {
- BrushStopModel brushStopModel = new BrushStopModel(brushStop, segmentModel, Job.Version);
- segmentModel.BrushStops.Add(brushStopModel);
+ jobModel.SegmentsGroups.Add(segmentsGroupModel);
}
-
- segmentModel.ArrangeBrushStopsPosition();
- jobModel.Segments.Add(segmentModel);
}
}
-
jobModel.InterSegmentLength = Job.EnableInterSegment ? Job.InterSegmentLength : 0;
jobModel.LoadGroupingSegments();
JobModel = jobModel;
@@ -593,6 +591,32 @@ namespace Tango.PPC.Jobs.ViewModels
ArrangeSegmentsIndixes();
}
+ /// <summary>
+ /// Loads the segment model.
+ /// </summary>
+ /// <param name="segm">The segm.</param>
+ /// <param name="jobModel">The job model.</param>
+ /// <returns></returns>
+ private SegmentModel LoadSegmentModel(Segment segm, JobModel jobModel)
+ {
+ SegmentModel segmentModel = new SegmentModel(jobModel, segm.Guid)
+ {
+ Name = segm.Name,
+ Length = segm.Length,
+ SegmentIndex = segm.SegmentIndex,
+ IsInterSegment = segm.IsInterSegment,
+ Job = jobModel,
+ };
+ foreach (var brushStop in segm.BrushStops)
+ {
+ BrushStopModel brushStopModel = new BrushStopModel(brushStop, segmentModel, Job.Version);
+ segmentModel.BrushStops.Add(brushStopModel);
+ }
+
+ segmentModel.ArrangeBrushStopsPosition();
+ return segmentModel;
+ }
+
private void Job_NameChanged(object sender, string e)
{
DyeCommand.RaiseCanExecuteChanged();
@@ -799,13 +823,13 @@ namespace Tango.PPC.Jobs.ViewModels
/// <summary>
/// Adds a new segment.
/// </summary>
- private void AddNewSegment(Int32 segmentIndex)
+ private void AddNewSegment(ISegmentModel segment)
{
try
{
LogManager.Log("Adding new segment...");
- UndoRedoManager.Instance.InsertAndExecuteCommand(new AddNewSegmentCommand(JobModel, segmentIndex, Settings.DefaultSegmentLength > 0 ? Settings.DefaultSegmentLength : 10));
+ UndoRedoManager.Instance.InsertAndExecuteCommand(new AddNewSegmentCommand(JobModel, segment, Settings.DefaultSegmentLength > 0 ? Settings.DefaultSegmentLength : 10));
ArrangeSegmentsIndixes();
}
catch (Exception ex)
@@ -898,16 +922,7 @@ namespace Tango.PPC.Jobs.ViewModels
private void ArrangeSegmentsIndixes()
{
- int index = 1;
- int count = JobModel.GroupingSegments.Count();
-
- // foreach (var segment in JobModel.Segments)
- foreach (var segment in JobModel.GroupingSegments)
- {
- segment.IsLast = ( index == count)? true : false;
- segment.SegmentIndex = index++;
- }
-
+ JobModel.ArrangeSegmentsIndixes();
SegmentsCollectionView.Refresh();
}
@@ -1197,13 +1212,13 @@ namespace Tango.PPC.Jobs.ViewModels
{
if (!JobModel.HasSelectedItems)
return;
- if(JobModel.Segments.ToList().Where(x => x.IsSelected).ToList().Count == JobModel.Segments.Count)
+ if(JobModel.GroupingSegments.ToList().Where(x => x.IsSelected).ToList().Count == JobModel.GroupingSegments.Count)
{
await NotificationProvider.ShowInfo("A job must contain at least one segment. Please, change selection.");
return;
}
- if (JobModel.Segments.Count > 1)
+ if (JobModel.GroupingSegments.Count > 1)
{
try
{
@@ -1304,68 +1319,106 @@ namespace Tango.PPC.Jobs.ViewModels
Dictionary<int, SegmentsGroup> segmentIndexToGroup = new Dictionary<int, SegmentsGroup>();
- foreach (var segment in JobModel.Segments.OrderBy(x => x.SegmentIndex).ToList())
+ //foreach (var segment in JobModel.Segments.OrderBy(x => x.SegmentIndex).ToList())
+ foreach(var segment in JobModel.OrderedSegmentsWithGroups)
{
- var dbSegment = new Segment();
- dbSegment.Guid = System.Guid.NewGuid().ToString();
- dbSegment.Name = "Standard Segment";
-
- dbSegment.Job = Job;
- dbSegment.SegmentIndex = segment.SegmentIndex;
- dbSegment.Length = segment.Length;
- if(segment.IsGroupSegment)
+ if(segment is SegmentModel innerSegment)
{
- SegmentsGroup dbSegmentsGroup;
- if (false == segmentIndexToGroup.TryGetValue(segment.SegmentsGroupModel.SegmentIndex, out dbSegmentsGroup))
- {
- dbSegmentsGroup = new SegmentsGroup();
- dbSegmentsGroup.Guid = System.Guid.NewGuid().ToString();
- dbSegmentsGroup.Repeats = segment.SegmentsGroupModel.Repeats;
- dbSegmentsGroup.SegmentIndex = segment.SegmentsGroupModel.SegmentIndex;
- dbSegmentsGroup.Job = Job;
- _db.SegmentsGroups.Add(dbSegmentsGroup);
- dbSegment.SegmentsGroup = dbSegmentsGroup;
- segmentIndexToGroup[segment.SegmentsGroupModel.SegmentIndex] = dbSegmentsGroup;
- }
- else
+ var dbSegment = new Segment();
+ dbSegment.Guid = System.Guid.NewGuid().ToString();
+ dbSegment.Name = "Standard Segment";
+
+ dbSegment.Job = Job;
+ dbSegment.SegmentIndex = segment.SegmentIndex;
+ dbSegment.Length = segment.Length;
+ _db.Segments.Add(dbSegment);
+ foreach (var stop in innerSegment.BrushStops.OrderBy(x => x.StopIndex).ToList())
{
- dbSegment.SegmentsGroup = dbSegmentsGroup;
+ var dbStop = new BrushStop();
+ dbStop.Segment = dbSegment;
+ _db.BrushStops.Add(dbStop);
+
+ dbStop.ColorSpace = colorSpaces.FirstOrDefault(x => x.Code == (int)stop.ColorSpace);
+ dbStop.Red = stop.Red;
+ dbStop.Green = stop.Green;
+ dbStop.Blue = stop.Blue;
+ dbStop.L = stop.L;
+ dbStop.A = stop.A;
+ dbStop.B = stop.B;
+ dbStop.Cyan = stop.Cyan;
+ dbStop.Magenta = stop.Magenta;
+ dbStop.Yellow = stop.Yellow;
+ dbStop.Black = stop.Black;
+ dbStop.BestMatchR = stop.BestMatchColor.R;
+ dbStop.BestMatchG = stop.BestMatchColor.G;
+ dbStop.BestMatchB = stop.BestMatchColor.B;
+
+ dbStop.OffsetPercent = stop.OffsetPercent;
+ dbStop.StopIndex = stop.StopIndex;
+ dbStop.IsOutOfGamut = stop.IsOutOfGamut;
+
+ dbStop.SetVolume(LiquidTypes.Cyan, stop.Cyan);
+ dbStop.SetVolume(LiquidTypes.Magenta, stop.Magenta);
+ dbStop.SetVolume(LiquidTypes.Yellow, stop.Yellow);
+ dbStop.SetVolume(LiquidTypes.Black, stop.Black);
+
+ dbStop.ColorCatalog = stop.ColorCatalog;
+ dbStop.ColorCatalogsItem = stop.ColorCatalogsItem;
}
}
- _db.Segments.Add(dbSegment);
-
- foreach (var stop in segment.BrushStops.OrderBy(x => x.StopIndex).ToList())
+ else if( segment is SegmentsGroupModel group)
{
- var dbStop = new BrushStop();
- dbStop.Segment = dbSegment;
- _db.BrushStops.Add(dbStop);
+ SegmentsGroup dbSegmentsGroup = new SegmentsGroup();
+ dbSegmentsGroup.Guid = System.Guid.NewGuid().ToString();
+ dbSegmentsGroup.Repeats = group.Repeats;
+ dbSegmentsGroup.SegmentIndex = group.SegmentIndex;
+ dbSegmentsGroup.Job = Job;
+ _db.SegmentsGroups.Add(dbSegmentsGroup);
+ foreach(var segm_group in group.Segments.OrderBy(x=>x.SegmentIndex))
+ {
+ var dbSegment = new Segment();
+ dbSegment.Guid = System.Guid.NewGuid().ToString();
+ dbSegment.Name = "Standard Segment";
- dbStop.ColorSpace = colorSpaces.FirstOrDefault(x => x.Code == (int)stop.ColorSpace);
- dbStop.Red = stop.Red;
- dbStop.Green = stop.Green;
- dbStop.Blue = stop.Blue;
- dbStop.L = stop.L;
- dbStop.A = stop.A;
- dbStop.B = stop.B;
- dbStop.Cyan = stop.Cyan;
- dbStop.Magenta = stop.Magenta;
- dbStop.Yellow = stop.Yellow;
- dbStop.Black = stop.Black;
- dbStop.BestMatchR = stop.BestMatchColor.R;
- dbStop.BestMatchG = stop.BestMatchColor.G;
- dbStop.BestMatchB = stop.BestMatchColor.B;
+ dbSegment.Job = Job;
+ dbSegment.SegmentIndex = segm_group.SegmentIndex;
+ dbSegment.Length = segm_group.Length;
+ dbSegment.SegmentsGroupGuid = dbSegmentsGroup.Guid;
+ _db.Segments.Add(dbSegment);
+ foreach (var stop in segm_group.BrushStops.OrderBy(x => x.StopIndex).ToList())
+ {
+ var dbStop = new BrushStop();
+ dbStop.Segment = dbSegment;
+ _db.BrushStops.Add(dbStop);
- dbStop.OffsetPercent = stop.OffsetPercent;
- dbStop.StopIndex = stop.StopIndex;
- dbStop.IsOutOfGamut = stop.IsOutOfGamut;
-
- dbStop.SetVolume(LiquidTypes.Cyan, stop.Cyan);
- dbStop.SetVolume(LiquidTypes.Magenta, stop.Magenta);
- dbStop.SetVolume(LiquidTypes.Yellow, stop.Yellow);
- dbStop.SetVolume(LiquidTypes.Black, stop.Black);
+ dbStop.ColorSpace = colorSpaces.FirstOrDefault(x => x.Code == (int)stop.ColorSpace);
+ dbStop.Red = stop.Red;
+ dbStop.Green = stop.Green;
+ dbStop.Blue = stop.Blue;
+ dbStop.L = stop.L;
+ dbStop.A = stop.A;
+ dbStop.B = stop.B;
+ dbStop.Cyan = stop.Cyan;
+ dbStop.Magenta = stop.Magenta;
+ dbStop.Yellow = stop.Yellow;
+ dbStop.Black = stop.Black;
+ dbStop.BestMatchR = stop.BestMatchColor.R;
+ dbStop.BestMatchG = stop.BestMatchColor.G;
+ dbStop.BestMatchB = stop.BestMatchColor.B;
+
+ dbStop.OffsetPercent = stop.OffsetPercent;
+ dbStop.StopIndex = stop.StopIndex;
+ dbStop.IsOutOfGamut = stop.IsOutOfGamut;
- dbStop.ColorCatalog = stop.ColorCatalog;
- dbStop.ColorCatalogsItem = stop.ColorCatalogsItem;
+ dbStop.SetVolume(LiquidTypes.Cyan, stop.Cyan);
+ dbStop.SetVolume(LiquidTypes.Magenta, stop.Magenta);
+ dbStop.SetVolume(LiquidTypes.Yellow, stop.Yellow);
+ dbStop.SetVolume(LiquidTypes.Black, stop.Black);
+
+ dbStop.ColorCatalog = stop.ColorCatalog;
+ dbStop.ColorCatalogsItem = stop.ColorCatalogsItem;
+ }
+ }
}
}
Job.LastUpdated = DateTime.UtcNow;
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/ViewModels/JobsViewVM.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/ViewModels/JobsViewVM.cs
index 85d469ac1..b7380cc4d 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/ViewModels/JobsViewVM.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/ViewModels/JobsViewVM.cs
@@ -361,7 +361,7 @@ namespace Tango.PPC.Jobs.ViewModels
_colorSpaces = _db.ColorSpaces.ToList();
- var jobs = new JobsCollectionBuilder(_db).Set(x => x.MachineGuid == MachineProvider.Machine.Guid).WithSegments().WithBrushStops().WithCustomer().WithColorSpace().Build();
+ var jobs = new JobsCollectionBuilder(_db).Set(x => x.MachineGuid == MachineProvider.Machine.Guid).WithSegments().WithBrushStops().WithCustomer().WithColorSpace().WithSegmentsGroups().Build();
InvokeUI(() =>
{
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobSummeryView.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobSummeryView.xaml
index dd17e4668..34ddeca8a 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobSummeryView.xaml
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobSummeryView.xaml
@@ -102,7 +102,7 @@
</DockPanel>
</StackPanel>
- <!--<controls:JobSummeryViewer Height="40" JobModel="{Binding Job}" VerticalAlignment="Center" Margin="20 0" Grid.Row="2" />-->
+ <controls:JobSummeryViewer Height="40" Job="{Binding Job}" VerticalAlignment="Center" Margin="20 0" Grid.Row="2" />
</Grid>
</DockPanel>
</Border>
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobView.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobView.xaml
index 70531394f..f650b61a2 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobView.xaml
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobView.xaml
@@ -206,7 +206,7 @@
</DataTemplate>
<DataTemplate x:Key="Segment_Template" DataType="{x:Type model:SegmentModel}">
- <Grid Height="380" Margin="57 15 57 0">
+ <Grid Height="390" Margin="57 15 57 0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
@@ -380,7 +380,7 @@
</Grid>
</Border>
- <DockPanel Margin="0 20 0 0" Grid.Row="1">
+ <DockPanel Margin="0 10 0 0" Grid.Row="1">
<!--<Grid DockPanel.Dock="Right" Visibility="{Binding IsLast, Converter={StaticResource BooleanToVisibilityInverseConverter}}">-->
<Grid DockPanel.Dock="Right" Visibility="Collapsed">
<touch:TouchButton x:Name="deletegap" DockPanel.Dock="Right" HorizontalAlignment="Right" VerticalAlignment="Center" Command="{Binding DeleteGapCommand}" EnableDropShadow="False" Foreground="{StaticResource TangoKeyboardKeyDarkTextBrush}" Background="Transparent" BorderThickness="0" Visibility="{Binding EnableInterSegment, Converter={StaticResource BooleanToVisibilityConverter}}">
@@ -395,7 +395,7 @@
</StackPanel>
</touch:TouchButton>
</Grid>
- <touch:TouchButton DockPanel.Dock="Left" HorizontalAlignment="Left" VerticalAlignment="Center" Command="{Binding DataContext.AddNewSegmentCommand, ElementName=listSegments}" CommandParameter="{Binding SegmentIndex}" EnableDropShadow="False" Foreground="{StaticResource TangoKeyboardKeyDarkTextBrush}" Background="Transparent" BorderThickness="0">
+ <touch:TouchButton DockPanel.Dock="Left" HorizontalAlignment="Left" VerticalAlignment="Center" Command="{Binding DataContext.AddNewSegmentCommand, ElementName=listSegments}" CommandParameter="{Binding }" EnableDropShadow="False" Foreground="{StaticResource TangoKeyboardKeyDarkTextBrush}" Background="Transparent" BorderThickness="0">
<StackPanel Orientation="Horizontal">
<Border Height="35" Width="35" BorderThickness="0" Background="Transparent" HorizontalAlignment="Left">
<Image Stretch="Fill" RenderOptions.BitmapScalingMode="Fant" Source="../Images/JobView/AddNewSegment.png"/>
@@ -411,7 +411,7 @@
</DataTemplate>
<DataTemplate x:Key="GroupSegment_Template" DataType="{x:Type model:SegmentsGroupModel}">
- <Grid Height="380" Margin="57 15 57 0">
+ <Grid Height="390" Margin="57 15 57 0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
@@ -522,7 +522,7 @@
</Grid>
</Border>
- <DockPanel Margin="0 20 0 0" Grid.Row="1">
+ <DockPanel Margin="0 10 0 0" Grid.Row="1">
<!--<Grid DockPanel.Dock="Right" Visibility="{Binding IsLast, Converter={StaticResource BooleanToVisibilityInverseConverter}}">-->
<!--<Grid DockPanel.Dock="Right" Visibility="Collapsed">-->
<!--<touch:TouchButton x:Name="deletegap" DockPanel.Dock="Right" HorizontalAlignment="Right" VerticalAlignment="Center" Command="{Binding DeleteGapCommand}" EnableDropShadow="False" Foreground="{StaticResource TangoKeyboardKeyDarkTextBrush}" Background="Transparent" BorderThickness="0" Visibility="{Binding EnableInterSegment, Converter={StaticResource BooleanToVisibilityConverter}}">
@@ -537,7 +537,7 @@
</StackPanel>
</touch:TouchButton>-->
<!--</Grid>-->
- <touch:TouchButton DockPanel.Dock="Left" HorizontalAlignment="Left" VerticalAlignment="Center" Command="{Binding DataContext.AddNewSegmentCommand, ElementName=listSegments}" CommandParameter="{Binding SegmentIndex}" EnableDropShadow="False" Foreground="{StaticResource TangoKeyboardKeyDarkTextBrush}" Background="Transparent" BorderThickness="0">
+ <touch:TouchButton DockPanel.Dock="Left" HorizontalAlignment="Left" VerticalAlignment="Center" Command="{Binding DataContext.AddNewSegmentCommand, ElementName=listSegments}" CommandParameter="{Binding }" EnableDropShadow="False" Foreground="{StaticResource TangoKeyboardKeyDarkTextBrush}" Background="Transparent" BorderThickness="0">
<StackPanel Orientation="Horizontal">
<Border Height="35" Width="35" BorderThickness="0" Background="Transparent" HorizontalAlignment="Left">
<Image Stretch="Fill" RenderOptions.BitmapScalingMode="Fant" Source="../Images/JobView/AddNewSegment.png"/>
@@ -953,7 +953,7 @@
<Grid Margin=" 0 10 0 0">
<!--<touch:TouchVirtualizedContentReplaceControl MinHeight="40">
<DataTemplate>-->
- <localControls:JobSummeryViewer JobModel="{Binding JobModel}" Height="20" DisplayMarkers="False" />
+ <localControls:JobModelSummaryViewerControl JobModel="{Binding JobModel}" Height="20" DisplayMarkers="False" />
<!--</DataTemplate>
</touch:TouchVirtualizedContentReplaceControl>-->
</Grid>
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobsView.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobsView.xaml
index e7823d33d..770711f5d 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobsView.xaml
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobsView.xaml
@@ -176,7 +176,7 @@
<touch:TouchLoadingPanel IsLoading="{Binding IsLoadingJobs}" Visibility="{Binding SelectedCategory,Converter={StaticResource JobsCategoryToVisibilityConverter},ConverterParameter='Draft'}">
<touch:LightTouchDataGrid CollectionFilter="{Binding CollectionFilter}" AnimateSorting="False" RenderOptions.EdgeMode="Unspecified" Style="{StaticResource TangoJobsGrid}" x:Name="dataGridJobs" SelectedItems="{Binding SelectedJobs}" IsMultiSelecting="{Binding IsMultiSelecting,Mode=TwoWay}" OnDragAndDropCommand="{Binding JobDragedDroppedCommand}" ItemsSource="{Binding DraftJobsCollectionView}" ItemSelectedCommand="{Binding JobSelectedCommand}" Margin="10">
<touch:LightTouchDataGrid.Columns>
- <touch:LightTouchDataGridColumn Width="90">
+ <!--<touch:LightTouchDataGridColumn Width="90">
<touch:LightTouchDataGridColumn.Header>
<Image Source="../Images/warning.png" Width="24" />
</touch:LightTouchDataGridColumn.Header>
@@ -210,11 +210,14 @@
</Grid>
</DataTemplate>
</touch:LightTouchDataGridColumn.CellTemplate>
- </touch:LightTouchDataGridColumn>
- <touch:LightTouchDataGridColumn Width="1*" Header="Name" SortMember="Name" HorizontalContentAlignment="Left">
+ </touch:LightTouchDataGridColumn>-->
+ <touch:LightTouchDataGridColumn Width="1*" SortMember="Name" HorizontalContentAlignment="Left">
+ <touch:LightTouchDataGridColumn.Header>
+ <TextBlock Margin="20 0 0 0" Text="Name" />
+ </touch:LightTouchDataGridColumn.Header>
<touch:LightTouchDataGridColumn.CellTemplate>
<DataTemplate>
- <TextBlock IsHitTestVisible="False" Text="{Binding Name,Converter={StaticResource StringEllipsisConverter},ConverterParameter='40'}"></TextBlock>
+ <TextBlock Margin="20 0 0 0" IsHitTestVisible="False" Text="{Binding Name,Converter={StaticResource StringEllipsisConverter},ConverterParameter='40'}"></TextBlock>
</DataTemplate>
</touch:LightTouchDataGridColumn.CellTemplate>
</touch:LightTouchDataGridColumn>
@@ -321,7 +324,7 @@
<touch:LightTouchDataGridColumn Width="1*" Header="Name" SortMember="Name" HorizontalContentAlignment="Left">
<touch:LightTouchDataGridColumn.CellTemplate>
<DataTemplate>
- <TextBlock IsHitTestVisible="False" Text="{Binding Name,Converter={StaticResource StringEllipsisConverter},ConverterParameter='40'}" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
+ <TextBlock IsHitTestVisible="False" Text="{Binding Name,Converter={StaticResource StringEllipsisConverter},ConverterParameter='40'}" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock>
</DataTemplate>
</touch:LightTouchDataGridColumn.CellTemplate>
</touch:LightTouchDataGridColumn>
diff --git a/Software/Visual_Studio/Tango.BL/Builders/JobBuilder.cs b/Software/Visual_Studio/Tango.BL/Builders/JobBuilder.cs
index 0f1a868a4..970309a96 100644
--- a/Software/Visual_Studio/Tango.BL/Builders/JobBuilder.cs
+++ b/Software/Visual_Studio/Tango.BL/Builders/JobBuilder.cs
@@ -85,5 +85,13 @@ namespace Tango.BL.Builders
Context.JobRuns.Where(x => x.JobGuid == Entity.Guid).OrderBy(x => x.StartDate).ToList();
});
}
+
+ public virtual JobBuilder WithSegmentsGroups()
+ {
+ return AddStep(7, () =>
+ {
+ Context.SegmentsGroups.Where(x => x.JobGuid == Entity.Guid).OrderBy(x => x.SegmentIndex).ToList();
+ });
+ }
}
}
diff --git a/Software/Visual_Studio/Tango.BL/Builders/JobsCollectionBuilder.cs b/Software/Visual_Studio/Tango.BL/Builders/JobsCollectionBuilder.cs
index e5db5d7e1..c155e7020 100644
--- a/Software/Visual_Studio/Tango.BL/Builders/JobsCollectionBuilder.cs
+++ b/Software/Visual_Studio/Tango.BL/Builders/JobsCollectionBuilder.cs
@@ -52,5 +52,16 @@ namespace Tango.BL.Builders
}
});
}
+
+ public virtual JobsCollectionBuilder WithSegmentsGroups()
+ {
+ return AddStep(3, () =>
+ {
+ foreach (var job in Entities.ToList())
+ {
+ Context.SegmentsGroups.Where(x => x.JobGuid == job.Guid).OrderBy(x => x.SegmentIndex).ToList();
+ }
+ });
+ }
}
}
diff --git a/Software/Visual_Studio/Tango.BL/Builders/MachineBuilder.cs b/Software/Visual_Studio/Tango.BL/Builders/MachineBuilder.cs
index fd9d14baa..c9c13c389 100644
--- a/Software/Visual_Studio/Tango.BL/Builders/MachineBuilder.cs
+++ b/Software/Visual_Studio/Tango.BL/Builders/MachineBuilder.cs
@@ -49,7 +49,7 @@ namespace Tango.BL.Builders
{
return AddStep(3, () =>
{
- new JobsCollectionBuilder(Context).Set(x => x.MachineGuid == Entity.Guid).WithSegments().Build();
+ new JobsCollectionBuilder(Context).Set(x => x.MachineGuid == Entity.Guid).WithSegments().WithSegmentsGroups().Build();
});
}
diff --git a/Software/Visual_Studio/Tango.BL/Entities/Job.cs b/Software/Visual_Studio/Tango.BL/Entities/Job.cs
index 5cd756f27..dbe1c5bf0 100644
--- a/Software/Visual_Studio/Tango.BL/Entities/Job.cs
+++ b/Software/Visual_Studio/Tango.BL/Entities/Job.cs
@@ -13,6 +13,7 @@ using System.Windows.Media.Imaging;
using Tango.BL.ActionLogs;
using Tango.BL.Builders;
using Tango.BL.Enumerations;
+using Tango.BL.Interfaces;
using Tango.BL.ValueObjects;
using Tango.Core;
using Tango.Core.ExtensionMethods;
@@ -148,27 +149,92 @@ namespace Tango.BL.Entities
{
get
{
+ var segments = OrderedSegmentsWithGroups;
if (EnableInterSegment && IsAllSegmentsPerSpool)
{
- int max = Segments.Max(x => x.SegmentIndex);
+ //int max = Segments.Max(x => x.SegmentIndex);
+ int max = segments.Max(x => x.SegmentIndex);
ObservableCollection<Segment> effectiveSegments = new ObservableCollection<Segment>();
- foreach (var s in Segments.ToList().OrderBy(x => x.SegmentIndex))
+ foreach( var s in segments)
{
- effectiveSegments.Add(s);
-
- if (s.SegmentIndex != max)
+ if (s is Segment)
{
- effectiveSegments.Add(CreateInterSegment(InterSegmentLength));
+ Segment segment = s as Segment;
+ effectiveSegments.Add(segment);
+ if (s.SegmentIndex != max)
+ {
+ effectiveSegments.Add(CreateInterSegment(InterSegmentLength));
+ }
+ }
+ else if (s is SegmentsGroup)
+ {
+ SegmentsGroup segmentsGroup = s as SegmentsGroup;
+ List<Segment> groupSegments = segmentsGroup.Segments.ToList();
+ for (int repeats = 0; repeats < segmentsGroup.Repeats; repeats++)
+ {
+ for (int i = 0; i < groupSegments.Count; i++)
+ {
+ if (repeats > 0)
+ {
+ effectiveSegments.Add(groupSegments[i].Clone());
+ }
+ else
+ effectiveSegments.Add(groupSegments[i]);
+ if (EnableInterSegment && !(repeats == (segmentsGroup.Repeats - 1) && i == (groupSegments.Count - 1)))
+ {
+ effectiveSegments.Add(CreateInterSegment(InterSegmentLength));
+ }
+ }
+ }
+ if (EnableInterSegment && segmentsGroup.SegmentIndex != max)
+ {
+ effectiveSegments.Add(CreateInterSegment(InterSegmentLength));
+ }
}
}
+ //foreach (var s in Segments.ToList().OrderBy(x => x.SegmentIndex))
+ //{
+ // effectiveSegments.Add(s);
+
+ // if (s.SegmentIndex != max)
+ // {
+ // effectiveSegments.Add(CreateInterSegment(InterSegmentLength));
+ // }
+ //}
return effectiveSegments;
}
else
{
- return Segments.OrderBy(x => x.SegmentIndex).ToObservableCollection();
+ ObservableCollection<Segment> effectiveSegments = new ObservableCollection<Segment>();
+ foreach (var s in segments)
+ {
+ if (s is Segment)
+ {
+ effectiveSegments.Add(s as Segment);
+ }
+ else if (s is SegmentsGroup)
+ {
+ SegmentsGroup segmentsGroup = s as SegmentsGroup;
+ List<Segment> groupSegments = segmentsGroup.Segments.ToList();
+ for (int repeats = 0; repeats < segmentsGroup.Repeats; repeats++)
+ {
+ for (int i = 0; i < groupSegments.Count; i++)
+ {
+ if (repeats > 0)
+ {
+ effectiveSegments.Add(groupSegments[i].Clone());
+ }
+ else
+ effectiveSegments.Add(groupSegments[i]);
+ }
+ }
+ }
+ }
+ return effectiveSegments;
+ //return Segments.OrderBy(x => x.SegmentIndex).ToObservableCollection();
}
}
}
@@ -185,6 +251,26 @@ namespace Tango.BL.Entities
return Segments.OrderBy(x => x.SegmentIndex).ToObservableCollection();
}
}
+
+ /// <summary>
+ /// Gets the ordered segments and groups
+ /// </summary>
+ [NotMapped]
+ [JsonIgnore]
+ public ObservableCollection<ISegment> OrderedSegmentsWithGroups
+ {
+ get
+ {
+ if (Segments == null)
+ return null;
+ List<ISegment> orderedSegmentsWithGroups = new List<ISegment>();
+
+ orderedSegmentsWithGroups.AddRange(Segments.Where(x => x.SegmentsGroupGuid == null));
+ orderedSegmentsWithGroups.AddRange(SegmentsGroups);
+ return orderedSegmentsWithGroups.OrderBy(x => x.SegmentIndex).ToObservableCollection();
+ // return Segments.OrderBy(x => x.SegmentIndex).ToObservableCollection();
+ }
+ }
/// <summary>
/// Gets or sets the job fine tuning status.
@@ -357,6 +443,7 @@ namespace Tango.BL.Entities
cloned.WindingMethod = WindingMethod;
cloned.JobStatus = JobStatuses.Draft;
cloned.Segments = Segments.Select(x => x.Clone(cloned)).ToSynchronizedObservableCollection();
+ cloned.SegmentsGroups = SegmentsGroups.Select(x => x.Clone(cloned)).ToSynchronizedObservableCollection();
foreach (var segment in cloned.Segments)
{
@@ -373,14 +460,56 @@ namespace Tango.BL.Entities
private double GetLength()
{
- if (Segments != null)
- {
- return Segments.Sum(x => x.LengthWithFactor) + ((EnableInterSegment && IsAllSegmentsPerSpool) ? (InterSegmentLength * (Segments.Count > 0 ? Segments.Count - 1 : Segments.Count)) : 0);
- }
- else
- {
+ var segments = OrderedSegmentsWithGroups;
+ if (segments == null || segments.Count == 0)
return 0;
+ double length = 0;
+ int max = segments.Max(x => x.SegmentIndex);
+ foreach (var s in segments)
+ {
+ if (s is Segment)
+ {
+ length += (s as Segment).LengthWithFactor + ((EnableInterSegment && IsAllSegmentsPerSpool) ? (InterSegmentLength * (segments.Count > 0 ? segments.Count - 1 : segments.Count)) : 0);
+ }
+ else if (s is SegmentsGroup)
+ {
+ SegmentsGroup segmentsGroup = s as SegmentsGroup;
+ List<Segment> groupSegments = segmentsGroup.Segments.ToList();
+ if(EnableInterSegment && IsAllSegmentsPerSpool)
+ {
+ for (int repeats = 0; repeats < segmentsGroup.Repeats; repeats++)
+ {
+ for (int i = 0; i < groupSegments.Count; i++)
+ {
+ length += groupSegments[i].LengthWithFactor;
+
+ if (EnableInterSegment && !(repeats == (segmentsGroup.Repeats - 1) && i == (groupSegments.Count - 1)))
+ {
+ length += InterSegmentLength;
+ }
+ }
+ }
+ if (EnableInterSegment && segmentsGroup.SegmentIndex != max)
+ {
+ length += InterSegmentLength;
+ }
+ }
+ else
+ {
+ length += (segmentsGroup.Segments.Sum(x => x.LengthWithFactor) * segmentsGroup.Repeats);
+ }
+ }
}
+
+ return length;
+ //if (Segments != null)
+ //{
+ // return Segments.Sum(x => x.LengthWithFactor) + ((EnableInterSegment && IsAllSegmentsPerSpool) ? (InterSegmentLength * (Segments.Count > 0 ? Segments.Count - 1 : Segments.Count)) : 0);
+ //}
+ //else
+ //{
+ // return 0;
+ //}
}
#endregion
@@ -598,7 +727,7 @@ namespace Tango.BL.Entities
{
using (ObservablesContext db = ObservablesContext.CreateDefault())
{
- var job = new JobBuilder(db).Set(Guid).WithUser().WithRML().WithSegments().WithBrushStops().Build();
+ var job = new JobBuilder(db).Set(Guid).WithUser().WithRML().WithSegments().WithBrushStops().WithSegmentsGroups().Build();
var machine = new MachineBuilder(db).Set(job.MachineGuid).WithConfiguration().Build();
return CreateJobFile(job, machine);
diff --git a/Software/Visual_Studio/Tango.BL/Entities/Segment.cs b/Software/Visual_Studio/Tango.BL/Entities/Segment.cs
index d6ff44428..c097bbc0e 100644
--- a/Software/Visual_Studio/Tango.BL/Entities/Segment.cs
+++ b/Software/Visual_Studio/Tango.BL/Entities/Segment.cs
@@ -457,6 +457,25 @@ namespace Tango.BL.Entities
return cloned;
}
+ /// <summary>
+ /// Clones this segment with its brush stops.
+ /// </summary>
+ /// <returns></returns>
+ ISegment ISegment.Clone()
+ {
+ return Clone() as ISegment;
+ }
+
+ /// <summary>
+ /// Clones this segment and assigns it to the specified job.
+ /// </summary>
+ /// <param name="job">The job.</param>
+ /// <returns></returns>
+ ISegment ISegment.Clone(Job job)
+ {
+ return Clone(job) as ISegment;
+ }
+
#endregion
#region Delete
diff --git a/Software/Visual_Studio/Tango.BL/Entities/SegmentsGroup.cs b/Software/Visual_Studio/Tango.BL/Entities/SegmentsGroup.cs
index 3115c2eeb..b4940792d 100644
--- a/Software/Visual_Studio/Tango.BL/Entities/SegmentsGroup.cs
+++ b/Software/Visual_Studio/Tango.BL/Entities/SegmentsGroup.cs
@@ -1,18 +1,84 @@
-//------------------------------------------------------------------------------
-// <auto-generated>
-// This code was generated by a tool.
-// Tango Observables Generator
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated. Do not modify!
-// </auto-generated>
-//------------------------------------------------------------------------------
-
+
using Tango.BL.Interfaces;
+using System;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Media;
+using Tango.Core;
+using Tango.Core.Threading;
+using Newtonsoft.Json;
+using System.Collections.ObjectModel;
namespace Tango.BL.Entities
{
public class SegmentsGroup: SegmentsGroupBase, ISegment
{
+ [NotMapped]
+ [JsonIgnore]
+ public ObservableCollection<Segment> OrderedSegments
+ {
+ get
+ {
+ return Segments.OrderBy(x => x.SegmentIndex).ToObservableCollection();
+ }
+ }
+
+ [NotMapped]
+ [JsonIgnore]
+ public virtual SynchronizedObservableCollection<BrushStop> BrushStops
+ {
+ get
+ {
+ return OrderedSegments.SelectMany(x => x.BrushStops).OrderBy(x => x.StopIndex).ToSynchronizedObservableCollection();
+ }
+ }
+
+ public override SegmentsGroup Clone()
+ {
+ SegmentsGroup cloned = base.Clone();
+
+ cloned.Segments = Segments.Select(x => x.Clone()).ToSynchronizedObservableCollection();
+
+ foreach (var stop in cloned.Segments)
+ {
+ stop.SegmentsGroupGuid = cloned.Guid;
+ stop.SegmentsGroup = cloned;
+ }
+
+ return cloned;
+ }
+
+ /// <summary>
+ /// Clones this segment and assigns it to the specified job.
+ /// </summary>
+ /// <param name="job">The job.</param>
+ /// <returns></returns>
+ public SegmentsGroup Clone(Job job)
+ {
+ SegmentsGroup cloned = base.Clone();
+
+ cloned.Segments = Segments.Select(x => x.Clone()).ToSynchronizedObservableCollection();
+
+ cloned.Job = job;
+ cloned.JobGuid = job.Guid;
+
+ return cloned;
+ }
+
+ ISegment ISegment.Clone()
+ {
+ return Clone() as ISegment;
+ }
+
+ ISegment ISegment.Clone(Job job)
+ {
+ return Clone(job) as ISegment;
+ }
}
} \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.BL/Interfaces/ISegment.cs b/Software/Visual_Studio/Tango.BL/Interfaces/ISegment.cs
index db291c832..53cc92d64 100644
--- a/Software/Visual_Studio/Tango.BL/Interfaces/ISegment.cs
+++ b/Software/Visual_Studio/Tango.BL/Interfaces/ISegment.cs
@@ -1,13 +1,25 @@
-using System;
+using Newtonsoft.Json;
+using System;
using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using Tango.BL.Entities;
+using Tango.Core;
namespace Tango.BL.Interfaces
{
- interface ISegment
+ public interface ISegment
{
Int32 SegmentIndex { get; set; }
+
+ [NotMapped]
+ [JsonIgnore]
+ SynchronizedObservableCollection<BrushStop> BrushStops { get; }
+
+ ISegment Clone();
+
+ ISegment Clone(Job job);
}
}
diff --git a/Software/Visual_Studio/Tango.ColorConversion/DefaultColorConverter.cs b/Software/Visual_Studio/Tango.ColorConversion/DefaultColorConverter.cs
index 510befef4..e3239e607 100644
--- a/Software/Visual_Studio/Tango.ColorConversion/DefaultColorConverter.cs
+++ b/Software/Visual_Studio/Tango.ColorConversion/DefaultColorConverter.cs
@@ -431,7 +431,7 @@ namespace Tango.ColorConversion
public ProcessParametersTable GetRecommendedProcessParameters(Job job, ProcessParametersTablesGroup group, bool useLightInks = false)
{
- var stops = job.Segments.SelectMany(x => x.BrushStops).ToList();
+ var stops = job.OrderedSegmentsWithGroups.SelectMany(x => x.BrushStops).ToList();
if (stops.Count == 0)
{
@@ -567,7 +567,7 @@ namespace Tango.ColorConversion
throw new InvalidOperationException("The specified RML process group does not contain any tables.");
}
- List<BrushStop> stops = job.Segments.Select(x => x.Clone()).SelectMany(x => x.BrushStops).ToList();
+ List<BrushStop> stops = job.OrderedSegmentsWithGroups.Select(x => x.Clone()).SelectMany(x => x.BrushStops).ToList();
if (stops.Count == 0)
{
@@ -601,7 +601,7 @@ namespace Tango.ColorConversion
private ProcessParametersTable GetRecommendedProcessParametersByGamutRegion(Job job, ProcessParametersTablesGroup group)
{
- var stops = job.Segments.SelectMany(x => x.BrushStops).ToList();
+ var stops = job.OrderedSegmentsWithGroups.SelectMany(x => x.BrushStops).ToList();
var standard_stops = stops.Where(x => x.BrushColorSpace != ColorSpaces.Catalog);
var color_catalog_stops = stops.Where(x => x.BrushColorSpace == ColorSpaces.Catalog);
diff --git a/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs b/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs
index 957c53a89..03d21c980 100644
--- a/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs
+++ b/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs
@@ -2532,7 +2532,7 @@ namespace Tango.Integration.Operation
try
{
bool useLightInks = config.UseLightInks;
- if (job.Segments.Count > 1 && !job.EnableInterSegment) useLightInks = false;
+ if (job.OrderedSegmentsWithGroups.Count > 1 && !job.EnableInterSegment) useLightInks = false;
processParameters = converter.GetRecommendedProcessParameters(job, useLightInks);
}
@@ -2548,7 +2548,7 @@ namespace Tango.Integration.Operation
try
{
- foreach (var stop in job.Segments.SelectMany(x => x.BrushStops).ToList())
+ foreach (var stop in job.OrderedSegmentsWithGroups.SelectMany(x => x.BrushStops).ToList())
{
stop.SetLiquidVolumes(job.Machine.Configuration, job.Rml, processParameters);
}
@@ -2611,7 +2611,7 @@ namespace Tango.Integration.Operation
job.Guid = originalJob.Guid;
job.Name = originalJob.Name;
- var jobSegments = job.OrderedSegments;
+ var jobSegments = job.OrderedSegmentsWithGroups;
//Color Conversion
if (config.UseColorConversion)
@@ -2621,7 +2621,7 @@ namespace Tango.Integration.Operation
bool useLightInks = config.UseLightInks;
//Use light inks only if one segment or inter segment is enabled.
- if (job.Segments.Count > 1 && !job.EnableInterSegment) useLightInks = false;
+ if (job.OrderedSegmentsWithGroups.Count > 1 && !job.EnableInterSegment) useLightInks = false;
foreach (var segment in jobSegments)
{
@@ -2679,7 +2679,7 @@ namespace Tango.Integration.Operation
//Modify transparent/white brush stops. (Transparent/white stops should be all zeros and 100% TI)
LogManager.Log("Modifying all 'white' brush stops...");
- foreach (var stop in job.Segments.SelectMany(x => x.BrushStops).Where(x => x.IsTransparent || x.IsWhite).ToList())
+ foreach (var stop in job.OrderedSegmentsWithGroups.SelectMany(x => x.BrushStops).Where(x => x.IsTransparent || x.IsWhite).ToList())
{
foreach (var liquidVolume in stop.LiquidVolumes.Where(x => x.LiquidType != LiquidTypes.TransparentInk && x.LiquidType != LiquidTypes.Lubricant).ToList())
{
@@ -2694,7 +2694,7 @@ namespace Tango.Integration.Operation
}
}
- var segments = job.OrderedSegments.ToList();
+ var segments = job.OrderedSegmentsWithGroups.ToList();
List<RequiredLiquid> requiredLiquids = null;
@@ -2712,7 +2712,24 @@ namespace Tango.Integration.Operation
foreach (var segment in segments)
{
- t.Segments.Add(CreatePMRJobSegment(segment, originalJob, processParameters));
+ if (segment is Segment simpleSegment)
+ {
+ t.Segments.Add(CreatePMRJobSegment(simpleSegment, originalJob, processParameters));
+ }
+ else if (segment is SegmentsGroup group)
+ {
+ List<JobSegment> groupSegments = new List<JobSegment>();
+
+ foreach (var innerSegment in group.OrderedSegments)
+ {
+ groupSegments.Add(CreatePMRJobSegment(innerSegment, originalJob, processParameters));
+ }
+
+ for (int i = 0; i < group.Repeats; i++)
+ {
+ t.Segments.AddRange(groupSegments.ToList());
+ }
+ }
}
requiredLiquids = ValidateJobLiquidQuantity(t, processParameters, job.Machine.Configuration);
@@ -2727,7 +2744,7 @@ namespace Tango.Integration.Operation
JobRequest request = new JobRequest();
- int max = job.OrderedSegments.Last().SegmentIndex + 1;
+ int max = job.OrderedSegmentsWithGroups.Last().SegmentIndex + 1;
for (int i = 0; i < job.NumberOfUnits - 1; i++)
{
@@ -2735,7 +2752,15 @@ namespace Tango.Integration.Operation
{
var cloned = s.Clone(job);
cloned.SegmentIndex = max++;
- job.Segments.Add(cloned);
+
+ if (cloned is Segment simpleSegment)
+ {
+ job.Segments.Add(simpleSegment);
+ }
+ else if (cloned is SegmentsGroup g)
+ {
+ job.SegmentsGroups.Add(g);
+ }
}
}
@@ -2885,7 +2910,24 @@ namespace Tango.Integration.Operation
{
try
{
- ticket.Segments.Add(CreatePMRJobSegment(segment, originalJob, processParameters));
+ if (segment is Segment simpleSegment)
+ {
+ ticket.Segments.Add(CreatePMRJobSegment(simpleSegment, originalJob, processParameters));
+ }
+ else if (segment is SegmentsGroup group)
+ {
+ List<JobSegment> groupSegments = new List<JobSegment>();
+
+ foreach (var innerSegment in group.OrderedSegments)
+ {
+ groupSegments.Add(CreatePMRJobSegment(innerSegment, originalJob, processParameters));
+ }
+
+ for (int i = 0; i < group.Repeats; i++)
+ {
+ ticket.Segments.AddRange(groupSegments.ToList());
+ }
+ }
}
catch (Exception ex)
{
diff --git a/Software/Visual_Studio/Utilities/Tango.JobProgressTester.UI/MainWindowVM.cs b/Software/Visual_Studio/Utilities/Tango.JobProgressTester.UI/MainWindowVM.cs
index d21500685..9dbcb6288 100644
--- a/Software/Visual_Studio/Utilities/Tango.JobProgressTester.UI/MainWindowVM.cs
+++ b/Software/Visual_Studio/Utilities/Tango.JobProgressTester.UI/MainWindowVM.cs
@@ -116,6 +116,7 @@ namespace Tango.JobProgressTester.UI
.WithRML()
.WithSegments()
.WithUser()
+ .WithSegmentsGroups()
.BuildAsync();
JobHandler = new JobHandler2(() => { }, ActiveJob, null, ActiveJob.Rml.GetActiveProcessGroup().ProcessParametersTables.First(), JobHandlerModes.SettingUp);