aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Xml/TokenReader.cs
blob: 83d3315ed7098b3a32457f824d015e698eb6352b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)

using System;
using System.Collections.Generic;
using System.Linq;

namespace Tango.Scripting.Editors.Xml
{
	class TokenReader
	{
		string input;
		int    inputLength;
		int    currentLocation;
		
		// CurrentLocation is assumed to be touched and the fact does not
		//   have to be recorded in this variable.
		// This stores any value bigger than that if applicable.
		// Acutal value is max(currentLocation, maxTouchedLocation).
		int    maxTouchedLocation;
		
		public int InputLength {
			get { return inputLength; }
		}
		
		public int CurrentLocation {
			get { return currentLocation; }
		}
		
		public int MaxTouchedLocation {
			get { return Math.Max(currentLocation, maxTouchedLocation); }
		}
		
		public TokenReader(string input)
		{
			this.input = input;
			this.inputLength = input.Length;
		}
		
		protected bool IsEndOfFile()
		{
			return currentLocation == inputLength;
		}
		
		protected bool HasMoreData()
		{
			return currentLocation < inputLength;
		}
		
		protected void AssertHasMoreData()
		{
			AXmlParser.Assert(HasMoreData(), "Unexpected end of file");
		}
		
		protected bool TryMoveNext()
		{
			if (currentLocation == inputLength) return false;
			
			currentLocation++;
			return true;
		}
		
		protected void Skip(int count)
		{
			AXmlParser.Assert(currentLocation + count <= inputLength, "Skipping after the end of file");
			currentLocation += count;
		}
		
		protected void GoBack(int oldLocation)
		{
			AXmlParser.Assert(oldLocation <= currentLocation, "Trying to move forward");
			maxTouchedLocation = Math.Max(maxTouchedLocation, currentLocation);
			currentLocation = oldLocation;
		}
		
		protected bool TryRead(char c)
		{
			if (currentLocation == inputLength) return false;
			
			if (input[currentLocation] == c) {
				currentLocation++;
				return true;
			} else {
				return false;
			}
		}
		
		protected bool TryReadAnyOf(params char[] c)
		{
			if (currentLocation == inputLength) return false;
			
			if (c.Contains(input[currentLocation])) {
				currentLocation++;
				return true;
			} else {
				return false;
			}
		}
		
		protected bool TryRead(string text)
		{
			if (TryPeek(text)) {
				currentLocation += text.Length;
				return true;
			} else {
				return false;
			}
		}
		
		protected bool TryPeekPrevious(char c, int back)
		{
			if (currentLocation - back == inputLength) return false;
			if (currentLocation - back < 0 ) return false;
			
			return input[currentLocation - back] == c;
		}
		
		protected bool TryPeek(char c)
		{
			if (currentLocation == inputLength) return false;
			
			return input[currentLocation] == c;
		}
		
		protected bool TryPeekAnyOf(params char[] chars)
		{
			if (currentLocation == inputLength) return false;
			
			return chars.Contains(input[currentLocation]);
		}
		
		protected bool TryPeek(string text)
		{
			if (!TryPeek(text[0])) return false; // Early exit
			
			maxTouchedLocation = Math.Max(maxTouchedLocation, currentLocation + (text.Length - 1));
			// The following comparison 'touches' the end of file - it does depend on the end being there
			if (currentLocation + text.Length > inputLength) return false;
			
			return input.Substring(currentLocation, text.Length) == text;
		}
		
		protected bool TryPeekWhiteSpace()
		{
			if (currentLocation == inputLength) return false;
			
			char c = input[currentLocation];
			return ((int)c <= 0x20) && (c == ' ' || c == '\t' || c == '\n' || c == '\r');
		}
		
		// The move functions do not have to move if already at target
		// The move functions allow 'overriding' of the document length
		
		protected bool TryMoveTo(char c)
		{
			return TryMoveTo(c, inputLength);
		}
		
		protected bool TryMoveTo(char c, int inputLength)
		{
			if (currentLocation == inputLength) return false;
			int index = input.IndexOf(c, currentLocation, inputLength - currentLocation);
			if (index != -1) {
				currentLocation = index;
				return true;
			} else {
				currentLocation = inputLength;
				return false;
			}
		}
		
		protected bool TryMoveToAnyOf(params char[] c)
		{
			return TryMoveToAnyOf(c, inputLength);
		}
		
		protected bool TryMoveToAnyOf(char[] c, int inputLength)
		{
			if (currentLocation == inputLength) return false;
			int index = input.IndexOfAny(c, currentLocation, inputLength - currentLocation);
			if (index != -1) {
				currentLocation = index;
				return true;
			} else {
				currentLocation = inputLength;
				return false;
			}
		}
		
		protected bool TryMoveTo(string text)
		{
			return TryMoveTo(text, inputLength);
		}
		
		protected bool TryMoveTo(string text, int inputLength)
		{
			if (currentLocation == inputLength) return false;
			int index = input.IndexOf(text, currentLocation, inputLength - currentLocation, StringComparison.Ordinal);
			if (index != -1) {
				maxTouchedLocation = index + text.Length - 1;
				currentLocation = index;
				return true;
			} else {
				currentLocation = inputLength;
				return false;
			}
		}
		
		protected bool TryMoveToNonWhiteSpace()
		{
			return TryMoveToNonWhiteSpace(inputLength);
		}
		
		protected bool TryMoveToNonWhiteSpace(int inputLength)
		{
			while(true) {
				if (currentLocation == inputLength) return false; // Reject end of file
				char c = input[currentLocation];
				if (((int)c <= 0x20) && (c == ' ' || c == '\t' || c == '\n' || c == '\r')) {
					currentLocation++;                            // Accept white-space
					continue;
				} else {
					return true;  // Found non-white-space
				}
			}
		}
		
		/// <summary>
		/// Read a name token.
		/// The following characters are not allowed:
		///   ""         End of file
		///   " \n\r\t"  Whitesapce
		///   "=\'\""    Attribute value
		///   "&lt;>/?"  Tags
		/// </summary>
		/// <returns> True if read at least one character </returns>
		protected bool TryReadName(out string res)
		{
			int start = currentLocation;
			// Keep reading up to invalid character
			while(true) {
				if (currentLocation == inputLength) break;              // Reject end of file
				char c = input[currentLocation];
				if (0x41 <= (int)c) {                                   // Accpet from 'A' onwards
					currentLocation++;
					continue;
				}
				if (c == ' ' || c == '\n' || c == '\r' || c == '\t' ||  // Reject whitesapce
				    c == '=' || c == '\'' || c == '"'  ||               // Reject attributes
				    c == '<' || c == '>'  || c == '/'  || c == '?') {   // Reject tags
					break;
				} else {
					currentLocation++;
					continue;                                            // Accept other character
				}
			}
			if (start == currentLocation) {
				res = string.Empty;
				return false;
			} else {
				res = GetText(start, currentLocation);
				return true;
			}
		}
		
		protected string GetText(int start, int end)
		{
			AXmlParser.Assert(end <= currentLocation, "Reading ahead of current location");
			if (start == inputLength && end == inputLength) {
				return string.Empty;
			} else {
				return GetCachedString(input.Substring(start, end - start));
			}
		}
		
		Dictionary<string, string> stringCache = new Dictionary<string, string>();
		int stringCacheRequestedCount;
		int stringCacheRequestedSize;
		int stringCacheStoredCount;
		int stringCacheStoredSize;
		
		string GetCachedString(string cached)
		{
			stringCacheRequestedCount += 1;
			stringCacheRequestedSize += 8 + 2 * cached.Length;
			// Do not bother with long strings
			if (cached.Length > 32) {
				stringCacheStoredCount += 1;
				stringCacheStoredSize += 8 + 2 * cached.Length;
				return cached;
			}
			if (stringCache.ContainsKey(cached)) {
				// Get the instance from the cache instead
				return stringCache[cached];
			} else {
				// Add to cache
				stringCacheStoredCount += 1;
				stringCacheStoredSize += 8 + 2 * cached.Length;
				stringCache.Add(cached, cached);
				return cached;
			}
		}
		
