aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC
diff options
context:
space:
mode:
authorVictoria Plitt <Victoria.Plitt@twine-s.com>2022-02-22 14:41:25 +0200
committerVictoria Plitt <Victoria.Plitt@twine-s.com>2022-02-22 14:41:25 +0200
commit28fa1ab91b3fb7970d9968c5cb1d018c2b44fd69 (patch)
tree040ebb961e0e991436571f11d8a189c92326e4b3 /Software/Visual_Studio/PPC
parent3681ab681f02bbb7cda89de4044fd69bc9d61ab8 (diff)
downloadTango-28fa1ab91b3fb7970d9968c5cb1d018c2b44fd69.tar.gz
Tango-28fa1ab91b3fb7970d9968c5cb1d018c2b44fd69.zip
Implement grouping of segments. Changes in GUI and database. Not in Dying process.
Related Work Items: #4558
Diffstat (limited to 'Software/Visual_Studio/PPC')
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/ColorSelectionView.xaml9
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/ColorSelectionViewVM.cs7
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/BrushStopModel.cs31
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/ColorLibrary.cs3
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/ISegmentModel.cs6
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/JobModel.cs242
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/SegmentModel.cs7
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/SegmentsGroupModel.cs87
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/CopySegmentCommand.cs25
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/RepeatCommand.cs48
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/ReverseCommand.cs2
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/ViewModels/JobViewVM.cs46
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobView.xaml108
13 files changed, 441 insertions, 180 deletions
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/ColorSelectionView.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/ColorSelectionView.xaml
index 7880e8639..34ed8cfb3 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/ColorSelectionView.xaml
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/ColorSelectionView.xaml
@@ -237,10 +237,12 @@
<Canvas Margin="200 50 100 0" Visibility="{Binding SaveMyColorMode, Mode=TwoWay, Converter={StaticResource BooleanToVisibilityConverter}}" >
<Border x:Name="LABPopupGroups" Width="280" Background="Transparent" Height="Auto" MinHeight="100" MaxHeight="450">
<Grid MinWidth="260" >
- <Border Background="{StaticResource TangoPrimaryBackgroundBrush}" CornerRadius="12" BorderThickness="0" Padding="10" MinHeight="100">
+ <Border Background="{StaticResource TangoPrimaryBackgroundBrush}" CornerRadius="12" BorderThickness="0" MinHeight="100">
<Border.Effect>
<DropShadowEffect Opacity="0.5" ShadowDepth="6" Color="Silver" BlurRadius="10" Direction="270"/>
</Border.Effect>
+ <Border Background="{StaticResource TangoPrimaryBackgroundBrush}" CornerRadius="12" BorderThickness="0" Padding="10" MinHeight="100">
+
<StackPanel Orientation="Vertical">
<ListBox HorizontalAlignment="Stretch" MaxHeight="350" Margin="14 10 14 10" ItemsSource="{Binding Libraries}" Style="{StaticResource ListBoxVerticalScroll}"
ScrollViewer.VerticalScrollBarVisibility="Visible" >
@@ -265,6 +267,7 @@
</StackPanel>
</StackPanel>
</Border>
+ </Border>
</Grid>
</Border>
</Canvas>
@@ -497,12 +500,13 @@
<Border x:Name="MyColors" Visibility="{Binding MyColorsMode, Converter={StaticResource BooleanToVisibilityConverter}}" >
<Grid>
<Grid.Background>
- <SolidColorBrush Color="{StaticResource TangoDisabledBackgroundColor}" Opacity="0.9" />
+ <SolidColorBrush Color="{StaticResource TangoDisabledBackgroundColor}" Opacity="0.65" />
</Grid.Background>
<Border Margin="72 151 69 125" CornerRadius="20" Background="{StaticResource TangoPrimaryBackgroundBrush}">
<Border.Effect>
<DropShadowEffect Opacity="0.5" ShadowDepth="6" Color="Silver" BlurRadius="10" Direction="270"/>
</Border.Effect>
+ <Border CornerRadius="20" Background="{StaticResource TangoPrimaryBackgroundBrush}">
<Grid>
<DockPanel >
<Grid DockPanel.Dock="Bottom" Height="137">
@@ -535,6 +539,7 @@
</DockPanel>
</Grid>
</Border>
+ </Border>
</Grid>
</Border>
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/ColorSelectionViewVM.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/ColorSelectionViewVM.cs
index 399289eed..f23206815 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/ColorSelectionViewVM.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/ColorSelectionViewVM.cs
@@ -503,6 +503,7 @@ namespace Tango.PPC.Jobs.Dialogs
if (SelectedBrushStop != null)
{
SelectedBrushStop.ConvertColorToHSB();
+ OKCommand.RaiseCanExecuteChanged();
}
return;
@@ -512,6 +513,7 @@ namespace Tango.PPC.Jobs.Dialogs
if (SelectedBrushStop != null)
{
SelectedBrushStop.ConvertColorToRGB();
+ OKCommand.RaiseCanExecuteChanged();
}
return;
}
@@ -520,6 +522,7 @@ namespace Tango.PPC.Jobs.Dialogs
if (SelectedBrushStop != null)
{
SelectedBrushStop.ConvertColorToLAB();
+ OKCommand.RaiseCanExecuteChanged();
}
return;
}
@@ -528,6 +531,7 @@ namespace Tango.PPC.Jobs.Dialogs
if (SelectedBrushStop != null)
{
SelectedBrushStop.ConvertColorToVolume();
+ OKCommand.RaiseCanExecuteChanged();
}
return;
}
@@ -536,6 +540,7 @@ namespace Tango.PPC.Jobs.Dialogs
if (SelectedBrushStop != null)
{
SelectedBrushStop.ConvertColorToCatalogs(DialogEditObject.Catalogs);
+ OKCommand.RaiseCanExecuteChanged();
}
return;
}
@@ -611,7 +616,7 @@ namespace Tango.PPC.Jobs.Dialogs
protected override bool CanOK()
{
- return SelectedBrushStop != null && !SelectedBrushStop.LiquidVolumesOutOfRange;
+ return SelectedBrushStop != null && !SelectedBrushStop.IsLiquidVolumesOutOfRange;
}
#endregion
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/BrushStopModel.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/BrushStopModel.cs
index 8a071f126..12add3d2f 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/BrushStopModel.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/BrushStopModel.cs
@@ -585,6 +585,8 @@ namespace Tango.PPC.Jobs.Models
}
}
}
+
+ protected bool RequiredMaxLiquidTest { get; set; }
#endregion
public BrushStopModel(SegmentModel segmentModel)
@@ -611,6 +613,7 @@ namespace Tango.PPC.Jobs.Models
ColorCatalogsItem = null;
PreventPropertyUpdate = false;
LiquidVolumesOutOfRange = false;
+ RequiredMaxLiquidTest = false;
}
public BrushStopModel(BrushStop brushStop, SegmentModel segmentModel, int version)
@@ -777,6 +780,7 @@ namespace Tango.PPC.Jobs.Models
cloned.LiquidVolumesOutOfRange = LiquidVolumesOutOfRange;
//this.MapPropertiesTo(cloned, MappingFlags.NoReferenceTypes);
cloned.PreventPropertyUpdate = false;
+ cloned.RequiredMaxLiquidTest = false;
return cloned;
}
@@ -830,6 +834,7 @@ namespace Tango.PPC.Jobs.Models
if (PreventPropertyUpdate)
return;
ColorSpace = ColorSpaces.Volume;
+ RequiredMaxLiquidTest = true;
RaisePropertyChanged(nameof(IsLiquidVolumesOutOfRange));
OnBrushStopFieldValueChanged();
@@ -972,6 +977,8 @@ namespace Tango.PPC.Jobs.Models
RaisePropertyChanged(nameof(Saturation));
RaisePropertyChanged(nameof(Brightness));
}
+ RequiredMaxLiquidTest = false;
+ RaisePropertyChanged(nameof(IsLiquidVolumesOutOfRange));
}
}
@@ -1011,6 +1018,8 @@ namespace Tango.PPC.Jobs.Models
RaisePropertyChanged(nameof(Red));
RaisePropertyChanged(nameof(Green));
RaisePropertyChanged(nameof(Blue));
+ RequiredMaxLiquidTest = false;
+ RaisePropertyChanged(nameof(IsLiquidVolumesOutOfRange));
}
}
@@ -1064,11 +1073,14 @@ namespace Tango.PPC.Jobs.Models
RaisePropertyChanged(nameof(L));
RaisePropertyChanged(nameof(A));
RaisePropertyChanged(nameof(B));
+ RequiredMaxLiquidTest = false;
+ RaisePropertyChanged(nameof(IsLiquidVolumesOutOfRange));
}
}
public void ConvertColorToVolume()
{
+ RequiredMaxLiquidTest = true;
if (ColorSpace != ColorSpaces.Volume)
{
if (ColorSpace == ColorSpaces.Catalog)
@@ -1209,19 +1221,20 @@ namespace Tango.PPC.Jobs.Models
return 0.0;
}
+
public bool IsLiquidVolumesOutOfRange
{
get
{
- //if (ColorSpace == BL.Enumerations.ColorSpaces.Volume)
- // {
- var sum = GetColorNLPerCm(Cyan, LiquidTypes.Cyan) + GetColorNLPerCm(Magenta, LiquidTypes.Magenta) + GetColorNLPerCm(Yellow, LiquidTypes.Yellow) + GetColorNLPerCm(Black, LiquidTypes.Black);
- var maxLiq = GetTotalMaximumLiquidNlPerCMLimit();
- LiquidVolumesOutOfRange = sum > GetTotalMaximumLiquidNlPerCMLimit();
-
- return LiquidVolumesOutOfRange;
- // }
- // else return false;
+ if (RequiredMaxLiquidTest )
+ {
+ var sum = GetColorNLPerCm(Cyan, LiquidTypes.Cyan) + GetColorNLPerCm(Magenta, LiquidTypes.Magenta) + GetColorNLPerCm(Yellow, LiquidTypes.Yellow) + GetColorNLPerCm(Black, LiquidTypes.Black);
+ var maxLiq = GetTotalMaximumLiquidNlPerCMLimit();
+ LiquidVolumesOutOfRange = sum > GetTotalMaximumLiquidNlPerCMLimit();
+
+ return LiquidVolumesOutOfRange;
+ }
+ else return false;
}
}
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/ColorLibrary.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/ColorLibrary.cs
index 511a90e15..502e19dfc 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/ColorLibrary.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/ColorLibrary.cs
@@ -27,7 +27,8 @@ namespace Tango.PPC.Jobs.Models
public string Name
{
get { return _name; }
- set { _name = value; }
+ set { _name = value;
+ RaisePropertyChangedAuto(); }
}
private bool _editColorsGroupMode;
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 9bed7e849..37a8fc33b 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
@@ -9,11 +9,13 @@ namespace Tango.PPC.Jobs.Models
public interface ISegmentModel
{
String Name { get; set; }
- double Length { get; set; }
+ double Length { get; }
+ double LengthWithInterSegment { get; }
bool IsGroupSegment { get; }
bool IsSelected { get; set; }
bool IsLast { get; set; }
Int32 SegmentIndex { get; set; }
double InterSegmentLength { get; }
- }
+ bool EnableInterSegment { get; set; }
+}
}
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 3379149f6..dd8c88971 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
@@ -69,7 +69,8 @@ namespace Tango.PPC.Jobs.Models
{
if (Segments != null)
{
- return Segments.Sum(x => x.LengthWithInterSegment);
+ return GroupingSegments.Sum(x => x.LengthWithInterSegment);
+ //return Segments.Sum(x => x.LengthWithInterSegment);
// return Segments.Sum(x => x.LengthWithFactor) + ((EnableInterSegment && IsAllSegmentsPerSpool) ? (InterSegmentLength * (Segments.Count > 0 ? Segments.Count - 1 : Segments.Count)) : 0);
}
else
@@ -142,8 +143,8 @@ namespace Tango.PPC.Jobs.Models
if (_intersegmentlength != value)
{
_intersegmentlength = value;
- OnInterSegmentlengthChanged();
RaisePropertyChangedAuto();
+ OnInterSegmentlengthChanged();
}
}
}
@@ -314,6 +315,7 @@ namespace Tango.PPC.Jobs.Models
}
}
}
+ public JobTypes JobType { get; set; }
protected SynchronizedObservableCollection<SegmentModel> _segments;
@@ -338,41 +340,39 @@ namespace Tango.PPC.Jobs.Models
}
}
- public ObservableCollection<SegmentModel> EffectiveSegments
+ private bool _enableintersegment;
+ public bool EnableInterSegment
{
get
{
- //if (EnableInterSegment && IsAllSegmentsPerSpool)
- if( IsAllSegmentsPerSpool)
- {
- int max = Segments.Max(x => x.SegmentIndex);
-
- ObservableCollection<SegmentModel> effectiveSegments = new ObservableCollection<SegmentModel>();
-
- foreach (var s in Segments.ToList().OrderBy(x => x.SegmentIndex))
- {
- effectiveSegments.Add(s);
-
- if (s.SegmentIndex != max && s.EnableInterSegment)
- {
- effectiveSegments.Add(CreateInterSegment(InterSegmentLength));
- }
- }
+ return _enableintersegment;
+ }
- return effectiveSegments;
- }
- else
+ set
+ {
+ if (_enableintersegment != value)
{
- return Segments.OrderBy(x => x.SegmentIndex).ToObservableCollection();
+ _enableintersegment = value;
+ RaisePropertyChangedAuto();
+ OnEnableInterSegmentChanged();
}
}
}
+
+ private ObservableCollection<SegmentModel> _effectiveSegments;
+ public ObservableCollection<SegmentModel> EffectiveSegments
+ {
+ get
+ {
+ return _effectiveSegments;
+ }
+ }
- protected ObservableCollection<ISegmentModel> _groupingSegments;
+ protected SynchronizedObservableCollection<ISegmentModel> _groupingSegments;
/// <summary>
/// Gets or sets the display segments.
/// </summary>
- public ObservableCollection<ISegmentModel> GroupingSegments
+ public SynchronizedObservableCollection<ISegmentModel> GroupingSegments
{
get
{
@@ -424,22 +424,32 @@ namespace Tango.PPC.Jobs.Models
}
}
- public int LastNewGroupID { get; set; }
-
+ public int LastGroupID
+ {
+ get
+ {
+ var groups = GroupingSegments.ToList().OfType<SegmentsGroupModel>().ToList();
+ return groups.Count() == 0 ? 0 : groups.Max(x => x.SegmentIndex);
+ }
+ }
+
#endregion
public JobModel(List<ColorSpace> list)
{
ColorSpacesList = list;
_segments = new SynchronizedObservableCollection<SegmentModel>();
- _groupingSegments = new ObservableCollection<ISegmentModel>();
+ _groupingSegments = new SynchronizedObservableCollection<ISegmentModel>();
SegmentsToCopy = new List<SegmentModel>();
+ _effectiveSegments = new ObservableCollection<SegmentModel>();
Segments.CollectionChanged -= Segments_CollectionChanged;
Segments.CollectionChanged += Segments_CollectionChanged;
+
+ GroupingSegments.CollectionChanged -= SegmentsGroup_CollectionChanged;
+ GroupingSegments.CollectionChanged += SegmentsGroup_CollectionChanged;
SelectAllSegments = false;
NumberOfUnits = 1;
- LastNewGroupID = 1;
}
#region modifications
@@ -453,16 +463,21 @@ namespace Tango.PPC.Jobs.Models
{
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++);
+
Dictionary<int, SegmentsGroupModel> groupIDToSegmentsGroup = new Dictionary<int, SegmentsGroupModel>();
foreach (var group in groupedList)
{
- var groupID = group.GroupID;
+ var groupID = group.SegmentIndex;
groupIDToSegmentsGroup[groupID] = group;
};
+ int currentIndex = 1;
foreach (var segment in Segments)
{
if (!segment.IsGroupSegment)
{
+ segment.SegmentIndex = currentIndex;
GroupingSegments.Add(segment);
}
else
@@ -471,10 +486,14 @@ namespace Tango.PPC.Jobs.Models
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));
}
public static SegmentModel CreateInterSegment(double length)
@@ -518,19 +537,102 @@ namespace Tango.PPC.Jobs.Models
#endregion
#region changes
+
+ private void OnEnableInterSegmentChanged()
+ {
+ GroupingSegments.ToList().ForEach(x => x.EnableInterSegment = EnableInterSegment);
+ UpdateEffectiveSegments();
+ }
+
+ private void UpdateEffectiveSegments()
+ {
+ if (IsAllSegmentsPerSpool)
+ {
+ int max = GroupingSegments.Count > 0 ? GroupingSegments.Max(x => x.SegmentIndex) : 0;
+
+ 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);
+ if (segment.SegmentIndex != max && segment.EnableInterSegment)
+ {
+ effectiveSegments.Add(CreateInterSegment(InterSegmentLength));
+ }
+ }
+ else if (s is SegmentsGroupModel)
+ {
+ SegmentsGroupModel segmentsGroup = s as SegmentsGroupModel;
+ List<SegmentModel> segments = segmentsGroup.Segments.ToList();
+ for (int repeats = 0; repeats < segmentsGroup.Repeats; repeats++)
+ {
+ for (int i = 0; i < segments.Count; i++)
+ {
+ if (repeats > 0)
+ {
+ effectiveSegments.Add(segments[i].Clone());
+ }
+ else
+ effectiveSegments.Add(segments[i]);
+
+ }
+ }
+ if (EnableInterSegment &&
+ !(segmentsGroup.SegmentIndex == max && segmentsGroup.SegmentIndex != max))
+ {
+ effectiveSegments.Add(CreateInterSegment(InterSegmentLength));
+ }
+ }
+ }
+ _effectiveSegments = effectiveSegments;
+ }
+ else
+ {
+ foreach (var s in GroupingSegments.OrderBy(x => x.SegmentIndex))
+ {
+ if (s is SegmentModel)
+ {
+ SegmentModel segment = s as SegmentModel;
+ _effectiveSegments.Add(segment);
+ }
+ else if (s is SegmentsGroupModel)
+ {
+ SegmentsGroupModel segmentsGroup = s as SegmentsGroupModel;
+ List<SegmentModel> segments = segmentsGroup.Segments.ToList();
+ for (int repeats = 0; repeats < segmentsGroup.Repeats; repeats++)
+ {
+ for (int i = 0; i < segments.Count; i++)
+ {
+ if (repeats > 0)
+ {
+ _effectiveSegments.Add(segments[i].Clone());
+ }
+ else
+ _effectiveSegments.Add(segments[i]);
+ }
+ }
+ }
+ }
+ }
+ RaisePropertyChanged(nameof(EffectiveSegments));
+ }
+
/// <summary>
/// Handles the CollectionChanged event of the Segments collection.
/// </summary>
- private void Segments_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
+ private void Segments_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
foreach (var segment in Segments.ToList())
{
segment.PropertyChanged -= Segment_PropertyChanged;
segment.PropertyChanged += Segment_PropertyChanged;
}
-
- OnLengthChanged();
- RaisePropertyChanged(nameof(EffectiveSegments));
+
+ //OnLengthChanged();
+ //UpdateEffectiveSegments();
}
/// <summary>
@@ -544,13 +646,13 @@ namespace Tango.PPC.Jobs.Models
}
else if (e.PropertyName == nameof(SegmentModel.SegmentIndex))
{
- RaisePropertyChanged(nameof(EffectiveSegments));
- }
- else if(e.PropertyName == nameof(SegmentModel.EnableInterSegment))
- {
- OnLengthChanged();
- RaisePropertyChanged(nameof(EffectiveSegments));
+ UpdateEffectiveSegments();
}
+ //else if(e.PropertyName == nameof(SegmentModel.EnableInterSegment))
+ //{
+ // OnLengthChanged();
+ // RaisePropertyChanged(nameof(EffectiveSegments));
+ //}
else if(e.PropertyName == nameof(SegmentModel.IsSelected))
{
if (_preventChange) return;
@@ -566,7 +668,43 @@ namespace Tango.PPC.Jobs.Models
RaisePropertyChanged(nameof(HasSelectedItems));
}
}
-
+
+ private void SegmentsGroup_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
+ {
+ foreach (var group in GroupingSegments.ToList())
+ {
+ if (group is SegmentsGroupModel)
+ {
+ (group as SegmentsGroupModel).PropertyChanged -= SegmentsGroup_PropertyChanged;
+ (group as SegmentsGroupModel).PropertyChanged += SegmentsGroup_PropertyChanged;
+ }
+ }
+ OnLengthChanged();
+ UpdateEffectiveSegments();
+ }
+
+ private void SegmentsGroup_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
+ {
+ if (e.PropertyName == nameof(SegmentsGroupModel.Repeats))
+ {
+ OnLengthChanged();
+ UpdateEffectiveSegments();
+ }
+ else if (e.PropertyName == nameof(SegmentModel.IsSelected))
+ {
+ //if (_preventChange) return;
+ //if (Segments.ToList().TrueForAll(x => x.IsSelected))
+ //{
+ // _selectAllSegments = true;
+ //}
+ //else
+ //{
+ // _selectAllSegments = false;
+ //}
+ //RaisePropertyChanged(nameof(SelectAllSegments));
+ //RaisePropertyChanged(nameof(HasSelectedItems));
+ }
+ }
/// <summary>
/// Called when the <see cref="Length"/> property has been changed
@@ -586,7 +724,7 @@ namespace Tango.PPC.Jobs.Models
if (Segments != null )
{
_preventChange = true;
- Segments.ToList().ForEach(x => x.IsSelected = SelectAllSegments);
+ GroupingSegments.ToList().ForEach(x => x.IsSelected = SelectAllSegments);
_preventChange = false;
RaisePropertyChanged(nameof(HasSelectedItems));
}
@@ -595,10 +733,10 @@ namespace Tango.PPC.Jobs.Models
private void OnInterSegmentlengthChanged()
{
_preventChange = true;
- if (Segments.Count > 0)
+ if (GroupingSegments.Count > 0)
{
- int max = Segments.Max(x => x.SegmentIndex);
- Segments.Where(i => i.SegmentIndex != max).ToList().ForEach(x => x.EnableInterSegment = InterSegmentLength > 0);
+ int max = GroupingSegments.Max(x => x.SegmentIndex);
+ GroupingSegments.Where(i => i.SegmentIndex != max).ToList().ForEach(x => x.EnableInterSegment = InterSegmentLength > 0);
}
_preventChange = false;
}
@@ -612,19 +750,19 @@ namespace Tango.PPC.Jobs.Models
if (false == Segments.ToList().Any(x => x.IsSelected))
return;
LogManager.Log("Copy selected segments.");
- int max = Segments.Max(x => x.SegmentIndex);
- Segments.Where(i => i.IsSelected && i.SegmentIndex != max).ToList().ForEach(y => y.EnableInterSegment = true);
+ int max = GroupingSegments.Max(x => x.SegmentIndex);
+ GroupingSegments.Where(i => i.IsSelected && i.SegmentIndex != max).ToList().ForEach(y => y.EnableInterSegment = true);
}
public void SwapSegments(int index1, int index2)
{
- if (index1 < 0 || index1 >= Segments.Count)
+ if (index1 < 0 || index1 >= GroupingSegments.Count)
return;
- if (index2 < 0 || index2 >= Segments.Count)
+ if (index2 < 0 || index2 >= GroupingSegments.Count)
return;
- var tmpIndex = Segments[index2];
- Segments[index2] = Segments[index1];
- Segments[index1] = tmpIndex;
+ var tmpIndex = GroupingSegments[index2];
+ GroupingSegments[index2] = GroupingSegments[index1];
+ GroupingSegments[index1] = tmpIndex;
}
#endregion
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 0773abf19..e7282bf8d 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
@@ -31,7 +31,7 @@ namespace Tango.PPC.Jobs.Models
public int GroupID {
get
{
- return SegmentsGroupModel == null ? -1 : SegmentsGroupModel.GroupID;
+ return SegmentsGroupModel == null ? -1 : SegmentsGroupModel.SegmentIndex;
}
}
@@ -136,8 +136,9 @@ namespace Tango.PPC.Jobs.Models
_enableintersegment = value;
RaisePropertyChangedAuto();
RaisePropertyChanged(nameof(LengthWithInterSegment));
- RaisePropertyChanged(nameof(InterSegmentLength));
+
}
+ RaisePropertyChanged(nameof(InterSegmentLength));
}
}
@@ -450,7 +451,7 @@ namespace Tango.PPC.Jobs.Models
Job = jobModel;
GUID = guid;
IsLast = false;
- EnableInterSegment = jobModel.InterSegmentLength > 0;
+ EnableInterSegment = jobModel.EnableInterSegment;
}
public SegmentModel()
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 0c3863f78..7a2850684 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
@@ -12,9 +12,24 @@ namespace Tango.PPC.Jobs.Models
{
#region Properties
- public ObservableCollection<SegmentModel> Segments { get; set; }
-
- public int GroupID{ get; set; }
+ public SynchronizedObservableCollection<SegmentModel> Segments { get; set; }
+
+ private Int32 _segnmentIndex;
+ public Int32 SegmentIndex
+ {
+ get
+ {
+ return _segnmentIndex;
+ }
+ set
+ {
+ if(_segnmentIndex != value)
+ {
+ _segnmentIndex = value;
+ RaisePropertyChangedAuto();
+ }
+ }
+ }
private int _repeats;
@@ -23,6 +38,7 @@ namespace Tango.PPC.Jobs.Models
get { return _repeats; }
set { _repeats = value;
RaisePropertyChangedAuto();
+ RaisePropertyChanged(nameof(Length));
}
}
@@ -34,6 +50,8 @@ namespace Tango.PPC.Jobs.Models
RaisePropertyChangedAuto();
}
}
+ public JobModel Job { get; set; }
+
protected Double _length;
/// <summary>
/// Gets or sets the length.
@@ -44,13 +62,19 @@ namespace Tango.PPC.Jobs.Models
{
return Segments.Count == 0 ? 0 : Segments.ToList().Sum(x=>x.Length);
}
- set
+
+ }
+
+ public Double LengthWithInterSegment
+ {
+ get
{
- if (_length != value)
+ if (Job != null )
{
- _length = value;
- RaisePropertyChangedAuto();
+ return EnableInterSegment ? (Length + Job.InterSegmentLength) * Repeats : Length * Repeats;
}
+ return Length;
+ //return Segments.Count == 0 ? 0 : Segments.ToList().Sum(x => x.LengthWithInterSegment) * Repeats;
}
}
@@ -75,13 +99,19 @@ namespace Tango.PPC.Jobs.Models
}
}
- public bool IsLast { get; set; }
- public Int32 SegmentIndex {
- get {
- return Segments.Count == 0 ? 0 : Segments.ToList().OrderBy(x => x.SegmentIndex).Select(x => x.SegmentIndex).FirstOrDefault();
+ private bool _isLast;
+
+ public bool IsLast
+ {
+ get { return _isLast; }
+ set
+ {
+ _isLast = value;
+ RaisePropertyChangedAuto();
}
- set { }
}
+
+
public int FirstSegmentIndex {
get
{
@@ -108,22 +138,45 @@ namespace Tango.PPC.Jobs.Models
{
get
{
- return Segments.Count == 0 ? 0 : Segments.ToList().Select(x => x.InterSegmentLength).FirstOrDefault();
+ return Job == null ? 0 : Job.InterSegmentLength;
+ // return Segments.Count == 0 ? 0 : Segments.ToList().Select(x => x.InterSegmentLength).FirstOrDefault();
}
}
+ protected Boolean _enableintersegment;
+ public Boolean EnableInterSegment
+ {
+ get { return _enableintersegment; }
+ set
+ {
+ if (_enableintersegment != value)
+ {
+ _enableintersegment = value;
+ RaisePropertyChangedAuto();
+ RaisePropertyChanged(nameof(LengthWithInterSegment));
+ RaisePropertyChanged(nameof(InterSegmentLength));
+
+ }
+
+ }
+ }
+
#endregion
- public SegmentsGroupModel(List<SegmentModel> selectedSegments)
+ public SegmentsGroupModel(JobModel jobModel, List<SegmentModel> selectedSegments)
{
- Segments = selectedSegments.ToObservableCollection();
+ Job = jobModel;
+ Segments = selectedSegments.ToSynchronizedObservableCollection();
Repeats = 1;
+ EnableInterSegment = jobModel.EnableInterSegment;
}
- public SegmentsGroupModel()
+ public SegmentsGroupModel(JobModel jobModel)
{
- Segments = new ObservableCollection<SegmentModel>();
+ Job = jobModel;
+ Segments = new SynchronizedObservableCollection<SegmentModel>();
Repeats = 1;
+ EnableInterSegment = jobModel.EnableInterSegment;
}
}
}
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 059fd4bec..e82e10e49 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
@@ -21,12 +21,27 @@ namespace Tango.PPC.Jobs.UndoRedoCommands
if (false == _jobModel.Segments.ToList().Any(x => x.IsSelected))
return;
//LogManager.Log("Copy selected segments.");
-
- foreach (var segment in _jobModel.Segments.Where(i => i.IsSelected).ToList())
+ int additionalGroupIndex = 1;
+ foreach (var segment in _jobModel.GroupingSegments.Where(i => i.IsSelected).ToList())
{
- SegmentModel newSegmentModel = segment.Clone();
- newSegmentModel.SegmentIndex = segment.SegmentIndex + 1;
- _jobModel.SegmentsToCopy.Add(newSegmentModel);
+ 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);
+ }
}
}
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 6ad0f95cc..cdce7739a 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,21 +10,20 @@ namespace Tango.PPC.Jobs.UndoRedoCommands
public class RepeatCommand : IUndoRedoCommand
{
private JobModel _jobModel;
- private List<SegmentModel> _selectedSegments;
-
+ private List<ISegmentModel> _selectedSegments;
+
public RepeatCommand(JobModel job)
{
_jobModel = job;
-
- _selectedSegments = new List<SegmentModel>();
- for (int index = 0; index < _jobModel.Segments.Count; index++)
+ _selectedSegments = new List<ISegmentModel>();
+ for (int index = 0; index < _jobModel.GroupingSegments.Count; index++)
{
- var segment = _jobModel.Segments[index];
- if (segment.IsSelected && false == segment.IsGroupSegment)
+ var segment = _jobModel.GroupingSegments[index];
+ if (segment.IsSelected )
{
_selectedSegments.Add(segment);
}
- else if (_selectedSegments.Count > 0)
+ else if (_selectedSegments.Count > 0)//selected items should be in turn
{
break;
}
@@ -35,10 +34,23 @@ namespace Tango.PPC.Jobs.UndoRedoCommands
{
if (_selectedSegments.Count == 0)
return;
- _jobModel.LastNewGroupID++;
- SegmentsGroupModel group = new SegmentsGroupModel(_selectedSegments) { GroupID = _jobModel.LastNewGroupID };
- _selectedSegments.ForEach(x => { x.SegmentsGroupModel = group; x.IsSelected = false; });
-
+
+ List<SegmentModel> selectedsegments = new List<SegmentModel>();
+ foreach (var segm in _selectedSegments)
+ {
+ if (segm is SegmentModel)
+ selectedsegments.Add((SegmentModel)segm);
+ else if (segm is SegmentsGroupModel)
+ {
+ selectedsegments.AddRange(((SegmentsGroupModel)segm).Segments);
+ }
+ }
+
+ SegmentsGroupModel group = new SegmentsGroupModel(_jobModel, selectedsegments) ;
+ group.SegmentIndex = group.FirstSegmentIndex;
+
+ selectedsegments.ForEach(x => { x.SegmentsGroupModel = group; x.IsSelected = false; });
+
_jobModel.LoadGroupingSegments();
}
@@ -46,8 +58,16 @@ namespace Tango.PPC.Jobs.UndoRedoCommands
{
if (_selectedSegments.Count == 0)
return;
- _selectedSegments.ForEach(x => { x.SegmentsGroupModel = null; });
- _jobModel.LastNewGroupID--;
+ foreach (var segm in _selectedSegments)
+ {
+ if (segm is SegmentModel)
+ ((SegmentModel)segm).SegmentsGroupModel = null;
+ else if (segm is SegmentsGroupModel)
+ {
+ SegmentsGroupModel group = (SegmentsGroupModel)segm;
+ group.Segments.ToList().ForEach(x => x.SegmentsGroupModel = group);
+ }
+ }
_jobModel.LoadGroupingSegments();
}
}
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 94527d236..f34a3eaf6 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
@@ -15,7 +15,7 @@ namespace Tango.PPC.Jobs.UndoRedoCommands
public ReverseCommand(JobModel job)
{
_jobModel = job;
- _indexes = _jobModel.Segments.Select((segm, ind) => new { Index = ind, Segment = segm }).Where( x=>x.Segment.IsSelected).Select(t=> t.Index).ToList();
+ _indexes = _jobModel.GroupingSegments.Select((segm, ind) => new { Index = ind, Segment = segm }).Where( x=>x.Segment.IsSelected).Select(t=> t.Index).ToList();
}
public void Execute()
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 0ffc65fc0..f67c70bf4 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
@@ -281,6 +281,7 @@ namespace Tango.PPC.Jobs.ViewModels
public RelayCommand<SegmentsGroupModel> UngroupSegmentsCommand { get; set; }
public RelayCommand<SegmentsGroupModel> DeleteSegmentsGroupCommand { get; set; }
+ public RelayCommand<SegmentsGroupModel> RepeatSegmentsGroupCommand { get; set; }
#endregion
@@ -354,6 +355,7 @@ namespace Tango.PPC.Jobs.ViewModels
DeleteSegmentsGroupCommand = new RelayCommand<SegmentsGroupModel>(DeleteSegmentsGroup);
RepeateSegmentCommand = new RelayCommand(RepeateSegments);
UngroupSegmentsCommand = new RelayCommand<SegmentsGroupModel>(UngroupSegments);
+ RepeatSegmentsGroupCommand = new RelayCommand<SegmentsGroupModel>(RepeatSegmentsGroup);
PasteCommand = new RelayCommand(Paste);
CopyCommand = new RelayCommand(Copy);
UndoCommand = new RelayCommand(Undo);//(x) => { return UndoRedoManager.Instance.IsEnableUndoOperation(); }
@@ -505,7 +507,10 @@ namespace Tango.PPC.Jobs.ViewModels
ColorSpace = Job.ColorSpace,
SpoolType = Job.SpoolType,
User = Job.User,
- Machine = Job.Machine
+ Machine = Job.Machine,
+ JobType = Job.JobType,
+ InterSegmentLength = Job.InterSegmentLength,
+ EnableInterSegment = Job.EnableInterSegment
};
Dictionary<string, SegmentsGroupModel> guidToGroup = new Dictionary<string, SegmentsGroupModel>();
foreach (var segm in Job.Segments)
@@ -560,7 +565,7 @@ namespace Tango.PPC.Jobs.ViewModels
}
else
{
- segmentsGroupModel = new SegmentsGroupModel() { GroupID = segm.SegmentsGroup.GroupIndex, Repeats = segm.SegmentsGroup.Repeats };
+ segmentsGroupModel = new SegmentsGroupModel(jobModel) { SegmentIndex = segm.SegmentsGroup.SegmentIndex, Repeats = segm.SegmentsGroup.Repeats };
guidToGroup[segm.SegmentsGroupGuid] = segmentsGroupModel;
segmentsGroupModel.Segments.Add(segmentModel);
segmentModel.SegmentsGroupModel = segmentsGroupModel;
@@ -579,20 +584,19 @@ namespace Tango.PPC.Jobs.ViewModels
jobModel.InterSegmentLength = Job.EnableInterSegment ? Job.InterSegmentLength : 0;
- jobModel.Segments.Last().IsLast = true;
jobModel.LoadGroupingSegments();
JobModel = jobModel;
//create grouping
SegmentsCollectionView = CollectionViewSource.GetDefaultView(JobModel.GroupingSegments);
SegmentsCollectionView.SortDescriptions.Add(new SortDescription(nameof(SegmentModel.SegmentIndex), ListSortDirection.Ascending));
UndoRedoManager.Instance.ClearAll();
+ ArrangeSegmentsIndixes();
}
private void Job_NameChanged(object sender, string e)
{
DyeCommand.RaiseCanExecuteChanged();
}
-
public override void OnBeforeNavigatedFrom()
{
base.OnBeforeNavigatedFrom();
@@ -668,11 +672,15 @@ namespace Tango.PPC.Jobs.ViewModels
Job.Name = vm.JobName;
JobModel.Name = vm.JobName;
- Job.EnableInterSegment = vm.WhiteGap > 0;
+
Job.InterSegmentLength = vm.WhiteGap;
+ Job.EnableInterSegment = vm.WhiteGap > 0;
JobModel.InterSegmentLength = vm.WhiteGap;
+ JobModel.EnableInterSegment = vm.WhiteGap > 0;
+
Job.SpoolType = vm.SelectedSpoolType;
JobModel.SpoolType = vm.SelectedSpoolType;//update length!!!!
+
SelectedRML = vm.SelectedRML;
if (vm.IsDuplicate)
@@ -809,17 +817,17 @@ namespace Tango.PPC.Jobs.ViewModels
private async void RepeatSegmentsGroup( SegmentsGroupModel group)
{
- var maxLength = 999;
- var maxRep = (maxLength == 0 ? 999 : (maxLength / JobModel.Length));
-
- var vm = await NotificationProvider.ShowDialog<RepeatJobViewVM>(new RepeatJobViewVM($"Edit \"Group {group.GroupID}\" Repeat", group.Repeats)
+ var maxLength = Job.SpoolType.Length == 0 ? 999 : Job.SpoolType.Length;
+ var maxRep = (maxLength - JobModel.Length)/ group.Length;
+
+ var vm = await NotificationProvider.ShowDialog<RepeatJobViewVM>(new RepeatJobViewVM($"Edit \"Group {group.SegmentIndex}\" Repeat", group.Repeats)
{
MaxRepeations = (int)maxRep
});
if (vm.DialogResult)
{
- JobModel.NumberOfUnits = vm.Repeats;
+ group.Repeats = vm.Repeats;
}
}
@@ -893,7 +901,8 @@ namespace Tango.PPC.Jobs.ViewModels
int index = 1;
int count = JobModel.Segments.Count();
- foreach (var segment in JobModel.Segments)
+ // foreach (var segment in JobModel.Segments)
+ foreach (var segment in JobModel.GroupingSegments)
{
segment.IsLast = ( index == count)? true : false;
segment.SegmentIndex = index++;
@@ -1176,7 +1185,7 @@ namespace Tango.PPC.Jobs.ViewModels
private void Reverse()
{
- if (false == JobModel.Segments.ToList().Any(x => x.IsSelected))
+ if (false == JobModel.GroupingSegments.ToList().Any(x => x.IsSelected))
return;
UndoRedoManager.Instance.InsertAndExecuteCommand(new ReverseCommand(JobModel));
@@ -1220,14 +1229,16 @@ namespace Tango.PPC.Jobs.ViewModels
private void RepeateSegments()
{
- if ( (JobModel.Segments.ToList().Where(x => x.IsSelected).Count()) < 2)
+ if ( (JobModel.GroupingSegments.ToList().Where(x => x.IsSelected).Count()) < 2)
return;
UndoRedoManager.Instance.InsertAndExecuteCommand(new RepeatCommand(JobModel));
+ ArrangeSegmentsIndixes();
}
private void UngroupSegments(SegmentsGroupModel segmentsGroup)
{
UndoRedoManager.Instance.InsertAndExecuteCommand(new UnGroupSegmentsCommand(JobModel, segmentsGroup));
+ ArrangeSegmentsIndixes();
}
private void Paste()
@@ -1290,7 +1301,7 @@ namespace Tango.PPC.Jobs.ViewModels
Job.Segments.Clear();
- Dictionary<int, SegmentsGroup> groupIDToSegmentsGroupGuid = new Dictionary<int, SegmentsGroup>();
+ Dictionary<int, SegmentsGroup> segmentIndexToGroup = new Dictionary<int, SegmentsGroup>();
foreach (var segment in JobModel.Segments.OrderBy(x => x.SegmentIndex).ToList())
{
@@ -1304,15 +1315,16 @@ namespace Tango.PPC.Jobs.ViewModels
if(segment.IsGroupSegment)
{
SegmentsGroup dbSegmentsGroup;
- if (false == groupIDToSegmentsGroupGuid.TryGetValue(segment.SegmentsGroupModel.GroupID, out 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.GroupIndex = segment.SegmentsGroupModel.GroupID;
+ dbSegmentsGroup.SegmentIndex = segment.SegmentsGroupModel.SegmentIndex;
+ dbSegmentsGroup.Job = Job;
_db.SegmentsGroups.Add(dbSegmentsGroup);
dbSegment.SegmentsGroup = dbSegmentsGroup;
- groupIDToSegmentsGroupGuid[segment.SegmentsGroupModel.GroupID] = dbSegmentsGroup;
+ segmentIndexToGroup[segment.SegmentsGroupModel.SegmentIndex] = dbSegmentsGroup;
}
else
{
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 2f3646f9f..d90828cce 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
@@ -430,11 +430,11 @@
<StackPanel Grid.Row="0" DockPanel.Dock="Left">
<StackPanel Margin="0 0 0 0" Orientation="Horizontal" >
<TextBlock FontSize="{StaticResource TangoTitleFontSize}">
- <Run>Group </Run>
- <Run Text="{Binding GroupID, Mode=OneWay,IsAsync=True,FallbackValue='0000'}"></Run>
- <Run Text="{Binding DisplayIndexes, Mode=OneWay,IsAsync=True,FallbackValue='0000'}"></Run>
+ <Run>Group #</Run>
+ <Run Text="{Binding SegmentIndex, Mode=OneWay,IsAsync=True,FallbackValue='0000'}"></Run>
+
</TextBlock>
- <touch:TouchButton Background="Transparent" Width="Auto" EnableDropShadow="False">
+ <touch:TouchButton Background="Transparent" Width="Auto" EnableDropShadow="False" Command="{Binding ElementName=view,Path=DataContext.RepeatSegmentsGroupCommand}" CommandParameter="{Binding}">
<TextBlock Margin="10 0 0 0" Foreground="{StaticResource TangoPrimaryAccentBrush}" TextDecorations="Underline">
<Run>x</Run>
<Run Text="{Binding Repeats, Mode=OneWay,IsAsync=True,FallbackValue='0000'}"></Run>
@@ -443,7 +443,7 @@
</StackPanel>
<StackPanel Margin="0 0 0 0" Orientation="Horizontal">
<controls:FastTextBlock VerticalAlignment="Bottom" DockPanel.Dock="Left" Text="Length (m):" FontSize="18"></controls:FastTextBlock>
- <touch:TouchNumericTextBox Margin="20 0 0 0" Width="92" DockPanel.Dock="Right" Value="{Binding Length, UpdateSourceTrigger=LostFocus}" StringFormat="0.0" AutoCalculateJogStep="False" HasDecimalPoint="True" Minimum="1" Maximum="100000" KeyboardContainer="{Binding ElementName=Container}" FontSize="18" ValueChangedEnd="Length_ValueChanged" TextGotFocus="Length_BeforeChangeValue"/>
+ <controls:FastTextBlock Margin="20 0 0 0" Width="92" VerticalAlignment="Bottom" DockPanel.Dock="Left" Text="{Binding Length}" FontSize="18"></controls:FastTextBlock>
</StackPanel>
</StackPanel>
</DockPanel>
@@ -460,33 +460,32 @@
</RectangleGeometry>
</Border.Clip>
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
- <ItemsControl ClipToBounds="False" ItemsSource="{Binding Segments}" >
- <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=ItemsControl}" Path="DataContext.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>
+ <ItemsControl ClipToBounds="False" ItemsSource="{Binding Segments}" >
+ <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=ItemsControl}" Path="DataContext.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>
<Border Height="40" Width="151" Opacity="1" Background="#32787880" HorizontalAlignment="Center" CornerRadius="8" VerticalAlignment="Center">
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="{StaticResource TangoComboBoxItemFontSize}"> Grouped</TextBlock>
</Border>
</Grid>
-
</Border>
<Grid Grid.Row="2" x:Name="add_new_segment_gap" HorizontalAlignment="Stretch" Margin="0 30 0 0" >
<Grid.RowDefinitions>
@@ -518,19 +517,19 @@
<DockPanel Margin="0 20 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}}">
+ <!--<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}}">
<TextBlock Margin="10 2 0 0" FontSize="{StaticResource TangoButtonFontSize}" VerticalAlignment="Center">Delete Gap</TextBlock>
- </touch:TouchButton>
- <touch:TouchButton x:Name="addGap" DockPanel.Dock="Right" HorizontalAlignment="Left" VerticalAlignment="Center" Command="{Binding AddGapCommand}" EnableDropShadow="False" Foreground="{StaticResource TangoKeyboardKeyDarkTextBrush}" Background="Transparent" BorderThickness="0" Visibility="{Binding EnableInterSegment, Converter={StaticResource BooleanToVisibilityInverseConverter}}">
+ </touch:TouchButton>-->
+ <!--<touch:TouchButton x:Name="addGap" DockPanel.Dock="Right" HorizontalAlignment="Left" VerticalAlignment="Center" Command="{Binding AddGapCommand}" EnableDropShadow="False" Foreground="{StaticResource TangoKeyboardKeyDarkTextBrush}" Background="Transparent" BorderThickness="0" Visibility="{Binding EnableInterSegment, Converter={StaticResource BooleanToVisibilityInverseConverter}}">
<StackPanel Orientation="Horizontal">
<Border Height="35" Width="35" BorderThickness="0" Background="Transparent" HorizontalAlignment="Left">
<Image Stretch="Fill" RenderOptions.BitmapScalingMode="Fant" Source="../Images/JobView/add_gap.png"/>
</Border>
<TextBlock Margin="10 2 0 0" FontSize="{StaticResource TangoButtonFontSize}" VerticalAlignment="Center">Add Gap</TextBlock>
</StackPanel>
- </touch:TouchButton>
- </Grid>
+ </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">
<StackPanel Orientation="Horizontal">
<Border Height="35" Width="35" BorderThickness="0" Background="Transparent" HorizontalAlignment="Left">
@@ -553,7 +552,6 @@
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
- <RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<DockPanel>
<Rectangle DockPanel.Dock="Top" Stroke="{StaticResource TangoDividerBrush}" StrokeThickness="1" VerticalAlignment="Top" Margin="0 0 0 10"/>
@@ -615,7 +613,6 @@
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
- <RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<DockPanel>
<Rectangle DockPanel.Dock="Top" Stroke="{StaticResource TangoDividerBrush}" StrokeThickness="1" VerticalAlignment="Top" Margin="0 0 0 10"/>
@@ -637,11 +634,10 @@
<StackPanel DockPanel.Dock="Left">
<StackPanel Margin="0 10 0 0" Orientation="Horizontal" >
<TextBlock FontSize="{StaticResource TangoTitleFontSize}">
- <Run>Group </Run>
- <Run Text="{Binding GroupID, Mode=OneWay,IsAsync=True,FallbackValue='0000'}"></Run>
- <Run Text="{Binding DisplayIndexes, Mode=OneWay,IsAsync=True,FallbackValue='0000'}"></Run>
+ <Run>Group #</Run>
+ <Run Text="{Binding SegmentIndex, Mode=OneWay,IsAsync=True,FallbackValue='0000'}"></Run>
</TextBlock>
- <touch:TouchButton Margin="10 0 0 0" Background="Transparent" Width="Auto" EnableDropShadow="False">
+ <touch:TouchButton Margin="10 0 0 0" Background="Transparent" Width="Auto" EnableDropShadow="False" Command="{Binding ElementName=view,Path=DataContext.RepeatSegmentsGroupCommand}" CommandParameter="{Binding}">
<TextBlock Foreground="{StaticResource TangoPrimaryAccentBrush}" TextDecorations="Underline">
<Run>x</Run>
<Run Text="{Binding Repeats, Mode=OneWay,IsAsync=True,FallbackValue='0000'}"></Run>
@@ -653,18 +649,18 @@
<StackPanel Grid.Row="1" Orientation="Vertical">
<Border Height="50" x:Name="brush_border" Margin="0 10 0 0" CornerRadius="25" Background="{StaticResource TangoPrimaryBackgroundBrush}" BorderThickness="1" BorderBrush="{StaticResource TangoGrayBrush}" ClipToBounds="False">
- <Border.Clip>
- <RectangleGeometry RadiusX="25" RadiusY="25">
- <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 HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
- <ItemsControl ClipToBounds="False" ItemsSource="{Binding Segments}" >
+ <Border.Clip>
+ <RectangleGeometry RadiusX="25" RadiusY="25">
+ <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 HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
+ <ItemsControl ClipToBounds="False" ItemsSource="{Binding Segments}" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" ClipToBounds="False"></StackPanel>
@@ -689,9 +685,9 @@
<Border Height="28" Width="150" BorderThickness="0" BorderBrush="Transparent" Opacity="20" Background="#32787880" HorizontalAlignment="Center" CornerRadius="8" VerticalAlignment="Center">
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="{StaticResource TangoComboBoxItemFontSize}"> Grouped</TextBlock>
</Border>
-
- </Grid>
-
+
+ </Grid>
+
</Border>
<Border x:Name="gapBorder" Margin="0 20 0 0" Height="24" ClipToBounds="False" CornerRadius="10" Visibility="{Binding EnableInterSegment, Converter={StaticResource BooleanToVisibilityConverter}}">
<Border.Clip>
@@ -706,8 +702,8 @@
</Border.Clip>
<Grid>
<TextBlock FontSize="{StaticResource TangoDefaultFontSize}" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="4">
- <Run Text="5m"></Run>
- <Run Text=" Gap"></Run>
+ <Run Text="{Binding InterSegmentLength, Mode=OneWay}"></Run>
+ <Run Text="m Gap"></Run>
</TextBlock>
<Rectangle Stroke="{StaticResource TangoGrayBrush}" StrokeThickness="1" StrokeDashArray="5 5 5 5" RadiusX="12" RadiusY="12" />
</Grid>