Skip to content

Commit f114afb

Browse files
authored
Add support for LuaScript bindings to optionally have UTF-8 string encoding. (#888)
#887
1 parent ede878a commit f114afb

File tree

3 files changed

+63
-14
lines changed

3 files changed

+63
-14
lines changed

Helios/HeliosBinding.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ namespace GadrocsWorkshop.Helios
1919
using NLua;
2020
using NLua.Exceptions;
2121
using System;
22+
using System.Text;
2223

2324
/// <summary>
2425
/// A binding from a source trigger to a target action
@@ -33,6 +34,7 @@ public class HeliosBinding : NotificationObject, INamedBindingElement
3334
private WeakReference _triggerSource = new WeakReference(null);
3435
private WeakReference _targetAction = new WeakReference(null);
3536
private bool _bypassTargetTriggers;
37+
private bool _luaScriptUTF8Encoding = false;
3638
private BindingValueSources _valueSource;
3739
private BindingValue _value = BindingValue.Empty;
3840
private string _condition = "";
@@ -263,14 +265,27 @@ public bool BypassCascadingTriggers
263265
}
264266
}
265267
}
266-
268+
public bool LuaScriptUTF8Encoding
269+
{
270+
get => _luaScriptUTF8Encoding;
271+
set
272+
{
273+
if (!_luaScriptUTF8Encoding.Equals(value))
274+
{
275+
bool oldValue = _luaScriptUTF8Encoding;
276+
_luaScriptUTF8Encoding = value;
277+
OnPropertyChanged("LuaScriptUTF8Encoding", oldValue, value, true);
278+
}
279+
}
280+
}
267281
private Lua LuaInterpreter
268282
{
269283
get
270284
{
271285
if (_luaInterpreter == null)
272286
{
273287
_luaInterpreter = new Lua();
288+
_luaInterpreter.State.Encoding = _luaScriptUTF8Encoding ? Encoding.UTF8 : Encoding.ASCII;
274289

275290
// add lua environment variables
276291
_luaInterpreter.DoString("HeliosPath = " + "'" + ConfigManager.DocumentPath.Replace("\\", "\\\\") + "'");

Helios/HeliosSerializer.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,10 @@ public void SerializeBinding(HeliosBinding binding, XmlWriter xmlWriter)
276276
xmlWriter.WriteStartElement("Binding");
277277

278278
xmlWriter.WriteAttributeString("BypassCascadingTriggers", boolConverter.ConvertToInvariantString(binding.BypassCascadingTriggers));
279-
279+
if (binding.LuaScriptUTF8Encoding)
280+
{
281+
xmlWriter.WriteAttributeString("LuaScriptUTF8Encoding", boolConverter.ConvertToInvariantString(binding.LuaScriptUTF8Encoding));
282+
}
280283
xmlWriter.WriteStartElement("Trigger");
281284
xmlWriter.WriteAttributeString("Source", GetReferenceName(binding.Trigger.Source));
282285
xmlWriter.WriteAttributeString("Name", binding.Trigger.TriggerID);
@@ -356,6 +359,10 @@ private HeliosBinding DeserializeBinding(HeliosProfile profile, HeliosVisual roo
356359

357360
HeliosBinding binding = (HeliosBinding)CreateNewObject("Binding", "");
358361
binding.BypassCascadingTriggers = (bool)boolConverter.ConvertFromString(null, CultureInfo.InvariantCulture, xmlReader.GetAttribute("BypassCascadingTriggers"));
362+
if(xmlReader.GetAttribute("LuaScriptUTF8Encoding") != null)
363+
{
364+
binding.LuaScriptUTF8Encoding = (bool)boolConverter.ConvertFromString(null, CultureInfo.InvariantCulture, xmlReader.GetAttribute("LuaScriptUTF8Encoding"));
365+
}
359366
xmlReader.ReadStartElement("Binding");
360367

361368
string sourcePath = xmlReader.GetAttribute("Source");

Profile Editor/BindingsPanel.xaml

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
d:DesignHeight="300" d:DesignWidth="600" Background="{StaticResource ToolBackground}">
1010
<UserControl.Resources>
1111
<ResourceDictionary>
12-
12+
1313
<helios:EnumConverter Type="{x:Type helios:BindingValueSources}" x:Key="BindingSourceValues" />
1414

1515
<Style x:Key="PropertiesTabs" TargetType="TabControl">
@@ -19,7 +19,7 @@
1919
</DataTrigger>
2020
</Style.Triggers>
2121
</Style>
22-
22+
2323
<Style x:Key="LuaHelpTextStyle" TargetType="TextBlock">
2424
<Setter Property="Visibility" Value="Collapsed" />
2525
<Style.Triggers>
@@ -42,8 +42,8 @@
4242
</Style>
4343

4444
<local:BindingsDragDropAdvisor x:Key="DropAdvisor" />
45-
46-
<Style x:Key="ValueExpanderStyle" TargetType="Expander" BasedOn="{StaticResource {x:Type Expander}}">
45+
46+
<Style x:Key="ValueExpanderStyle" TargetType="Expander" BasedOn="{StaticResource {x:Type Expander}}">
4747
<Style.Triggers>
4848
<DataTrigger Binding="{Binding SelectedBinding.Action.ActionRequiresValue}" Value="false">
4949
<Setter Property="Visibility" Value="Collapsed" />
@@ -78,13 +78,13 @@
7878
</DataTrigger>
7979
</Style.Triggers>
8080
</Style>
81-
81+
8282
<ResourceDictionary.MergedDictionaries>
8383
<ResourceDictionary Source="ProfileExplorerResources.xaml" />
8484
</ResourceDictionary.MergedDictionaries>
85-
</ResourceDictionary>
85+
</ResourceDictionary>
8686
</UserControl.Resources>
87-
<Grid>
87+
<Grid Margin="0,0,0,0">
8888
<Grid.RowDefinitions>
8989
<RowDefinition Height="Auto" />
9090
<RowDefinition Height="*" />
@@ -94,7 +94,7 @@
9494
<ColumnDefinition Width="*" />
9595
<ColumnDefinition Width="*" />
9696
</Grid.ColumnDefinitions>
97-
<TabControl Name="IOTab" Grid.RowSpan="2" Grid.ColumnSpan="3" Margin="6" SelectedValuePath="Tag" SelectedValue="{Binding BindingType}">
97+
<TabControl Name="IOTab" Grid.RowSpan="2" Grid.ColumnSpan="3" Margin="6,6,6,6" SelectedValuePath="Tag" SelectedValue="{Binding BindingType}">
9898
<TabItem Header="Input" Tag="Input" />
9999
<TabItem Header="Output" Tag="Output" />
100100
</TabControl>
@@ -117,7 +117,7 @@
117117
<ColumnDefinition Style="{StaticResource TriggerColumn}" />
118118
<ColumnDefinition Width="*" />
119119
</Grid.ColumnDefinitions>
120-
120+
121121
<StackPanel Orientation="Horizontal" Grid.Row="0" Grid.ColumnSpan="2" Margin="6,0,4,0">
122122
<TextBlock Style="{StaticResource PropertyName}" VerticalAlignment="Center">Value Source</TextBlock>
123123
<ComboBox MinWidth="120" ItemsSource="{Binding Source={StaticResource BindingSourceValues}, Path=DisplayNames}" SelectedItem="{Binding SelectedBinding.ValueSource, Converter={StaticResource BindingSourceValues}, Mode=TwoWay}" SelectionChanged="ValueSource_SelectionChanged" HorizontalAlignment="Left" FontSize="10" Margin="4" />
@@ -305,14 +305,41 @@ Other Global Variables:
305305
<RowDefinition Height="Auto" />
306306
<RowDefinition Height="Auto" />
307307
<RowDefinition Height="Auto" />
308+
<RowDefinition Height="Auto" />
309+
<RowDefinition Height="Auto" />
308310
<RowDefinition Height="*" />
309311
</Grid.RowDefinitions>
310312
<CheckBox Grid.Row="0" Grid.Column="0" IsChecked="{Binding SelectedBinding.BypassCascadingTriggers}" HorizontalAlignment="Center" Margin="4,12,8,4" />
311313
<TextBlock Grid.Row="0" Grid.Column="1" Margin="4,8,0,0" Style="{StaticResource PropertyName}" VerticalAlignment="Center">Bypass Cascading Triggers</TextBlock>
312314
<TextBlock Grid.Row="1" Grid.Column="1" Style="{StaticResource Documentation}">When checked any triggers which would normally occur because of this action are surpressed.</TextBlock>
313-
<TextBlock Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Margin="4,12,0,0" Style="{StaticResource PropertyName}" VerticalAlignment="Center">Conditional Expression</TextBlock>
314-
<TextBox Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" Margin="4,4,4,0" Height="60" Text="{Binding SelectedBinding.Condition}" AcceptsReturn="True" TextWrapping="Wrap" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" />
315-
<TextBlock Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" Margin="4,0,0,0" Style="{StaticResource Documentation}">If this LUA script returns false then this binding will abort without executing the action.</TextBlock>
315+
<StackPanel Grid.Row="2" Grid.RowSpan="2" Grid.Column="0" Grid.ColumnSpan="2">
316+
<StackPanel.Style>
317+
<Style TargetType="StackPanel">
318+
<Setter Property="Visibility" Value="Collapsed" />
319+
<Style.Triggers>
320+
<DataTrigger Binding="{Binding SelectedBinding.ValueSource}" Value="LuaScript">
321+
<Setter Property="Visibility" Value="Visible"/>
322+
</DataTrigger>
323+
</Style.Triggers>
324+
</Style>
325+
</StackPanel.Style>
326+
<Grid>
327+
<Grid.ColumnDefinitions>
328+
<ColumnDefinition Width="Auto" />
329+
<ColumnDefinition Width="*" />
330+
</Grid.ColumnDefinitions>
331+
<Grid.RowDefinitions>
332+
<RowDefinition Height="Auto" />
333+
<RowDefinition Height="*" />
334+
</Grid.RowDefinitions>
335+
<CheckBox Grid.Row="0" Grid.Column="0" IsChecked="{Binding SelectedBinding.LuaScriptUTF8Encoding}" HorizontalAlignment="Center" Margin="4,12,8,4" />
336+
<TextBlock Grid.Row="0" Grid.Column="1" Margin="4,8,0,0" Style="{StaticResource PropertyName}" VerticalAlignment="Center">Use UTF-8</TextBlock>
337+
<TextBlock Grid.Row="1" Grid.Column="1" Style="{StaticResource Documentation}">When checked strings in the LuaScript interpreter will be UTF-8 encoded.</TextBlock>
338+
</Grid>
339+
</StackPanel>
340+
<TextBlock Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" Margin="4,12,0,0" Style="{StaticResource PropertyName}" VerticalAlignment="Center">Conditional Expression</TextBlock>
341+
<TextBox Grid.Row="5" Grid.Column="0" Grid.ColumnSpan="2" Margin="4,4,4,0" Height="60" Text="{Binding SelectedBinding.Condition}" AcceptsReturn="True" TextWrapping="Wrap" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" />
342+
<TextBlock Grid.Row="6" Grid.Column="0" Grid.ColumnSpan="2" Margin="4,0,0,0" Style="{StaticResource Documentation}">If this LUA script returns false then this binding will abort without executing the action.</TextBlock>
316343
</Grid>
317344
</Expander>
318345
</StackPanel>

0 commit comments

Comments
 (0)