		public void PrintStringCacheStats()
		{
			AXmlParser.Log("String cache: Requested {0} ({1} bytes);  Actaully stored {2} ({3} bytes); {4}% stored", stringCacheRequestedCount, stringCacheRequestedSize, stringCacheStoredCount, stringCacheStoredSize, stringCacheRequestedSize == 0 ? 0 : stringCacheStoredSize * 100 / stringCacheRequestedSize);
		}
	}
}
oundBrush}}"> </SolidColorBrush> <Color x:Key="dummyColor">Transparent</Color> <Style x:Key="brushStopBorder" TargetType="Border"> <Setter Property="RenderTransform"> <Setter.Value> <ScaleTransform ScaleX="1" ScaleY="1"></ScaleTransform> </Setter.Value> </Setter> <Setter Property="RenderTransformOrigin" Value="0.5,0.5"></Setter> <Setter Property="Background" Value="Transparent"></Setter> <Setter Property="dragAndDrop:DragAndDropService.Droppable" Value="True"></Setter> <Setter Property="dragAndDrop:DragAndDropService.Draggable" Value="True"></Setter> <Setter Property="dragAndDrop:DragAndDropService.DraggingSurface" Value="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DraggingSurface}"></Setter> <Style.Triggers> <Trigger Property="dragAndDrop:DragAndDropService.IsDraggableOver" Value="True"> <Setter Property="Opacity" Value="0.5"></Setter> <Trigger.EnterActions> <BeginStoryboard> <Storyboard> <DoubleAnimation To="0.95" Duration="00:00:0.2" Storyboard.TargetProperty="RenderTransform.ScaleX"></DoubleAnimation> <DoubleAnimation To="0.95" Duration="00:00:0.2" Storyboard.TargetProperty="RenderTransform.ScaleY"></DoubleAnimation> </Storyboard> </BeginStoryboard> </Trigger.EnterActions> <Trigger.ExitActions> <BeginStoryboard> <Storyboard> <DoubleAnimation To="1" Duration="00:00:0.2" Storyboard.TargetProperty="RenderTransform.ScaleX"></DoubleAnimation> <DoubleAnimation To="1" Duration="00:00:0.2" Storyboard.TargetProperty="RenderTransform.ScaleY"></DoubleAnimation> </Storyboard> </BeginStoryboard> </Trigger.ExitActions> </Trigger> </Style.Triggers> </Style> <Style TargetType="Border" x:Key="JobFieldBorder"> <Setter Property="BorderBrush" Value="{StaticResource LightGrayBrush}"></Setter> <Setter Property="BorderThickness" Value="0 0 1 1"></Setter> <Setter Property="CornerRadius" Value="100 10 100 0"></Setter> <Setter Property="Padding" Value="10 5 10 5"></Setter> <Setter Property="Margin" Value="0 0 10 0"></Setter> <Setter Property="Background" Value="{StaticResource borderBackground}"> </Setter> </Style> <Style TargetType="ContentControl" x:Key="colorPicker"> <Setter Property="Template"> <Setter.Value> <ControlTemplate> <Grid> <ToggleButton Cursor="Hand" x:Name="PopupButton" Checked="PopupButton_Checked" Unchecked="PopupButton_Unchecked" BorderThickness="0" Height="30" Background="Transparent" Foreground="{StaticResource AccentColorBrush}" VerticalAlignment="Center" Margin="30 0 0 0" IsChecked="{Binding ElementName=Popup, Path=IsOpen}"> <ToggleButton.Style> <Style TargetType="ToggleButton" BasedOn="{StaticResource emptyToggleButton}"> <Style.Triggers> <DataTrigger Binding="{Binding IsOpen, ElementName=Popup}" Value="True"> <Setter Property="IsEnabled" Value="False" /> </DataTrigger> </Style.Triggers> </Style> </ToggleButton.Style> <StackPanel Orientation="Horizontal"> <materialDesign:PackIcon VerticalAlignment="Center" Kind="Pencil" Width="32" Height="32"> <materialDesign:PackIcon.Foreground> <SolidColorBrush Color="{Binding Color}"></SolidColorBrush> </materialDesign:PackIcon.Foreground> </materialDesign:PackIcon> <TextBlock Margin="5 0 0 0" FontSize="14" VerticalAlignment="Center">SELECT COLOR</TextBlock> </StackPanel> </ToggleButton> <Popup x:Name="Popup" MouseDown="Popup_MouseDown" PopupAnimation="Fade" StaysOpen="False" PlacementTarget="{Binding ElementName=PopupButton}" Placement="Bottom" AllowsTransparency="True"> <Border Background="{StaticResource WhiteBrush}" CornerRadius="5" Margin="10"> <Border.Effect> <DropShadowEffect ShadowDepth="0" BlurRadius="10" /> </Border.Effect> <Grid> <Grid Margin="10"> <DockPanel> <DockPanel> <TextBlock DockPanel.Dock="Top" HorizontalAlignment="Center">SOURCE</TextBlock> <Viewbox Width="300" Height="180" VerticalAlignment="Center" Stretch="Fill"> <colorPicker:ColorCanvas SelectedColor="{Binding Color,Mode=TwoWay}" SelectedColorChanged="ColorCanvas_SelectedColorChanged" Background="Transparent" BorderThickness="0" Height="150" Width="230" ></colorPicker:ColorCanvas> </Viewbox> </DockPanel> <Image DockPanel.Dock="Left" Source="../Images/arrow-long-right.png" VerticalAlignment="Center" Width="30" Margin="10 0"></Image> <DockPanel> <TextBlock DockPanel.Dock="Top" HorizontalAlignment="Center">SUGGESTIONS</TextBlock> <hive:HexList VerticalAlignment="Center" Margin="0 10 0 0" Width="220" Height="270" UseHexItemHasContainer="True" Grid.Column="2" Grid.Row="1" RowCount="6" ColumnCount="5" ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.HiveSuggestions}" SelectedItem="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.SelectedSuggestion,Mode=TwoWay}"> <hive:HexList.ItemContainerStyle> <Style TargetType="hive:HexItem" BasedOn="{StaticResource {x:Type hive:HexItem}}"> <Setter Property="Background" Value="{Binding Brush}"></Setter> <Setter Property="Grid.Column" Value="0"></Setter> <Setter Property="Grid.Row" Value="0"></Setter> <Setter Property="Background" Value="Transparent"></Setter> <Setter Property="BorderThickness" Value="1"></Setter> <Setter Property="ToolTip"> <Setter.Value> <ToolTip Background="{StaticResource MainWindow.Background}" Foreground="{StaticResource MainWindow.Foreground}"> <ItemsControl ItemsSource="{Binding Coordinates.OutputLiquids}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Horizontal"></StackPanel> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate> <TextBlock TextAlignment="Center" Foreground="{StaticResource DarkGrayBrush200}" Margin="10 0"> <Run Text="{Binding LiquidType}"></Run> <LineBreak/> <Run Text="{Binding Volume,StringFormat=0}"></Run> </TextBlock> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </ToolTip> </Setter.Value> </Setter> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},Path=DataContext,Converter={StaticResource ObjectToObjectTypeConverter}}" Value="{x:Type colorConversion:ColorConversionSuggestion}"> <Setter Property="Grid.Column" Value="{Binding Column}"></Setter> <Setter Property="Grid.Row" Value="{Binding Row}"></Setter> <Setter Property="Background" Value="{Binding Brush}"></Setter> </DataTrigger> <Trigger Property="IsSelected" Value="True"> <Setter Property="BorderThickness" Value="2"></Setter> </Trigger> </Style.Triggers> </Style> </hive:HexList.ItemContainerStyle> <hive:HexList.ItemTemplate> <DataTemplate> </DataTemplate> </hive:HexList.ItemTemplate> </hive:HexList> </DockPanel> </DockPanel> </Grid> </Grid> </Border> </Popup> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> <DataTemplate x:Key="Volume_Template"> <StackPanel> <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> <StackPanel VerticalAlignment="Center"> <ItemsControl VerticalAlignment="Center"> <ItemsControl.Style> <Style TargetType="ItemsControl"> <Setter Property="ItemsSource" Value="{Binding LiquidVolumes}"></Setter> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.Settings.UsePreferredLiquidVolumeIndex}" Value="True"> <Setter Property="ItemsSource" Value="{Binding LiquidVolumesOrdered}"></Setter> </DataTrigger> </Style.Triggers> </Style> </ItemsControl.Style> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <StackPanel VerticalAlignment="Center" Orientation="Horizontal" IsItemsHost="True"></StackPanel> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate> <Border> <Border.Style> <Style TargetType="Border"> <Setter Property="Visibility" Value="Visible"></Setter> <Style.Triggers> <DataTrigger Binding="{Binding IdsPack.IdsPackFormula.Name}" Value="Lubricant"> <Setter Property="Visibility" Value="Collapsed"></Setter> </DataTrigger> </Style.Triggers> </Style> </Border.Style> <ContentControl Focusable="False" Style="{StaticResource numberBorder}" Margin="10 0 0 0" Width="60" Height="60"> <ContentControl.Foreground> <SolidColorBrush Color="{Binding IdsPack.LiquidType.Color,Converter={StaticResource ColorToIntegerConverter}}"></SolidColorBrush> </ContentControl.Foreground> <mahapps:NumericUpDown ValueChanged="OnBrushStopFieldValueChanged" FontSize="{StaticResource NumbersFontSize}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" FontFamily="{StaticResource digital-7}" HorizontalAlignment="Center" Value="{Binding Volume, Mode=TwoWay}" Background="Transparent" Width="40" HideUpDownButtons="True" Minimum="0" Maximum="1000" InterceptArrowKeys="True" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="True" HorizontalContentAlignment="Center"> <mahapps:NumericUpDown.Resources> <StaticResource ResourceKey="SelectAllTextBoxResource"></StaticResource> </mahapps:NumericUpDown.Resources> </mahapps:NumericUpDown> </ContentControl> </Border> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </StackPanel> <materialDesign:PackIcon Kind="ChevronDoubleLeft" Margin="40 2 0 0" VerticalAlignment="Center" Foreground="Gray" /> <TextBlock VerticalAlignment="Center" FontSize="16" Margin="5 0 0 0" FontStyle="Italic" Foreground="Gray"> <Run>Total:</Run> <Run Text="{Binding TotalLiquidVolume,Mode=OneWay,StringFormat=0}"></Run><Run>%</Run> <Run>(</Run> <Run FontSize="10" Text="{Binding TotalLiquidNanoliterPerCentimeter,Mode=OneWay,StringFormat=0.00}"></Run> <Run FontSize="12">nl</Run> <Run>)</Run> </TextBlock> <Border Margin="60 0 0 0" DataContext="{Binding LiquidVolumes,Converter={StaticResource LiquidVolumesToLubricantLiquidVolume}}" BorderBrush="{StaticResource WhiteBrush100}" BorderThickness="1 0 0 0"> <Border.Style> <Style TargetType="Border"> <Setter Property="Visibility" Value="Collapsed"></Setter> <Style.Triggers> <DataTrigger Binding="{Binding Converter={StaticResource NullObjectToBooleanConverter}}" Value="True"> <Setter Property="Visibility" Value="Visible"></Setter> </DataTrigger> </Style.Triggers> </Style> </Border.Style> <ContentControl Focusable="False" Style="{StaticResource numberBorder}" Margin="10 0 0 0" Width="55" Height="55"> <ContentControl.Foreground> <SolidColorBrush Color="{Binding IdsPack.LiquidType.Color,Converter={StaticResource ColorToIntegerConverter}}"></SolidColorBrush> </ContentControl.Foreground> <mahapps:NumericUpDown Foreground="{StaticResource GrayBrush250}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" FontSize="20" FontFamily="{StaticResource digital-7}" HorizontalAlignment="Center" Value="{Binding Volume, Mode=TwoWay}" Background="Transparent" Width="40" HideUpDownButtons="True" Minimum="0" Maximum="1000" InterceptArrowKeys="True" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="True" HorizontalContentAlignment="Center"> <mahapps:NumericUpDown.Resources> <StaticResource ResourceKey="SelectAllTextBoxResource"></StaticResource> </mahapps:NumericUpDown.Resources> </mahapps:NumericUpDown> </ContentControl> </Border> </StackPanel> <StackPanel Orientation="Horizontal" Margin="30 10 0 0" Height="16" Visibility="{Binding IsLiquidVolumesOutOfRange,Converter={StaticResource BooleanToVisibilityConverter}}"> <materialDesign:PackIcon Kind="Alert" Foreground="{StaticResource OrangeBrush}" /> <TextBlock Margin="5 0 0 0" Foreground="{StaticResource OrangeBrush}">Liquid volumes exceeds the maximum range for color conversion!</TextBlock> </StackPanel> </StackPanel> </DataTemplate> <DataTemplate x:Key="RGB_Template"> <StackPanel> <StackPanel Orientation="Horizontal"> <ContentControl Style="{StaticResource numberBorder}" Foreground="{StaticResource RedBrush200}" Width="60" Height="60" Margin="10 0 0 0"> <mahapps:NumericUpDown ValueChanged="OnBrushStopFieldValueChanged" FontSize="{StaticResource NumbersFontSize}" FontFamily="{StaticResource digital-7}" HorizontalAlignment="Center" Value="{Binding Red, Mode=TwoWay}" Background="Transparent" Width="40" StringFormat="0" HideUpDownButtons="True" Minimum="0" Maximum="255" InterceptArrowKeys="True" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="False" HorizontalContentAlignment="Center"> <mahapps:NumericUpDown.Resources> <Style TargetType="TextBox"/> </mahapps:NumericUpDown.Resources> </mahapps:NumericUpDown> </ContentControl> <ContentControl Style="{StaticResource numberBorder}" Foreground="{StaticResource GreenBrush400}" Width="60" Height="60" Margin="10 0 0 0"> <mahapps:NumericUpDown ValueChanged="OnBrushStopFieldValueChanged" FontSize="{StaticResource NumbersFontSize}" FontFamily="{StaticResource digital-7}" HorizontalAlignment="Center" Value="{Binding Green, Mode=TwoWay}" Background="Transparent" Width="40" StringFormat="0" HideUpDownButtons="True" Minimum="0" Maximum="255" InterceptArrowKeys="True" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="False" HorizontalContentAlignment="Center"> <mahapps:NumericUpDown.Resources> <Style TargetType="TextBox"/> </mahapps:NumericUpDown.Resources> </mahapps:NumericUpDown> </ContentControl> <ContentControl Style="{StaticResource numberBorder}" Foreground="{StaticResource DarkBlueBrush}" BorderThickness="1" Width="60" Height="60" Margin="10 0 0 0"> <mahapps:NumericUpDown ValueChanged="OnBrushStopFieldValueChanged" FontSize="{StaticResource NumbersFontSize}" FontFamily="{StaticResource digital-7}" HorizontalAlignment="Center" Value="{Binding Blue, Mode=TwoWay}" Background="Transparent" Width="40" StringFormat="0" HideUpDownButtons="True" Minimum="0" Maximum="255" InterceptArrowKeys="True" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="False" HorizontalContentAlignment="Center"> <mahapps:NumericUpDown.Resources> <Style TargetType="TextBox"/> </mahapps:NumericUpDown.Resources> </mahapps:NumericUpDown> </ContentControl> <ContentControl Style="{StaticResource colorPicker}"></ContentControl> </StackPanel> <StackPanel Orientation="Horizontal" Margin="30 10 0 0" Height="16" Visibility="{Binding IsOutOfGamut,Converter={StaticResource BooleanToVisibilityConverter}}"> <materialDesign:PackIcon Kind="Alert" Foreground="{StaticResource RedBrush200}" /> <TextBlock Margin="5 0 0 0" Foreground="{StaticResource RedBrush200}">Color is out of gamut!</TextBlock> </StackPanel> </StackPanel> </DataTemplate> <DataTemplate x:Key="LAB_Template"> <StackPanel Orientation="Horizontal"> <ContentControl Style="{StaticResource numberBorder}" Foreground="Gray" Width="60" Height="60" Margin="10 0 0 0"> <mahapps:NumericUpDown ValueChanged="OnBrushStopFieldValueChanged" FontSize="{StaticResource NumbersFontSize}" FontFamily="{StaticResource digital-7}" HorizontalAlignment="Center" Value="{Binding L, Mode=TwoWay}" Background="Transparent" Width="40" StringFormat="0.0" HideUpDownButtons="True" Minimum="0" Maximum="100" InterceptArrowKeys="True" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="True" HorizontalContentAlignment="Center"> <mahapps:NumericUpDown.Resources> <Style TargetType="TextBox"/> </mahapps:NumericUpDown.Resources> </mahapps:NumericUpDown> </ContentControl> <ContentControl Style="{StaticResource numberBorder}" Foreground="{StaticResource RedBrush400}" Width="60" Height="60" Margin="10 0 0 0"> <mahapps:NumericUpDown ValueChanged="OnBrushStopFieldValueChanged" FontSize="{StaticResource NumbersFontSize}" FontFamily="{StaticResource digital-7}" HorizontalAlignment="Center" Value="{Binding A, Mode=TwoWay}" Background="Transparent" Width="40" StringFormat="0.0" HideUpDownButtons="True" Minimum="-128" Maximum="128" InterceptArrowKeys="True" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="True" HorizontalContentAlignment="Center"> <mahapps:NumericUpDown.Resources> <Style TargetType="TextBox"/> </mahapps:NumericUpDown.Resources> </mahapps:NumericUpDown> </ContentControl> <ContentControl Style="{StaticResource numberBorder}" Foreground="{StaticResource GreenBrush400}" Width="60" Height="60" Margin="10 0 0 0"> <mahapps:NumericUpDown ValueChanged="OnBrushStopFieldValueChanged" FontSize="{StaticResource NumbersFontSize}" FontFamily="{StaticResource digital-7}" HorizontalAlignment="Center" Value="{Binding B, Mode=TwoWay}" Background="Transparent" Width="40" StringFormat="0.0" HideUpDownButtons="True" Minimum="-128" Maximum="128" InterceptArrowKeys="True" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="True" HorizontalContentAlignment="Center"> <mahapps:NumericUpDown.Resources> <Style TargetType="TextBox"/> </mahapps:NumericUpDown.Resources> </mahapps:NumericUpDown> </ContentControl> <ContentControl Style="{StaticResource colorPicker}"></ContentControl> </StackPanel> </DataTemplate> <DataTemplate x:Key="CMYK_Template"> <StackPanel Orientation="Horizontal"> <ContentControl Style="{StaticResource numberBorder}" Foreground="Cyan" Width="60" Height="60" Margin="10 0 0 0"> <mahapps:NumericUpDown FontSize="{StaticResource NumbersFontSize}" FontFamily="{StaticResource digital-7}" HorizontalAlignment="Center" Value="{Binding Cyan,Converter={StaticResource OneToPercentConverter}, Mode=TwoWay}" Background="Transparent" Width="40" StringFormat="0" HideUpDownButtons="True" Minimum="0" Maximum="100" InterceptArrowKeys="True" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="True" HorizontalContentAlignment="Center"> <mahapps:NumericUpDown.Resources> <Style TargetType="TextBox"/> </mahapps:NumericUpDown.Resources> </mahapps:NumericUpDown> </ContentControl> <ContentControl Style="{StaticResource numberBorder}" Foreground="Magenta" Width="60" Height="60" Margin="10 0 0 0"> <mahapps:NumericUpDown FontSize="{StaticResource NumbersFontSize}" FontFamily="{StaticResource digital-7}" HorizontalAlignment="Center" Value="{Binding Magenta,Converter={StaticResource OneToPercentConverter}, Mode=TwoWay}" Background="Transparent" Width="40" StringFormat="0" HideUpDownButtons="True" Minimum="0" Maximum="100" InterceptArrowKeys="True" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="True" HorizontalContentAlignment="Center"> <mahapps:NumericUpDown.Resources> <Style TargetType="TextBox"/> </mahapps:NumericUpDown.Resources> </mahapps:NumericUpDown> </ContentControl> <ContentControl Style="{StaticResource numberBorder}" Foreground="Yellow" Width="60" Height="60" Margin="10 0 0 0"> <mahapps:NumericUpDown FontSize="{StaticResource NumbersFontSize}" FontFamily="{StaticResource digital-7}" HorizontalAlignment="Center" Value="{Binding Yellow,Converter={StaticResource OneToPercentConverter}, Mode=TwoWay}" Background="Transparent" Width="40" StringFormat="0" HideUpDownButtons="True" Minimum="0" Maximum="100" InterceptArrowKeys="True" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="True" HorizontalContentAlignment="Center"> <mahapps:NumericUpDown.Resources> <Style TargetType="TextBox"/> </mahapps:NumericUpDown.Resources> </mahapps:NumericUpDown> </ContentControl> <ContentControl Style="{StaticResource numberBorder}" Foreground="{StaticResource BlackForegroundBrush}" Width="60" Height="60" Margin="10 0 0 0"> <mahapps:NumericUpDown FontSize="{StaticResource NumbersFontSize}" FontFamily="{StaticResource digital-7}" HorizontalAlignment="Center" Value="{Binding Black,Converter={StaticResource OneToPercentConverter}, Mode=TwoWay}" Background="Transparent" Width="40" StringFormat="0" HideUpDownButtons="True" Minimum="0" Maximum="100" InterceptArrowKeys="True" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="True" HorizontalContentAlignment="Center"> <mahapps:NumericUpDown.Resources> <Style TargetType="TextBox"/> </mahapps:NumericUpDown.Resources> </mahapps:NumericUpDown> </ContentControl> <ContentControl Style="{StaticResource colorPicker}"></ContentControl> </StackPanel> </DataTemplate> </UserControl.Resources> <Grid IsEnabled="{Binding IsFree}"> <Grid Grid.Row="1"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="1*"/> </Grid.ColumnDefinitions> <Grid Margin="0 10 10 0" Grid.Column="2"> <Grid Grid.Row="1"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="1*" /> </Grid.ColumnDefinitions> <Grid Background="{StaticResource TransparentBackgroundBrush}"> <Grid.Style> <Style TargetType="Grid"> <Setter Property="Width" Value="304"></Setter> <Setter Property="LayoutTransform"> <Setter.Value> <ScaleTransform ScaleY="1" ScaleX="1"></ScaleTransform> </Setter.Value> </Setter> <Style.Triggers> <DataTrigger Binding="{Binding IsSideBarOpened}" Value="True"> <DataTrigger.EnterActions> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetProperty="LayoutTransform.ScaleX" To="0" Duration="00:00:0.2"></DoubleAnimation> </Storyboard> </BeginStoryboard> </DataTrigger.EnterActions> <DataTrigger.ExitActions> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetProperty="LayoutTransform.ScaleX" To="1" Duration="00:00:0.2"></DoubleAnimation> </Storyboard> </BeginStoryboard> </DataTrigger.ExitActions> </DataTrigger> </Style.Triggers> </Style> </Grid.Style> <DockPanel> <Border DockPanel.Dock="Bottom" Margin="10"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Right"> <Button Command="{Binding DuplicateSegmentCommand}" Margin="0 0 4 0" Background="{StaticResource OrangeBrush300}" BorderBrush="{StaticResource OrangeBrush300}" Height="42" Padding="10" ToolTip="Duplicate Segment"> <StackPanel Orientation="Horizontal"> <materialDesign:PackIcon Kind="ContentCopy" Width="24" Height="24"></materialDesign:PackIcon> <TextBlock VerticalAlignment="Center">Duplicate</TextBlock> </StackPanel> </Button> <Button Command="{Binding RemoveSegmentCommand}" Margin="0 0 4 0" Background="{StaticResource RedBrush300}" BorderBrush="{StaticResource RedBrush300}" Height="42" Padding="10" ToolTip="Remove Segment"> <StackPanel Orientation="Horizontal"> <materialDesign:PackIcon Kind="Delete" Width="24" Height="24"></materialDesign:PackIcon> <TextBlock VerticalAlignment="Center">Remove</TextBlock> </StackPanel> </Button> <Button AutomationProperties.AutomationId="{x:Static automation:Developer.AddSegmentButton}" Command="{Binding AddSegmentCommand}" Background="{StaticResource GreenBrush300}" BorderBrush="{StaticResource GreenBrush300}" Height="42" Padding="10" ToolTip="Add Segment"> <StackPanel Orientation="Horizontal"> <materialDesign:PackIcon Kind="Plus" Width="24" Height="24"></materialDesign:PackIcon> <TextBlock VerticalAlignment="Center">New</TextBlock> </StackPanel> </Button> </StackPanel> </Border> <controls:MultiSelectListBox FocusVisualStyle="{x:Null}" x:Name="listBoxSegments" MouseEnter="listBoxSegments_MouseEnter" PreviewMouseDown="listBoxSegments_PreviewMouseDown" AutomationProperties.AutomationId="{x:Static automation:Developer.SegmentsListBox}" Style="{StaticResource {x:Type ListBox}}" SelectionMode="Extended" SelectionChanged="ListBox_SelectionChanged" ItemsSource="{Binding SegmentsCollectionView}" SelectedItem="{Binding SelectedSegment}" SelectedItemsList="{Binding SelectedSegments,Mode=TwoWay}" HorizontalContentAlignment="Stretch" Padding="0 0 0 0"> <ListBox.ItemContainerStyle> <Style TargetType="ListBoxItem" BasedOn="{StaticResource basicListBoxItem}"> <EventSetter Event="PreviewMouseDown" Handler="ListBoxItem_PreviewMouseDown"></EventSetter> </Style> </ListBox.ItemContainerStyle> <ListBox.ItemTemplate> <DataTemplate> <Grid Margin="5 10" Style="{StaticResource draggableDroppableGrid}" dragAndDrop:DragAndDropService.Drop="OnSegmentDrop"> <Polygon Points="40,0 290,0 290,100 0,100 0,30" StrokeThickness="0.2" IsHitTestVisible="False" Stretch="Fill"> <Polygon.Effect> <DropShadowEffect Opacity="0.5" /> </Polygon.Effect> <Polygon.Style> <Style TargetType="Polygon"> <Setter Property="Stroke" Value="{StaticResource BlackForegroundBrush}"></Setter> <Setter Property="Fill" Value="{StaticResource SegmentGradientBrush}"> </Setter> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem},Path=IsSelected,FallbackValue=False}" Value="True"> <Setter Property="Stroke" Value="{StaticResource BlackForegroundBrush}"></Setter> <Setter Property="Fill" Value="{StaticResource SelectedSegmentGradientBrush}"> </Setter> </DataTrigger> </Style.Triggers> </Style> </Polygon.Style> </Polygon> <Border Height="100" Padding="5" IsHitTestVisible="False"> <Grid> <Rectangle VerticalAlignment="Bottom" Height="8" Fill="{Binding SegmentBrush}"> </Rectangle> </Grid> </Border> <Grid Margin="20 10 10 10" TextElement.FontSize="16" TextElement.FontStyle="Italic" > <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="1*" /> </Grid.ColumnDefinitions> <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> <TextBlock FontWeight="SemiBold" Foreground="{StaticResource DarkGrayBrush}">#</TextBlock> <TextBlock FontWeight="SemiBold" Margin="5 0 0 0" Text="{Binding SegmentIndex}" Foreground="{StaticResource DarkGrayBrush}"></TextBlock> </StackPanel> <TextBox Grid.Column="1" CaretBrush="Transparent" Cursor="Arrow" VerticalAlignment="Center" Width="200" HorizontalContentAlignment="Center" Style="{x:Null}" BorderThickness="0" Background="Transparent" Text="{Binding Name}" Foreground="{StaticResource DarkGrayBrush}"></TextBox> </Grid> </Grid> </DataTemplate> </ListBox.ItemTemplate> </controls:MultiSelectListBox> </DockPanel> <Rectangle HorizontalAlignment="Right" StrokeThickness="1" Width="3" Margin="0 0 0 0"> <Rectangle.Fill> <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1"> <GradientStop Offset="0" Color="{Binding Source={StaticResource WhiteBrush100}, Path=Color}" /> <GradientStop Offset="0.5" Color="{Binding Source={StaticResource BlackForegroundBrush}, Path=Color}" /> <GradientStop Offset="1.1" Color="{Binding Source={StaticResource BlackForegroundBrush}, Path=Color}" /> </LinearGradientBrush> </Rectangle.Fill> <Rectangle.Stroke> <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1"> <GradientStop Offset="0" Color="{Binding Source={StaticResource BorderBrushGainsboro}, Path=Color}" /> <GradientStop Offset="0.5" Color="{Binding Source={StaticResource BorderBrushGainsboro}, Path=Color}" /> <GradientStop Offset="1" Color="{Binding Source={StaticResource BorderBrushGainsboro}, Path=Color}" /> </LinearGradientBrush> </Rectangle.Stroke> </Rectangle> </Grid> <Grid Grid.Column="1"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition/> </Grid.RowDefinitions> <Grid.Resources> <Style TargetType="TextBlock"> <Setter Property="Foreground" Value="{StaticResource JobFieldForeground}" /> </Style> </Grid.Resources> <Grid> <StackPanel> <Grid> <StackPanel Orientation="Horizontal" Margin="10"> <Image Source="../Images/rgb.png" Width="24"></Image> <TextBlock Margin="5 0 0 0" Text="{Binding ActiveJob.Name,FallbackValue='UNSET'}" FontSize="16" FontWeight="SemiBold" VerticalAlignment="Center"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Margin="0 5 0 0" HorizontalAlignment="Right"> <TextBlock Margin="0 0 5 0" Text="{Binding ActiveJob.CreationDate,FallbackValue='UNSET'}" FontSize="12" Foreground="Gray" FontStyle="Italic" VerticalAlignment="Center"></TextBlock> <Image Source="../Images/calendar.png" Width="16"></Image> </StackPanel> </Grid> <StackPanel Orientation="Horizontal" Margin="10 20 0 0" MaxWidth="1360" HorizontalAlignment="Left"> <Border Style="{StaticResource JobFieldBorder}"> <StackPanel Margin="5" Width="140"> <StackPanel Orientation="Horizontal"> <Image Source="../Images/name.png" Width="32"></Image> <TextBlock VerticalAlignment="Center" Margin="5 0 0 0" FontSize="10">Name</TextBlock> </StackPanel> <TextBox Margin="0 3 0 0" Width="100" HorizontalAlignment="Left" Text="{Binding ActiveJob.Name,UpdateSourceTrigger=PropertyChanged}" Foreground="{StaticResource JobFieldForeground}"></TextBox> </StackPanel> </Border> <Border Style="{StaticResource JobFieldBorder}"> <StackPanel Margin="10 5 5 5" Width="140"> <StackPanel Orientation="Horizontal"> <Image Source="../Images/wind.png" Width="32"></Image> <TextBlock VerticalAlignment="Center" Margin="5 0 0 0" FontSize="10">Winding Method</TextBlock> </StackPanel> <ComboBox Width="90" HorizontalAlignment="Left" ItemsSource="{Binding WindingMethods}" SelectedItem="{Binding ActiveJob.WindingMethod}" DisplayMemberPath="Name" Style="{StaticResource TransparentComboBoxStyle}"></ComboBox> </StackPanel> </Border> <Border Style="{StaticResource JobFieldBorder}"> <StackPanel Margin="10 5 5 5" Width="140"> <StackPanel Orientation="Horizontal"> <Image Source="../Images/thread.png" Width="32"></Image> <TextBlock VerticalAlignment="Center" Margin="5 0 0 0" FontSize="10">Spool</TextBlock> </StackPanel> <ComboBox Width="90" HorizontalAlignment="Left" ItemsSource="{Binding SpoolTypes}" SelectedItem="{Binding ActiveJob.SpoolType}" Style="{StaticResource TransparentComboBoxStyle}" > <ComboBox.ToolTip> <TextBlock> <Run Text="{Binding ActiveJob.SpoolType.Name}"></Run> <Run FontSize="9" Foreground="{StaticResource LightGrayBrush200}" Text="{Binding ActiveJob.SpoolType.Length,Mode=OneWay}"></Run> <Run FontSize="9" Foreground="{StaticResource LightGrayBrush200}" Text="m"></Run> </TextBlock> </ComboBox.ToolTip> <ComboBox.ItemTemplate> <DataTemplate> <TextBlock TextTrimming="CharacterEllipsis"> <Run Text="{Binding Name}"></Run> <Run FontSize="9" Foreground="{StaticResource GrayBrush}" Text="{Binding Length,Mode=OneWay}"></Run> <Run FontSize="9" Foreground="{StaticResource GrayBrush}" Text="m"></Run> </TextBlock> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> </StackPanel> </Border> <Border Style="{StaticResource JobFieldBorder}"> <StackPanel Margin="20 5 5 5" Width="140"> <StackPanel Orientation="Horizontal"> <Image Source="../Images/inter-segment.png" Width="32"></Image> <TextBlock VerticalAlignment="Center" Margin="5 0 0 0" FontSize="10">Inter Segment</TextBlock> </StackPanel> <DockPanel LastChildFill="True"> <ToggleButton Margin="10 0 25 0" DockPanel.Dock="Right" VerticalAlignment="Bottom" HorizontalAlignment="Right" IsChecked="{Binding ActiveJob.EnableInterSegment}"></ToggleButton> <mahapps:NumericUpDown FontSize="{StaticResource NumbersFontSize}" Width="70" HorizontalAlignment="Left" StringFormat="{}{0:N1} m" FontFamily="{StaticResource digital-7}" IsEnabled="{Binding ActiveJob.EnableInterSegment}" Margin="0 2 0 0" HideUpDownButtons="True" Minimum="1" Maximum="10000" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0 0 0 1" BorderBrush="{StaticResource DimGrayBrush}" InterceptMouseWheel="True" HasDecimals="True" HorizontalContentAlignment="Left" Value="{Binding ActiveJob.InterSegmentLength,Mode=TwoWay}"></mahapps:NumericUpDown> </DockPanel> </StackPanel> </Border> <Border Style="{StaticResource JobFieldBorder}"> <StackPanel Margin="20 5 5 5" Width="140"> <StackPanel Orientation="Horizontal"> <Image Source="../Images/lubrication.png" Width="32"></Image> <TextBlock VerticalAlignment="Center" Margin="5 0 0 0" FontSize="10">Lubrication</TextBlock> </StackPanel> <DockPanel LastChildFill="True" Margin="0 10 30 0"> <ToggleButton DockPanel.Dock="Right" VerticalAlignment="Center" HorizontalAlignment="Center" IsChecked="{Binding ActiveJob.EnableLubrication}"></ToggleButton> </DockPanel> </StackPanel> </Border> <Border Style="{StaticResource JobFieldBorder}" Visibility="{Binding IsSideBarOpened,Converter={StaticResource BooleanToVisibilityInverseConverter}}"> <StackPanel Margin="20 5 5 5" Width="140"> <StackPanel Orientation="Horizontal"> <Image Source="../Images/repeat.png" Width="32"></Image> <TextBlock VerticalAlignment="Center" Margin="5 0 0 0" FontSize="10">Units</TextBlock> </StackPanel> <mahapps:NumericUpDown FontSize="{StaticResource NumbersFontSize}" Width="70" HorizontalAlignment="Left" FontFamily="{StaticResource digital-7}" Margin="0 5 0 0" HideUpDownButtons="True" Minimum="1" Maximum="1000" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0 0 0 1" BorderBrush="{StaticResource DimGrayBrush}" InterceptMouseWheel="True" HasDecimals="False" HorizontalContentAlignment="Left" Value="{Binding ActiveJob.NumberOfUnits,Mode=TwoWay}"></mahapps:NumericUpDown> </StackPanel> </Border> <Border Style="{StaticResource JobFieldBorder}" Height="82" Width="200" Visibility="{Binding IsSideBarOpened,Converter={StaticResource BooleanToVisibilityInverseConverter}}"> <StackPanel Width="200"> <StackPanel Orientation="Horizontal" Margin="10 0 0 0"> <Image Source="../Images/description.png" Width="32"></Image> <TextBlock VerticalAlignment="Center" Margin="5 0 0 0" FontSize="10">Description</TextBlock> </StackPanel> <Border BorderThickness="0" BorderBrush="{StaticResource borderBrush}" CornerRadius="5" Margin="0 0 5 5"> <TextBox Padding="5 0 0 0" FontStyle="Italic" Background="Transparent" Style="{x:Null}" BorderThickness="0" Margin="5" Height="40" Text="{Binding ActiveJob.Description}" VerticalAlignment="Stretch" materialDesign:HintAssist.Hint="Enter description" AcceptsReturn="True" TextWrapping="Wrap" VerticalScrollBarVisibility="Auto"></TextBox> </Border> </StackPanel> </Border> </StackPanel> </StackPanel> <Grid HorizontalAlignment="Right" Margin="0 0 10 0"> <StackPanel Orientation="Horizontal"> <Button AutomationProperties.AutomationId="{x:Static automation:Developer.ToJobsButton}" Height="70" Width="100" Margin="0 0 10 0" Style="{StaticResource MaterialDesignFlatButton}" Foreground="{StaticResource DarkGrayBrush}" VerticalAlignment="Bottom" BorderBrush="Transparent" Command="{Binding DiscardJobCommand}"> <StackPanel> <materialDesign:PackIcon HorizontalAlignment="Center" Width="24" Height="24" Kind="KeyboardBackspace" /> <TextBlock VerticalAlignment="Center" Margin="0 10 0 0">TO JOBS</TextBlock> </StackPanel> </Button> <Button AutomationProperties.AutomationId="{x:Static automation:Developer.SaveJobButton}" Height="70" Width="100" Margin="0 0 0 0" Style="{StaticResource MaterialDesignFlatButton}" Foreground="{StaticResource DarkGrayBrush}" VerticalAlignment="Bottom" BorderBrush="Transparent" Command="{Binding SaveJobCommand}"> <StackPanel> <materialDesign:PackIcon HorizontalAlignment="Center" Width="24" Height="24" Kind="ContentSave" /> <TextBlock VerticalAlignment="Center" Margin="0 10 0 0">SAVE JOB</TextBlock> </StackPanel> </Button> </StackPanel> </Grid> </Grid> <Grid Grid.Row="1" Margin="0 20 0 0"> <Grid.RowDefinitions> <RowDefinition Height="1*" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <Grid> <Grid Grid.Column="1" Margin="10 5 0 0"> <DockPanel> <Grid Margin="0 10 0 0"> <DockPanel> <Grid DockPanel.Dock="Top"> <Grid> <StackPanel Orientation="Horizontal"> <Border Style="{StaticResource JobFieldBorder}"> <StackPanel Margin="5" Width="140"> <StackPanel Orientation="Horizontal"> <Image Source="../Images/ruler.png" Width="32"></Image> <TextBlock VerticalAlignment="Center" Margin="5 0 0 0" FontSize="10">Segment Length</TextBlock> </StackPanel> <mahapps:NumericUpDown x:Name="numSegmentLength" FontSize="{StaticResource NumbersFontSize}" HideUpDownButtons="True" Width="90" HorizontalAlignment="Left" FontFamily="{StaticResource digital-7}" StringFormat="{}{0:N1} m" Margin="0 2 0 0" Minimum="1" Maximum="10000" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0 0 0 1" BorderBrush="{StaticResource DimGrayBrush}" InterceptMouseWheel="True" HasDecimals="True" HorizontalContentAlignment="Left" Value="{Binding SelectedSegment.Length,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"> <mahapps:NumericUpDown.Resources> <StaticResource ResourceKey="SelectAllTextBoxResource"></StaticResource> </mahapps:NumericUpDown.Resources> </mahapps:NumericUpDown> </StackPanel> </Border> <Grid Margin="20 10 0 0"> <StackPanel> <TextBlock>MEDIA</TextBlock> <StackPanel Orientation="Horizontal" DockPanel.Dock="Left"> <ComboBox Width="250" ItemsSource="{Binding Rmls}" SelectedItem="{Binding SelectedRML}" Style="{StaticResource TransparentComboBoxStyle}" HorizontalContentAlignment="Stretch"> <ComboBox.ItemTemplate> <DataTemplate> <DockPanel> <StackPanel DockPanel.Dock="Left"> <TextBlock Text="{Binding Name}" FontWeight="Bold" FontStyle="Italic"></TextBlock> <TextBlock FontSize="11" Text="{Binding Manufacturer}" Foreground="Gray"></TextBlock> </StackPanel> <TextBlock Margin="20 0 0 0" VerticalAlignment="Center" HorizontalAlignment="Right"> <Run Foreground="Gray">v:</Run> <Run FontWeight="Bold" Text="{Binding ColorConversionVersion,Mode=OneWay}"></Run> </TextBlock> </DockPanel> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> <!--<Button Margin="20 30 0 0" Command="{Binding EditRMLCommand}" HorizontalAlignment="Right" Style="{StaticResource MaterialDesignFlatButton}"> <StackPanel Orientation="Horizontal"> <materialDesign:PackIcon VerticalAlignment="Center" Kind="Pencil"></materialDesign:PackIcon> <TextBlock Margin="10 0 0 0">EDIT MEDIA</TextBlock> </StackPanel> </Button>--> </StackPanel> </StackPanel> </Grid> </StackPanel> <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="60 40 180 0" Visibility="{Binding IsSideBarOpened,Converter={StaticResource BooleanToVisibilityInverseConverter}}"> <materialDesign:PackIcon Kind="ChevronLeft" Width="24" Height="24" /> <TextBlock Margin="0 -2 0 0" VerticalAlignment="Center"><Run>MEDIA LIQUIDS</Run> <Run FontSize="10" Foreground="{StaticResource DimGrayBrush}">( Max Nanolitter/CM )</Run></TextBlock> <materialDesign:PackIcon Kind="ChevronRight" Width="24" Height="24" /> </StackPanel> <Grid HorizontalAlignment="Right" Margin="0 0 0 0"> <StackPanel HorizontalAlignment="Right" Margin="0 0 0 0"> <StackPanel Margin="0 10 0 0" Orientation="Horizontal" VerticalAlignment="Center"> <ItemsControl ItemsSource="{Binding LiquidTypesRmls}" IsEnabled="{Binding AuthenticationProvider.CurrentUser,Converter={StaticResource UserRoleToBooleanConverter},ConverterParameter='Researcher'}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <WrapPanel IsItemsHost="True"></WrapPanel> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate DataType="{x:Type observables:LiquidTypesRml}"> <StackPanel Margin="0 0 10 0"> <TextBlock HorizontalAlignment="Center" FontSize="10" Foreground="{StaticResource DimGrayBrush}" Text="{Binding LiquidType.Name}"></TextBlock> <Grid Width="58" Height="48" Margin="0 5 0 0"> <shapes:Hexagon StrokeThickness="1" Stroke="Gray"> <shapes:Hexagon.Fill> <LinearGradientBrush Opacity="0.7" > <GradientStop Color="{Binding LiquidType.Color,Converter={StaticResource ColorToIntegerConverter}}"/> <GradientStop Color="White" Offset="1"/> </LinearGradientBrush> </shapes:Hexagon.Fill> </shapes:Hexagon> <TextBox Style="{x:Null}" Background="Transparent" Foreground="{StaticResource Hexagon.ForegroundBrush}" BorderThickness="0" Text="{Binding MaxNlPerCm}" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontWeight="Bold" FontStyle="Italic"></TextBox> </Grid> </StackPanel> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> <StackPanel Margin="0 20 0 0"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="0 0 0 5" ToolTip="Sort the liquid volumes by their liquid type preferred index"> <Viewbox Width="25"> <ToggleButton IsChecked="{Binding Settings.UsePreferredLiquidVolumeIndex}" /> </Viewbox> <TextBlock Margin="5 0 0 0" FontSize="10">Use Preferred Index</TextBlock> </StackPanel> <Button Command="{Binding SaveLiquidFactorsCommand}" HorizontalAlignment="Right" Style="{StaticResource MaterialDesignFlatButton}" IsEnabled="{Binding AuthenticationProvider.CurrentUser,Converter={StaticResource UserRoleToBooleanConverter},ConverterParameter='Researcher'}"> <StackPanel Orientation="Horizontal"> <materialDesign:PackIcon VerticalAlignment="Center" Kind="Harddisk"></materialDesign:PackIcon> <TextBlock Margin="10 0 0 0" Foreground="{StaticResource CheckmarkFill}">SAVE FACTORS</TextBlock> </StackPanel> </Button> </StackPanel> </StackPanel> </StackPanel> </Grid> </Grid> </Grid> <Border DockPanel.Dock="Bottom" Margin="10"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Right"> <Button Command="{Binding DuplicateBrushStopCommand}" Margin="0 0 4 0" Background="{StaticResource OrangeBrush300}" BorderBrush="{StaticResource OrangeBrush300}" Height="42" Padding="10"> <StackPanel Orientation="Horizontal"> <materialDesign:PackIcon Kind="ContentCopy" Width="24" Height="24"></materialDesign:PackIcon> <TextBlock VerticalAlignment="Center" Foreground="{StaticResource AccentSelectedColorBrush}">Duplicate</TextBlock> </StackPanel> </Button> <Button Command="{Binding RemoveBrushStopCommand}" Margin="0 0 4 0" Background="{StaticResource RedBrush300}" BorderBrush="{StaticResource RedBrush300}" Height="42" Padding="10"> <StackPanel Orientation="Horizontal"> <materialDesign:PackIcon Kind="Delete" Width="24" Height="24"></materialDesign:PackIcon> <TextBlock VerticalAlignment="Center" Foreground="{StaticResource AccentSelectedColorBrush}">Remove</TextBlock> </StackPanel> </Button> <Button AutomationProperties.AutomationId="{x:Static automation:Developer.AddBrushStopButton}" Command="{Binding AddBrushStopCommand}" Background="{StaticResource GreenBrush300}" BorderBrush="{StaticResource GreenBrush300}" Height="42" Padding="10"> <StackPanel Orientation="Horizontal"> <materialDesign:PackIcon Kind="Plus" Width="24" Height="24"></materialDesign:PackIcon> <TextBlock VerticalAlignment="Center" Foreground="{StaticResource AccentSelectedColorBrush}">New</TextBlock> </StackPanel> </Button> </StackPanel> </Border> <Grid Margin="0 40 0 0"> <DockPanel> <Grid DockPanel.Dock="Top"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> <Image Source="../Images/color-palette.png" Width="42"></Image> <TextBlock VerticalAlignment="Center" Margin="10 0 0 0" Foreground="{StaticResource DimGrayBrush}" FontSize="16" FontWeight="SemiBold">SEGMENT BRUSH</TextBlock> </StackPanel> <DockPanel> <StackPanel Orientation="Horizontal" DockPanel.Dock="Right" VerticalAlignment="Center" Margin="0 0 0 0"> <TextBlock VerticalAlignment="Center" Foreground="{StaticResource DimGrayBrush}">Generate Gradient</TextBlock> <ToggleButton Margin="10 0 0 0" IsChecked="{Binding Settings.EnableGradientGeneration,Mode=TwoWay}" /> <TextBlock Margin="10 0 0 0" VerticalAlignment="Center" Foreground="{StaticResource DimGrayBrush}">Resolution:</TextBlock> <mahapps:NumericUpDown HideUpDownButtons="True" Width="90" HorizontalAlignment="Left" FontSize="14" FontFamily="{StaticResource digital-7}" StringFormat="{}{0:N0} cm" Margin="5 1 0 0" Minimum="10" Maximum="1000" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" BorderBrush="{StaticResource DimGrayBrush}" InterceptMouseWheel="True" HasDecimals="True" HorizontalContentAlignment="Left" Value="{Binding Settings.GradientResolutionCM,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"> <mahapps:NumericUpDown.Resources> <StaticResource ResourceKey="SelectAllTextBoxResource"></StaticResource> </mahapps:NumericUpDown.Resources> </mahapps:NumericUpDown> </StackPanel> <Rectangle HorizontalAlignment="Stretch" VerticalAlignment="Center" Height="15" Margin="200 0 10 0" StrokeThickness="1" Stroke="Gainsboro"> <Rectangle.Fill> <LinearGradientBrush StartPoint="0,0" EndPoint="1,0" x:Name="gradientBrush"></LinearGradientBrush> </Rectangle.Fill> </Rectangle> </DockPanel> </Grid> <Grid Margin="0 10 10 0"> <controls:MultiSelectListBox x:Name="listStops" ScrollViewer.HorizontalScrollBarVisibility="Disabled" AutomationProperties.AutomationId="{x:Static automation:Developer.BrushStopsListBox}" SelectionMode="Extended" Style="{x:Null}" Background="Transparent" ScrollViewer.CanContentScroll="False" BorderThickness="0" ItemsSource="{Binding BrushStopsCollectionView}" SelectedItem="{Binding SelectedBrushStop}" SelectedItemsList="{Binding SelectedBrushStops,Mode=TwoWay}" HorizontalContentAlignment="Stretch"> <ListBox.Template> <ControlTemplate TargetType="{x:Type ListBox}"> <Border x:Name="Bd" SnapsToDevicePixels="true" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="1"> <Grid> <ScrollViewer Padding="{TemplateBinding Padding}" Focusable="false"> <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> </ScrollViewer> </Grid> </Border> <ControlTemplate.Triggers> <Trigger Property="IsEnabled" Value="false"> <Setter Property="Background" TargetName="Bd" Value="Transparent" /> </Trigger> <Trigger Property="IsGrouping" Value="true"> <Setter Property="ScrollViewer.CanContentScroll" Value="false" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </ListBox.Template> <ListBox.ItemContainerStyle> <Style TargetType="ListBoxItem" BasedOn="{StaticResource basicListBoxItem}"> <EventSetter Event="PreviewMouseDown" Handler="OnBrushStopMouseDown"></EventSetter> </Style> </ListBox.ItemContainerStyle> <ItemsControl.ItemTemplate> <DataTemplate DataType="{x:Type observables:BrushStop}"> <StackPanel Margin="0 0 0 5"> <Border BorderThickness="1" CornerRadius="5" Padding="10" dragAndDrop:DragAndDropService.Drop="OnBrushStopBorderDrop"> <Border.Style> <Style TargetType="Border" BasedOn="{StaticResource brushStopBorder}"> <Setter Property="BorderBrush" Value="{StaticResource LightGrayBrush100}"></Setter> <Setter Property="Background" Value="{StaticResource TransparentBackgroundBrush600}"></Setter> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem},Path=IsSelected,FallbackValue=False}" Value="True"> <Setter Property="BorderBrush" Value="Gainsboro"></Setter> <Setter Property="Background" Value="{StaticResource SideBarBackground}"></Setter> </DataTrigger> </Style.Triggers> </Style> </Border.Style> <Grid> <DockPanel> <ContentControl DockPanel.Dock="Left" Content="{Binding}"> <ContentControl.Style> <Style TargetType="ContentControl"> <Setter Property="ContentTemplate"> <Setter.Value> <DataTemplate/> </Setter.Value> </Setter> <Style.Triggers> <DataTrigger Binding="{Binding ColorSpace.Name}" Value="Volume"> <Setter Property="ContentTemplate" Value="{StaticResource Volume_Template}" /> </DataTrigger> <DataTrigger Binding="{Binding ColorSpace.Name}" Value="RGB"> <Setter Property="ContentTemplate" Value="{StaticResource RGB_Template}" /> </DataTrigger> <DataTrigger Binding="{Binding ColorSpace.Name}" Value="CMYK"> <Setter Property="ContentTemplate" Value="{StaticResource CMYK_Template}" /> </DataTrigger> <DataTrigger Binding="{Binding ColorSpace.Name}" Value="LAB"> <Setter Property="ContentTemplate" Value="{StaticResource LAB_Template}" /> </DataTrigger> </Style.Triggers> </Style> </ContentControl.Style> </ContentControl> <Grid DockPanel.Dock="Right"> <Border Style="{StaticResource JobFieldBorder}"> <StackPanel Margin="5" Width="140"> <StackPanel Orientation="Horizontal"> <Image Source="../Images/colorspace.png" Width="24"></Image> <TextBlock VerticalAlignment="Center" Margin="5 0 0 0" FontSize="10">Color Space</TextBlock> </StackPanel> <ComboBox SelectionChanged="OnBrushStopColorSpace_SelectionChanged" ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.ColorSpaces}" SelectedItem="{Binding ColorSpace}" DisplayMemberPath="Name" Width="100" HorizontalAlignment="Left"> <ComboBox.ItemContainerStyle> <Style TargetType="ComboBoxItem" BasedOn="{StaticResource {x:Type ComboBoxItem}}"> <Setter Property="Background" Value="{StaticResource WhiteBrush100}"></Setter> </Style> </ComboBox.ItemContainerStyle> </ComboBox> </StackPanel> </Border> </Grid> <Grid> <StackPanel VerticalAlignment="Center"> <StackPanel.Style> <Style TargetType="StackPanel"> <Setter Property="Visibility" Value="Hidden"></Setter> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.SelectedSegment.BrushStops.Count,Converter={StaticResource GreaterThanToBooleanConverter},ConverterParameter=1}" Value="True"> <Setter Property="Visibility" Value="Visible"></Setter> </DataTrigger> </Style.Triggers> </Style> </StackPanel.Style> <TextBlock Width="180" TextAlignment="Center" HorizontalAlignment="Center" FontSize="16"> <Run FontWeight="Bold" FontStyle="Italic" Text="OFFSET:" Foreground="{StaticResource GrayBrush250}"></Run> <Run FontFamily="{StaticResource digital-7}" Text="{Binding OffsetPercent,StringFormat={}{0:F1}%}" Foreground="{StaticResource BlackForegroundBrush}"></Run> <Run FontSize="12" Foreground="{StaticResource GrayBrush250}" Text="{Binding OffsetMeters,Mode=OneWay,StringFormat={} ( {0:F1}m )}"></Run> </TextBlock> <Slider ValueChanged="Offset_Slider_ValueChanged" Style="{StaticResource GradientOffsetSlider}" SmallChange="0.1" IsSnapToTickEnabled="True" TickFrequency="0.1" Margin="0 20 0 0" HorizontalAlignment="Center" Width="300" Value="{Binding OffsetPercent}" IsEnabled="{Binding IsMiddle}" Minimum="0" Maximum="100"> <Slider.Foreground> <SolidColorBrush Color="{Binding Color}"></SolidColorBrush> </Slider.Foreground> <!--<Slider.Minimum> <MultiBinding Converter="{StaticResource BrushStopToOffsetLimitConverter}" ConverterParameter="min"> <Binding Path="."></Binding> <Binding RelativeSource="{RelativeSource AncestorType=UserControl,Mode=FindAncestor}" Path="DataContext.SelectedSegment"></Binding> <Binding Path="StopIndex"></Binding> </MultiBinding> </Slider.Minimum> <Slider.Maximum> <MultiBinding Converter="{StaticResource BrushStopToOffsetLimitConverter}" ConverterParameter="max"> <Binding Path="." Delay="500"></Binding> <Binding RelativeSource="{RelativeSource AncestorType=UserControl,Mode=FindAncestor}" Path="DataContext.SelectedSegment"></Binding> <Binding Path="StopIndex"></Binding> </MultiBinding> </Slider.Maximum>--> </Slider> </StackPanel> </Grid> </DockPanel> </Grid> </Border> <StackPanel> <Grid VerticalAlignment="Top" Visibility="{Binding ElementName=toggleExpand,Path=IsChecked,Converter={StaticResource BooleanToVisibilityConverter}}"> <Grid.Style> <Style TargetType="Grid"> <Setter Property="LayoutTransform"> <Setter.Value> <ScaleTransform ScaleX="1" ScaleY="0" /> </Setter.Value> </Setter> <Style.Triggers> <DataTrigger Binding="{Binding ElementName=toggleExpand, Path=IsChecked}" Value="True"> <DataTrigger.EnterActions> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetProperty="LayoutTransform.ScaleY" To="1" Duration="00:00:0.2" /> </Storyboard> </BeginStoryboard> </DataTrigger.EnterActions> <DataTrigger.ExitActions> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetProperty="LayoutTransform.ScaleY" To="0" Duration="00:00:0.2" /> </Storyboard> </BeginStoryboard> </DataTrigger.ExitActions> </DataTrigger> </Style.Triggers> </Style> </Grid.Style> <ContentControl> <ContentControl.Style> <Style TargetType="ContentControl"> <Setter Property="Content" Value="{x:Null}"></Setter> <Style.Triggers> <DataTrigger Binding="{Binding ElementName=toggleExpand,Path=IsChecked}" Value="True"> <Setter Property="Content"> <Setter.Value> <DataGrid AutoGenerateColumns="False" IsSynchronizedWithCurrentItem="True" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserResizeRows="False" CanUserSortColumns="False" Background="Transparent" SelectionUnit="FullRow"> <DataGrid.Style> <Style TargetType="DataGrid" BasedOn="{StaticResource {x:Type DataGrid}}"> <Setter Property="ItemsSource" Value="{Binding LiquidVolumes}"></Setter> <Style.Triggers> <DataTrigger Binding="{Binding Source={x:Reference control},Path=DataContext.Settings.UsePreferredLiquidVolumeIndex}" Value="True"> <Setter Property="ItemsSource" Value="{Binding LiquidVolumesOrdered}"></Setter> </DataTrigger> </Style.Triggers> </Style> </DataGrid.Style> <DataGrid.CellStyle> <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}"> <Setter Property="BorderThickness" Value="0"/> <Setter Property="FocusVisualStyle" Value="{x:Null}"/> </Style> </DataGrid.CellStyle> <DataGrid.Columns> <DataGridTemplateColumn Header="IDS PACK"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Grid x:Name="t0"> <Polygon x:Name="t1" Points="0,0 15,0 0,15 0,0" Margin="-15 -9 0 0"> <Polygon.Fill> <SolidColorBrush x:Name="t2" Color="{Binding IdsPack.LiquidType.Color,Converter={StaticResource ColorToIntegerConverter},FallbackValue={StaticResource dummyColor}}" /> </Polygon.Fill> </Polygon> <TextBlock FontWeight="SemiBold" TextWrapping="Wrap" TextAlignment="Center" VerticalAlignment="Center" Text="{Binding IdsPack.LiquidType.Name}"></TextBlock> </Grid> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn Header="IDX"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding IdsPack.PackIndex,Converter={StaticResource MathOperatorConverter},ConverterParameter='+1'}" VerticalAlignment="Center" HorizontalAlignment="Center" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn Header="D/F"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock VerticalAlignment="Center"> <Run Text="{Binding NanoliterPerStep,Mode=OneWay,StringFormat='0.00'}"></Run> <Run Text="(nl)" FontSize="9" Foreground="{StaticResource GrayBrush250}"></Run> </TextBlock> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn Header="STEP"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <ComboBox ItemsSource="{Binding Source={StaticResource dispenserDivisions}}" SelectedItem="{Binding DispenserStepDivision,UpdateSourceTrigger=PropertyChanged}" BorderThickness="0"> <ComboBox.ItemContainerStyle> <Style TargetType="ComboBoxItem" BasedOn="{StaticResource {x:Type ComboBoxItem}}"> <Setter Property="Background" Value="{StaticResource WhiteBrush100}"></Setter> </Style> </ComboBox.ItemContainerStyle> <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Converter={StaticResource EnumToDescriptionConverter}}"></TextBlock> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn Header="MAX NL / CM"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock VerticalAlignment="Center"> <Run Text="{Binding LiquidMaxNanoliterPerCentimeter,Mode=OneWay,StringFormat='0.0'}"></Run> <Run Text="(nl)" FontSize="9" Foreground="{StaticResource GrayBrush250}"></Run> </TextBlock> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn Header="VOLUME"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock VerticalAlignment="Center"> <Run Text="{Binding Volume}"></Run> <Run Text="%" Foreground="{StaticResource GrayBrush250}"></Run> </TextBlock> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn Header="FORMULA"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock VerticalAlignment="Center"> <Run Text="{Binding IdsPack.IdsPackFormula.Name}"></Run> </TextBlock> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn Header="NL / CM"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock VerticalAlignment="Center"> <Run Text="{Binding NanoliterPerCentimeter,Mode=OneWay,StringFormat='0.0'}"></Run> <Run Text="(nl)" FontSize="9" Foreground="{StaticResource GrayBrush250}"></Run> </TextBlock> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn Header="NL / SEC"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock VerticalAlignment="Center"> <Run Text="{Binding NanoliterPerSecond,Mode=OneWay,StringFormat='0.0'}"></Run> <Run Text="(nl)" FontSize="9" Foreground="{StaticResource GrayBrush250}"></Run> </TextBlock> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn Header="PULSE / SEC"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Label VerticalAlignment="Center"> <Label.Style> <Style TargetType="Label"> <Setter Property="Content"> <Setter.Value> <TextBlock> <Run Text="{Binding PulsePerSecondFull,Mode=OneWay,StringFormat='0.0'}"></Run> <Run Text="(pulse)" FontSize="9" Foreground="{StaticResource GrayBrush250}"></Run> </TextBlock> </Setter.Value> </Setter> <Style.Triggers> <DataTrigger Binding="{Binding DispenserStepDivision}" Value="{x:Static dispensing:DispenserStepDivisions.Auto}"> <Setter Property="Content" Value="Auto"></Setter> </DataTrigger> <DataTrigger Binding="{Binding DispenserStepDivision,Converter={StaticResource IsNotConverter},ConverterParameter={x:Static dispensing:DispenserStepDivisions.Auto}}" Value="True"> <Setter Property="Content"> <Setter.Value> <TextBlock> <Run Text="{Binding PulsePerSecondFull,Mode=OneWay,StringFormat='0.0'}"></Run> <Run Text="(pulse)" FontSize="9" Foreground="{StaticResource GrayBrush250}"></Run> </TextBlock> </Setter.Value> </Setter> </DataTrigger> </Style.Triggers> </Style> </Label.Style> </Label> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn Header="PULSE / SEC (full step)"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Label VerticalAlignment="Center"> <Label.Style> <Style TargetType="Label"> <Setter Property="Content"> <Setter.Value> <TextBlock> <Run Text="{Binding PulsePerSecond,Mode=OneWay,StringFormat='0.0'}"></Run> <Run Text="(pulse)" FontSize="9" Foreground="{StaticResource GrayBrush250}"></Run> </TextBlock> </Setter.Value> </Setter> <Style.Triggers> <DataTrigger Binding="{Binding DispenserStepDivision}" Value="{x:Static dispensing:DispenserStepDivisions.Auto}"> <Setter Property="Content" Value="Auto"></Setter> </DataTrigger> <DataTrigger Binding="{Binding DispenserStepDivision,Converter={StaticResource IsNotConverter},ConverterParameter={x:Static dispensing:DispenserStepDivisions.Auto}}" Value="True"> <Setter Property="Content"> <Setter.Value> <TextBlock> <Run Text="{Binding PulsePerSecond,Mode=OneWay,StringFormat='0.0'}"></Run> <Run Text="(pulse)" FontSize="9" Foreground="{StaticResource GrayBrush250}"></Run> </TextBlock> </Setter.Value> </Setter> </DataTrigger> </Style.Triggers> </Style> </Label.Style> </Label> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid> </Setter.Value> </Setter> </DataTrigger> </Style.Triggers> </Style> </ContentControl.Style> </ContentControl> </Grid> <ToggleButton Margin="5" x:Name="toggleExpand" Style="{StaticResource MaterialDesignFlatToggleButton}" ToolTip="View more" HorizontalAlignment="Right" Padding="0" Width="24" Height="24" VerticalContentAlignment="Center"> <materialDesign:PackIcon VerticalAlignment="Center"> <materialDesign:PackIcon.Style> <Style TargetType="materialDesign:PackIcon"> <Setter Property="Kind" Value="ArrowDown"></Setter> <Setter Property="Margin" Value="0"></Setter> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=IsChecked}" Value="True"> <Setter Property="Kind" Value="ArrowUp"></Setter> </DataTrigger> </Style.Triggers> </Style> </materialDesign:PackIcon.Style> </materialDesign:PackIcon> </ToggleButton> </StackPanel> </StackPanel> </DataTemplate> </ItemsControl.ItemTemplate> </controls:MultiSelectListBox> </Grid> </DockPanel> </Grid> </DockPanel> </Grid> </DockPanel> </Grid> </Grid> <Grid Height="80" Grid.Row="1"> <DockPanel> <Grid DockPanel.Dock="Left" VerticalAlignment="Center" Margin="20 15 0 0"> <TextBlock FontSize="16" Margin="0 0 0 0"> <Run FontWeight="Bold" Foreground="{StaticResource BlackForegroundBrush}">ESTIMATED DURATION:</Run> <Run Foreground="{StaticResource BlackForegroundBrush}" FontSize="22" FontStyle="Italic" FontFamily="{StaticResource digital-7}" Text="{Binding EstimatedDuration,StringFormat=hh\\:mm\\:ss,TargetNullValue='00:00:00'}"></Run> </TextBlock> </Grid> <Grid DockPanel.Dock="Right" Margin="0 0 10 0"> <StackPanel Orientation="Horizontal" Visibility="{Binding IsJobRunning,Converter={StaticResource BooleanToVisibilityInverseConverter}}" IsEnabled="{Binding MachineOperator.CanPrint}"> <Button Height="60" Width="280" Command="{Binding StartJobCommand}" Click="OnJobStartClick"> <StackPanel Orientation="Horizontal"> <materialDesign:PackIcon VerticalAlignment="Center" Width="32" Height="32" Kind="ClockFast" /> <TextBlock VerticalAlignment="Center" Margin="10 0 0 0" FontSize="18" Foreground="{StaticResource WhiteTextBrush}">START JOB</TextBlock> </StackPanel> </Button> <Button Height="60" Width="60" Margin="-60 0 0 0" Padding="0" Command="{Binding StartJobAndRecordCommand}" Click="OnJobStartClick" ToolTip="Start Job and Record"> <materialDesign:PackIcon VerticalAlignment="Center" Width="38" Height="38" Kind="Record" Foreground="{StaticResource RedBrush200}" /> </Button> </StackPanel> <Button Command="{Binding ToRunningJobCommand}" Width="280" Height="60" Visibility="{Binding IsJobRunning,Converter={StaticResource BooleanToVisibilityConverter}}"> <StackPanel Orientation="Horizontal"> <materialDesign:PackIcon VerticalAlignment="Center" Width="32" Height="32" Kind="AlertCircle" /> <TextBlock VerticalAlignment="Center" Margin="10 0 0 0" FontSize="18" Foreground="{StaticResource WhiteTextBrush}">VIEW RUNNING JOB</TextBlock> </StackPanel> </Button> </Grid> <Grid Margin="0 -18 0 0"> <Border VerticalAlignment="Center" Height="55" Margin="30 0 40 0" ClipToBounds="False"> <Grid ClipToBounds="False"> <ItemsControl x:Name="jobBrushList" ClipToBounds="False" Margin="40 0 50 0"> <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="DataContext.ActiveJob.Length"></Binding> <Binding RelativeSource="{RelativeSource AncestorType=ItemsControl}" Path="ActualWidth"></Binding> <Binding Path="Length"></Binding> </MultiBinding> </Grid.Width> <Rectangle VerticalAlignment="Bottom" Height="20"> <Rectangle.Fill> <MultiBinding Converter="{StaticResource SegmentToBrushConverterMulti}"> <Binding Path="."></Binding> <Binding RelativeSource="{RelativeSource AncestorType=UserControl}" Path="DataContext.ActiveJob"></Binding> <Binding RelativeSource="{RelativeSource AncestorType=UserControl}" Path="DataContext.ActiveJob.Length"></Binding> <Binding RelativeSource="{RelativeSource AncestorType=UserControl}" Path="DataContext.SelectedBrushStop.Color"></Binding> </MultiBinding> </Rectangle.Fill> </Rectangle> <StackPanel Margin="0 0 0 0" HorizontalAlignment="Center"> <TextBlock FontSize="12" HorizontalAlignment="Right" Foreground="{StaticResource BlackForegroundBrush}"> <Run Text="{Binding Length,Mode=OneWay,StringFormat=N2}"></Run> <Run Foreground="{StaticResource GrayBrush250}" FontSize="10" Text="m"></Run> </TextBlock> <materialDesign:PackIcon HorizontalAlignment="Center" RenderTransformOrigin="0.5,0.5" Kind="Triangle" Width="8" Height="8" Foreground="{StaticResource DimGrayBrush}"> <materialDesign:PackIcon.RenderTransform> <RotateTransform Angle="180" /> </materialDesign:PackIcon.RenderTransform> </materialDesign:PackIcon> </StackPanel> </Grid> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> <StackPanel Margin="-30 -5 0 0" HorizontalAlignment="Left"> <TextBlock FontSize="12" Foreground="{StaticResource BlackForegroundBrush}"> <Run Text="0"></Run> <Run Foreground="{StaticResource GrayBrush250}" FontSize="10" Text="m"></Run> </TextBlock> <materialDesign:PackIcon HorizontalAlignment="Right" RenderTransformOrigin="0.5,0.5" Kind="SubdirectoryArrowRight" Width="16" Height="16" Foreground="{StaticResource DimGrayBrush}"> </materialDesign:PackIcon> </StackPanel> <StackPanel Margin="0 -5 -20 0" HorizontalAlignment="Right"> <TextBlock FontSize="12" Foreground="{StaticResource BlackForegroundBrush}"> <Run Text="{Binding ActiveJob.Length,Mode=OneWay,StringFormat=N2}"></Run> <Run Foreground="Gray" FontSize="10" Text="m"></Run> <Run>x</Run> <Run Text="{Binding ActiveJob.NumberOfUnits}"></Run> </TextBlock> <materialDesign:PackIcon HorizontalAlignment="Right" RenderTransformOrigin="0.5,0.5" Kind="FlagCheckered" Width="16" Height="16" Foreground="{StaticResource DimGrayBrush}"> </materialDesign:PackIcon> </StackPanel> <Border BorderBrush="{StaticResource BorderBrushGainsboro}" BorderThickness="1" VerticalAlignment="Bottom" Height="20" Margin="40 0 50 0"> </Border> </Grid> </Border> </Grid> </DockPanel> </Grid> </Grid> </Grid> </Grid> </Grid> <Grid> <Grid Background="{StaticResource TransparentBackgroundBrush100}"> <Grid.Style> <Style TargetType="Grid"> <Setter Property="Width" Value="640"></Setter> <Setter Property="LayoutTransform"> <Setter.Value> <ScaleTransform ScaleY="1" ScaleX="0"></ScaleTransform> </Setter.Value> </Setter> <Style.Triggers> <DataTrigger Binding="{Binding IsSideBarOpened}" Value="True"> <DataTrigger.EnterActions> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetProperty="LayoutTransform.ScaleX" To="1" Duration="00:00:0.2"></DoubleAnimation> </Storyboard> </BeginStoryboard> </DataTrigger.EnterActions> <DataTrigger.ExitActions> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetProperty="LayoutTransform.ScaleX" To="0" Duration="00:00:0.2"></DoubleAnimation> </Storyboard> </BeginStoryboard> </DataTrigger.ExitActions> </DataTrigger> </Style.Triggers> </Style> </Grid.Style> <ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" Background="Transparent"> <StackPanel> <Expander Header="PROCESS PARAMETERS" IsExpanded="True" Background="Transparent"> <Grid> <Grid> <StackPanel Orientation="Vertical" Margin="5"> <Border MaxHeight="200" Margin="5"> <DockPanel> <ComboBox Margin="0 10 0 0" ItemsSource="{Binding GroupsHistory}" SelectedItem="{Binding SelectedGroupHistory}"> <ComboBox.ItemContainerStyle> <Style TargetType="ComboBoxItem" BasedOn="{StaticResource {x:Type ComboBoxItem}}"> <Setter Property="Background" Value="{StaticResource TransparentBackgroundBrush200}"></Setter> <Setter Property="Padding" Value="5"></Setter> </Style> </ComboBox.ItemContainerStyle> <ComboBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal" Margin="0 10"> <TextBlock Text="{Binding Name}" FontWeight="Bold" VerticalAlignment="Center"> <TextBlock.Style> <Style TargetType="TextBlock"> <Style.Triggers> <DataTrigger Binding="{Binding Active}" Value="True"> <Setter Property="Foreground" Value="{StaticResource RedBrush100}"></Setter> <Setter Property="FontStyle" Value="Italic"></Setter> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock> <TextBlock Text="{Binding SaveDate}" Margin="10 0 0 0" FontStyle="Italic" Foreground="{StaticResource GrayBrush250}" VerticalAlignment="Center"></TextBlock> </StackPanel> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> </DockPanel> </Border> <ListBox ScrollViewer.VerticalScrollBarVisibility="Disabled" ScrollViewer.HorizontalScrollBarVisibility="Disabled" Background="Transparent" BorderThickness="0" Style="{x:Null}" HorizontalContentAlignment="Stretch" ItemsSource="{Binding RmlProcessParametersTableGroup.ProcessParametersTables}" SelectedItem="{Binding SelectedProcessParametersTable}"> <ListBox.ItemContainerStyle> <Style TargetType="ListBoxItem" BasedOn="{StaticResource basicListBoxItem}"> </Style> </ListBox.ItemContainerStyle> <ListBox.ItemTemplate> <DataTemplate DataType="{x:Type observables:ProcessParametersTable}"> <Border Padding="5" CornerRadius="5" BorderThickness="1" Margin="5" IsEnabled="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.RmlProcessParametersTableGroup.Active}"> <Border.Style> <Style TargetType="Border"> <Setter Property="BorderBrush" Value="{StaticResource borderBrush}"></Setter> <Setter Property="Opacity" Value="0.5"></Setter> <Setter Property="Background" Value="Transparent"></Setter> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem},Path=IsSelected,FallbackValue=False}" Value="True"> <Setter Property="BorderBrush" Value="{StaticResource AccentColorBrush}"></Setter> <Setter Property="Background" Value="{StaticResource TransparentBackgroundBrush300}"></Setter> <Setter Property="Opacity" Value="1"></Setter> </DataTrigger> <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.AutoProcessSelection}" Value="True"> <Setter Property="BorderBrush" Value="{StaticResource AccentColorBrush}"></Setter> <Setter Property="Background" Value="Transparent"></Setter> <Setter Property="Opacity" Value="1"></Setter> </DataTrigger> </Style.Triggers> </Style> </Border.Style> <Grid> <StackPanel> <DockPanel> <TextBox materialDesign:HintAssist.Hint="Table Name" DockPanel.Dock="Top" Text="{Binding Name}" Foreground="{StaticResource MainWindow.Foreground}"></TextBox> <WrapPanel Orientation="Vertical" Margin="0 5 0 0"> <WrapPanel.Resources> <Style TargetType="TextBlock"> <Setter Property="FontSize" Value="10"></Setter> <Setter Property="Foreground" Value="{StaticResource GrayBrush50}"></Setter> <Setter Property="Margin" Value="0 5 0 5"></Setter> <Setter Property="MinWidth" Value="80"></Setter> </Style> <Style TargetType="mahapps:NumericUpDown"> <Setter Property="FontFamily" Value="{StaticResource digital-7}"></Setter> </Style> <Style TargetType="ContentControl"> <!--<Setter Property="FontFamily" Value="digital-7"></Setter>--> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ContentControl"> <Grid Width="97"> <Border> <Border.Style> <Style TargetType="Border"> <Setter Property="BorderBrush" Value="{StaticResource BorderBrushGainsboro}"></Setter> <Setter Property="BorderThickness" Value="1"></Setter> <Setter Property="Padding" Value="2"></Setter> <Setter Property="Margin" Value="4"></Setter> <Setter Property="CornerRadius" Value="3"></Setter> </Style> </Border.Style> <ContentPresenter Content="{TemplateBinding Content}"></ContentPresenter> </Border> <materialDesign:PackIcon HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0 0 0 0" Width="12" Height="12" Kind="Settings"></materialDesign:PackIcon> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> </WrapPanel.Resources> <editors:ParameterizedEditor ParameterizedObject="{Binding}"> <editors:ParameterizedEditor.ItemsPanel> <ItemsPanelTemplate> <WrapPanel IsItemsHost="True" Orientation="Horizontal" /> </ItemsPanelTemplate> </editors:ParameterizedEditor.ItemsPanel> <editors:ParameterizedEditor.DoubleTemplate> <DataTemplate> <Grid Background="Transparent"> <ContentControl> <StackPanel> <TextBlock ToolTip="{Binding Name}" IsHitTestVisible="False" Margin="0 5 0 5" Text="{Binding Name}" FontSize="11" Foreground="{StaticResource MainWindow.Foreground}"></TextBlock> <mahapps:NumericUpDown FontSize="20" Minimum="0" Margin="0 0 5 0" HideUpDownButtons="True" HorizontalContentAlignment="Center" Maximum="10000" StringFormat="{Binding StringFormat}" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="True" Value="{Binding Value,Mode=TwoWay}" Foreground="{StaticResource MainWindow.Foreground}"></mahapps:NumericUpDown> </StackPanel> </ContentControl> </Grid> </DataTemplate> </editors:ParameterizedEditor.DoubleTemplate> </editors:ParameterizedEditor> </WrapPanel> </DockPanel> <Grid HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="5"> <StackPanel Orientation="Horizontal" Visibility="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem},Path=IsSelected,Converter={StaticResource BooleanToVisibilityConverter}}"> <TextBlock Text="Active" FontWeight="Bold" FontStyle="Italic" FontSize="13" VerticalAlignment="Center"></TextBlock> <materialDesign:PackIcon Foreground="{StaticResource GreenBrush400}" Kind="CheckboxBlankCircle" VerticalAlignment="Center" Margin="5 0 0 0"> <materialDesign:PackIcon.Style> <Style TargetType="materialDesign:PackIcon"> <Setter Property="Opacity" Value="0"></Setter> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem},Path=IsSelected,FallbackValue=False}" Value="True"> <DataTrigger.EnterActions> <BeginStoryboard> <Storyboard> <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Duration="00:00:01" RepeatBehavior="Forever"> <DiscreteDoubleKeyFrame KeyTime="00:00:00" Value="1" /> <DiscreteDoubleKeyFrame KeyTime="00:00:0.5" Value="0" /> </DoubleAnimationUsingKeyFrames> </Storyboard> </BeginStoryboard> </DataTrigger.EnterActions> <DataTrigger.ExitActions> <BeginStoryboard> <Storyboard> <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Duration="00:00:01"> <DiscreteDoubleKeyFrame KeyTime="00:00:00" Value="0" /> </DoubleAnimationUsingKeyFrames> </Storyboard> </BeginStoryboard> </DataTrigger.ExitActions> </DataTrigger> </Style.Triggers> </Style> </materialDesign:PackIcon.Style> </materialDesign:PackIcon> </StackPanel> </Grid> </StackPanel> </Grid> </Border> </DataTemplate> </ListBox.ItemTemplate> </ListBox> <StackPanel Margin="10 10" VerticalAlignment="Bottom"> <StackPanel Orientation="Horizontal"> <ToggleButton IsChecked="{Binding AutoProcessSelection}" /> <TextBlock Margin="5 3 0 0">Use Recommended Process Parameters (auto)</TextBlock> </StackPanel> <Grid Margin="0 40 0 0" > <Button HorizontalAlignment="Left" Height="40" Width="105" Command="{Binding ResetProcessParametersCommand}" Background="Transparent" BorderBrush="{StaticResource DarkGrayBrush200}" Foreground="{StaticResource DarkGrayBrush200}" Margin="0 2 10 0" ToolTip="Resets the current process parameters in the embedded device"> <TextBlock TextWrapping="Wrap" TextAlignment="Center"> TEMP OFF </TextBlock> </Button> <StackPanel Orientation="Horizontal" HorizontalAlignment="Right"> <Button Height="40" Command="{Binding SaveProcessParametersCommand}" HorizontalAlignment="Left" IsEnabled="{Binding AuthenticationProvider.CurrentUser,Converter={StaticResource UserRoleToBooleanConverter},ConverterParameter='Researcher'}"> <StackPanel Orientation="Horizontal"> <materialDesign:PackIcon VerticalAlignment="Center" Kind="ContentSave"></materialDesign:PackIcon> <TextBlock Margin="10 0 0 0">SAVE PARAMETERS</TextBlock> </StackPanel> </Button> <Button Height="40" Margin="10 0 0 0" Command="{Binding PushProcessParametersCommand}" HorizontalAlignment="Left"> <StackPanel Orientation="Horizontal"> <materialDesign:PackIcon VerticalAlignment="Center" Kind="ArrowRightBold"></materialDesign:PackIcon> <TextBlock Margin="10 0 0 0">PUSH PARAMETERS</TextBlock> </StackPanel> </Button> </StackPanel> </Grid> </StackPanel> </StackPanel> </Grid> <Grid Background="White"> <Grid.Style> <Style TargetType="Grid"> <Setter Property="Visibility" Value="Visible"></Setter> <Style.Triggers> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding SelectedMachine,Converter={StaticResource NullObjectToBooleanConverter}}" Value="True"></Condition> <Condition Binding="{Binding SelectedRML,Converter={StaticResource NullObjectToBooleanConverter}}" Value="True"></Condition> </MultiDataTrigger.Conditions> <Setter Property="Visibility" Value="Collapsed"></Setter> </MultiDataTrigger> </Style.Triggers> </Style> </Grid.Style> <TextBlock Foreground="{StaticResource RedBrush400}" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="24">SELECT MACHINE &amp; MEDIA</TextBlock> </Grid> </Grid> </Expander> <!--<Expander Header="CONTROL PARAMETERS" IsExpanded="False" Background="#8EFFFFFF"> </Expander>--> </StackPanel> </ScrollViewer> <Rectangle HorizontalAlignment="Right" Stroke="{StaticResource GrayBrush280}" VerticalAlignment="Top" Height="427"></Rectangle> <Rectangle HorizontalAlignment="Right" Stroke="{StaticResource GrayBrush280}" VerticalAlignment="Bottom" Height="428"></Rectangle> </Grid> <Button Background="Transparent" Command="{Binding ToggleSideBarCommand}" Padding="0" Style="{StaticResource MaterialDesignFlatButton}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" HorizontalAlignment="Right" VerticalAlignment="Center" Height="200" Width="50" Margin="0 0 -50 0"> <Border Background="{StaticResource WhiteBrush100}" CornerRadius="0 10 10 0" BorderThickness="0 1 1 1" BorderBrush="{StaticResource GrayBrush280}"> <Grid> <TextBlock Foreground="{StaticResource RedBrush300}" Text="PROCESS PARAMETERS" FontSize="16" RenderTransformOrigin="0.5,0.5" VerticalAlignment="Center" HorizontalAlignment="Center"> <TextBlock.LayoutTransform> <RotateTransform Angle="270"></RotateTransform> </TextBlock.LayoutTransform> </TextBlock> </Grid> </Border> </Button> </Grid> <dragAndDrop:DraggingSurface x:Name="draggingSurface" /> </Grid> </Grid> </UserControl>