Skip to content
This repository has been archived by the owner on Jul 6, 2022. It is now read-only.

Commit

Permalink
add editing for parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
thelsing committed Mar 28, 2018
1 parent 652b6e1 commit 3635a94
Show file tree
Hide file tree
Showing 7 changed files with 181 additions and 64 deletions.
5 changes: 4 additions & 1 deletion CreateKnxProd.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,17 @@
<SubType>Designer</SubType>
</ApplicationDefinition>
<Compile Include="Converter\EnumDescriptionTypeConverter.cs" />
<Compile Include="Model\CatalogSection_t.cs" />
<Compile Include="Extensions\Extensions.cs" />
<Compile Include="Model\IGetByteSize.cs" />
<Compile Include="Model\ParameterRefRef_t.cs" />
<Compile Include="Model\ParameterRef_t.cs" />
<Compile Include="Model\ParameterTypeType.cs" />
<Compile Include="Model\ParameterType_t.cs" />
<Compile Include="Model\ParameterType_tTypeFloat.cs" />
<Compile Include="Model\ParameterType_tTypeNumber.cs" />
<Compile Include="Model\ParameterType_tTypeRestriction.cs" />
<Compile Include="Model\ParameterType_tTypeText.cs" />
<Compile Include="Model\Parameter_t.cs" />
<Compile Include="RelayCommand.cs" />
<Page Include="MainWindow.xaml">
<Generator>MSBuild:Compile</Generator>
Expand Down
20 changes: 20 additions & 0 deletions Extensions/Extensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CreateKnxProd.Extensions
{
//split up if it gets crowded here
static class Extensions
{
public static void ForEach<T>(this IEnumerable<T> enumeration, Action<T> action)
{
foreach (T item in enumeration)
{
action(item);
}
}
}
}
26 changes: 24 additions & 2 deletions MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -116,10 +116,32 @@
</DataGrid>
</TabItem>
<TabItem Header="Parameter">

<DataGrid ItemsSource="{Binding Parameters }" AutoGenerateColumns="False"
dd:DragDrop.IsDragSource="True" dd:DragDrop.IsDropTarget="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridComboBoxColumn Header="Typ" SelectedItemBinding="{Binding Type, UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="Name">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource" Value="{Binding Path=DataContext.ParameterTypes, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource" Value="{Binding Path=DataContext.ParameterTypes, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
<DataGridTextColumn Header="Text" Binding="{Binding Text}"/>
<DataGridTextColumn Header="Wert" Binding="{Binding Value}"/>
</DataGrid.Columns>
</DataGrid>
</TabItem>
<TabItem Header="Kommunikationsobject">

<DataGrid ItemsSource="{Binding ComObjects }" AutoGenerateColumns="True"
dd:DragDrop.IsDragSource="True" dd:DragDrop.IsDropTarget="True">
</DataGrid>
</TabItem>
</TabControl>
</Grid>
Expand Down
153 changes: 93 additions & 60 deletions MainWindowViewModel.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using CreateKnxProd.Model;
using CreateKnxProd.Extensions;
using CreateKnxProd.Model;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
Expand Down Expand Up @@ -42,7 +43,7 @@ public class MainWindowViewModel : INotifyPropertyChanged
private ApplicationProgram_t _applicationProgram;
private Hardware2Program_t _hardware2Program;
private ApplicationProgramRef_t _appProgRef;
private ApplicationProgramStatic_tCodeRelativeSegment _codeSement;
private ApplicationProgramStatic_tCodeRelativeSegment _codeSegment;

private ComObjectParameterBlock_t _parameterBlock;

Expand Down Expand Up @@ -88,8 +89,16 @@ private void Open(object param)
_hardware2Program = _hardware.Hardware2Programs.First();
_applicationProgram = _manufacturerData.ApplicationPrograms.First();
_appProgRef = _hardware2Program.ApplicationProgramRef.First();
_codeSement = _applicationProgram.Static.Code.RelativeSegment.First();

_codeSegment = _applicationProgram.Static.Code.RelativeSegment.First();

var parameterList = _applicationProgram.Static.Parameters.OfType<Parameter_t>();

foreach (var item in parameterList)
{
item.AllTypes = ParameterTypes;
item.Type = ParameterTypes.First(t => t.Id == item.ParameterType);
Parameters.Add(item);
}

RaiseChanged();
}
Expand Down Expand Up @@ -131,6 +140,7 @@ private void Save(object param)
SaveAs(param);

SetEmptyListsNull();
HandleParameters();
RegenerateDynamic();

CorrectIds();
Expand All @@ -151,6 +161,25 @@ private void Save(object param)
}
}

private void HandleParameters()
{
var appStatic = _applicationProgram.Static;
appStatic.Parameters.Clear();
appStatic.ParameterRefs.Clear();

uint offset = 0;

foreach (var item in Parameters)
{
appStatic.Parameters.Add(item);
item.Item = new Parameter_tMemory() { Offset = offset, BitOffset = 0 };
offset += item.Type.SizeInByte;

appStatic.ParameterRefs.Add(new ParameterRef_t() { Parameter = item });
}

}

private void SetEmptyListsNull()
{
var appStatic = _applicationProgram.Static;
Expand Down Expand Up @@ -226,13 +255,19 @@ private void RegenerateLoadProcedure()
private void RegenerateDynamic()
{
var appDynamic = _applicationProgram.Dynamic;
var appStatic = _applicationProgram.Static;
appDynamic.Clear();

var commonChannel = new ApplicationProgramDynamic_tChannelIndependentBlock();
_parameterBlock = new ComObjectParameterBlock_t();
_parameterBlock.Name = "ParameterPage";
_parameterBlock.Text = "Allgemeine Parameter";

foreach(var paramRef in appStatic.ParameterRefs)
{
_parameterBlock.Items.Add(new ParameterRefRef_t() { ParameterRef = paramRef });
}

commonChannel.Items.Add(_parameterBlock);
appDynamic.Add(commonChannel);
}
Expand Down Expand Up @@ -261,8 +296,9 @@ private void ClearData()
_applicationProgram = null;
_hardware2Program = null;
_appProgRef = null;
_codeSement = null;
_codeSegment = null;
_parameterBlock = null;
Parameters.Clear();
RaiseChanged();
}

Expand Down Expand Up @@ -339,19 +375,19 @@ private void CreateNew(object param)
var code = new ApplicationProgramStatic_tCode();
appStatic.Code = code;

_codeSement = new ApplicationProgramStatic_tCodeRelativeSegment();
code.RelativeSegment.Add(_codeSement);
_codeSement.Name = "Parameters";
_codeSement.Offset = 0;
_codeSement.LoadStateMachine = 4;
_codeSement.Size = 0;
_codeSegment = new ApplicationProgramStatic_tCodeRelativeSegment();
code.RelativeSegment.Add(_codeSegment);
_codeSegment.Name = "Parameters";
_codeSegment.Offset = 0;
_codeSegment.LoadStateMachine = 4;
_codeSegment.Size = 0;

appStatic.AddressTable = new ApplicationProgramStatic_tAddressTable();
appStatic.AddressTable.MaxEntries = 0;

appStatic.AssociationTable = new ApplicationProgramStatic_tAssociationTable();
appStatic.AssociationTable.MaxEntries = 0;

appStatic.ComObjectTable = new ApplicationProgramStatic_tComObjectTable();
appStatic.Options = new ApplicationProgramStatic_tOptions();

HardwareSerial = "0";
Expand All @@ -361,7 +397,7 @@ private void CreateNew(object param)
_hardware.IsIPEnabled = true;

_product.IsRailMounted = false;
_product.DefaultLanguage = "de_DE";
_product.DefaultLanguage = lang;
OrderNumber = "0";

_hardware2Program.MediumTypes.Add("MT-5");
Expand All @@ -376,53 +412,12 @@ private void CreateNew(object param)
_catalogItem.Hardware2ProgramRefId = _hardware2Program.Id;
_catalogItem.DefaultLanguage = lang;

RaisePropertyChanged(nameof(ParameterTypes));



var par = new ParameterType_t();
par.Name = "ParameterTypeText1";
var typeText = new ParameterType_tTypeText();
typeText.SizeInBit = 128;
par.Item = typeText;
_applicationProgram.Static.ParameterTypes.Add(par);

par = new ParameterType_t();
par.Name = "ParameterTypeNumber1";
var typeNumber = new ParameterType_tTypeNumber();
typeNumber.SizeInBit = 8;
typeNumber.Type = ParameterType_tTypeNumberType.unsignedInt;
typeNumber.minInclusive = 0;
typeNumber.maxInclusive = 100;
par.Item = typeNumber;
_applicationProgram.Static.ParameterTypes.Add(par);

par = new ParameterType_t();
par.Name = "ParameterTypeFloat1";
var typeFloat = new ParameterType_tTypeFloat();
typeFloat.Encoding = ParameterType_tTypeFloatEncoding.IEEE754Single;
typeFloat.minInclusive = 0;
typeFloat.maxInclusive = 100;
par.Item = typeFloat;
_applicationProgram.Static.ParameterTypes.Add(par);

par = new ParameterType_t();
par.Name = "ParameterTypeRestriction1";
var typeEnum = new ParameterType_tTypeRestriction();
typeEnum.SizeInBit = 8;
typeEnum.Base = ParameterType_tTypeRestrictionBase.Value;
typeEnum.Enumeration.Add(new ParameterType_tTypeRestrictionEnumeration() { Value = 0, Text = "Null" });
typeEnum.Enumeration.Add(new ParameterType_tTypeRestrictionEnumeration() { Value = 1, Text = "Eins" });
typeEnum.Enumeration.Add(new ParameterType_tTypeRestrictionEnumeration() { Value = 2, Text = "Zwei" });
par.Item = typeEnum;
_applicationProgram.Static.ParameterTypes.Add(par);

CorrectIds();
RaiseChanged();
}
catch (Exception ex)
{
_dialogService.ShowMessage(ex.ToString());
ClearData();
}
}

Expand All @@ -432,10 +427,9 @@ private void CorrectIds()
_applicationProgram.Id = string.Format("{0}_A-{1:0000}-{2:00}-0000", _manufacturerData.RefId,
_applicationProgram.ApplicationNumber, _applicationProgram.ApplicationVersion);
_appProgRef.RefId = _applicationProgram.Id;
_codeSement.Id = string.Format("{0}_RS-{1:00}-{2:00000}", _applicationProgram.Id, _codeSement.LoadStateMachine,
_codeSement.Offset);
_parameterBlock.Id = string.Format("{0}_PB-1", _applicationProgram.Id);

_codeSegment.Id = string.Format("{0}_RS-{1:00}-{2:00000}", _applicationProgram.Id, _codeSegment.LoadStateMachine,
_codeSegment.Offset);

_hardware.Id = string.Format("{0}_H-{1}-{2}", _manufacturerData.RefId, _hardware.SerialNumber,
_hardware.VersionNumber);
_product.Id = string.Format("{0}_P-{1}", _hardware.Id, _product.OrderNumber);
Expand All @@ -448,7 +442,9 @@ private void CorrectIds()
_catalogItem.ProductRefId = _product.Id;
_catalogItem.Hardware2ProgramRefId = _hardware2Program.Id;

foreach (var paraType in _applicationProgram.Static.ParameterTypes)
var appStatic = _applicationProgram.Static;

foreach (var paraType in appStatic.ParameterTypes)
{
paraType.Id = string.Format("{0}_PT-{1}", _applicationProgram.Id, paraType.Name);

Expand All @@ -459,6 +455,34 @@ private void CorrectIds()
foreach (var paraEnum in paraTypeRestriction.Enumeration)
paraEnum.Id = string.Format("{0}_EN-{1}", paraType.Id, paraEnum.Value);
}

var parameters = appStatic.Parameters;
for (int i = 0; i < parameters.Count(); i++)
{
var parameter = parameters[i] as Parameter_t;
if (parameter == null)
continue;

parameter.Id = string.Format("{0}_P-{1}", _applicationProgram.Id, i+1);
var memory = parameter.Item as Parameter_tMemory;
if(memory != null)
{
memory.CodeSegment = _codeSegment.Id;
}
}

var parameterRefs = appStatic.ParameterRefs;
for (int i = 0; i < parameterRefs.Count(); i++)
{
var parameterRef = parameterRefs[i];

parameterRef.Id = string.Format("{0}_R-{1}", parameterRef.Parameter.Id, i + 1);
parameterRef.RefId = parameterRef.Parameter.Id;
}

_parameterBlock.Id = string.Format("{0}_PB-1", _applicationProgram.Id);
foreach (var item in _parameterBlock.Items.OfType<ParameterRefRef_t>())
item.RefId = item.ParameterRef.Id;
}

private void Export(object param)
Expand Down Expand Up @@ -522,6 +546,8 @@ private void RaiseChanged()
RaisePropertyChanged(nameof(ApplicationNumber));
RaisePropertyChanged(nameof(ApplicationVersion));
RaisePropertyChanged(nameof(ParameterTypes));
RaisePropertyChanged(nameof(Parameters));
RaisePropertyChanged(nameof(ComObjects));
}

#region Properties
Expand Down Expand Up @@ -637,6 +663,13 @@ public ObservableCollection<ParameterType_t> ParameterTypes
get => _applicationProgram?.Static?.ParameterTypes;
}

public ObservableCollection<Parameter_t> Parameters { get; private set; } = new ObservableCollection<Parameter_t>();

public ObservableCollection<ComObject_t> ComObjects
{
get => _applicationProgram?.Static?.ComObjectTable?.ComObject;
}

#endregion

#region Reflection
Expand Down
16 changes: 16 additions & 0 deletions Model/ParameterRefRef_t.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;

namespace CreateKnxProd.Model
{
public partial class ParameterRefRef_t : INotifyPropertyChanged
{
[XmlIgnore]
public ParameterRef_t ParameterRef { get; set; }
}
}
5 changes: 4 additions & 1 deletion Model/CatalogSection_t.cs → Model/ParameterRef_t.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;

namespace CreateKnxProd.Model
{
public partial class CatalogSection_t : object, System.ComponentModel.INotifyPropertyChanged
public partial class ParameterRef_t : INotifyPropertyChanged
{
[XmlIgnore]
public Parameter_t Parameter { get; set; }
}
}
Loading

0 comments on commit 3635a94

Please sign in to comment.