From c086f58ade7faf12749d450850ec66b6b7b87d77 Mon Sep 17 00:00:00 2001 From: pblivingston <71585805+pblivingston@users.noreply.github.com> Date: Tue, 25 Nov 2025 18:54:36 -0500 Subject: [PATCH] ArrayMember classes --- CHANGELOG.md | 1 + lib/Voicemeeter.psm1 | 1 + lib/arraymember.ps1 | 64 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+) create mode 100644 lib/arraymember.ps1 diff --git a/CHANGELOG.md b/CHANGELOG.md index 6cfe68d..d5b9cfb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ Before any major/minor/patch is released all test units will be run to verify th ### Added - IRemote base class +- ArrayMember classes for array-like properties ## [3.3.0] - 2024-06-29 diff --git a/lib/Voicemeeter.psm1 b/lib/Voicemeeter.psm1 index 7002acb..272ab53 100644 --- a/lib/Voicemeeter.psm1 +++ b/lib/Voicemeeter.psm1 @@ -3,6 +3,7 @@ . $PSScriptRoot\base.ps1 . $PSScriptRoot\kinds.ps1 . $PSScriptRoot\iremote.ps1 +. $PSScriptRoot\arraymember.ps1 . $PSScriptRoot\strip.ps1 . $PSScriptRoot\bus.ps1 . $PSScriptRoot\macrobuttons.ps1 diff --git a/lib/arraymember.ps1 b/lib/arraymember.ps1 new file mode 100644 index 0000000..0a81cb2 --- /dev/null +++ b/lib/arraymember.ps1 @@ -0,0 +1,64 @@ +class ArrayMember : IRemote { + [string]$prefix + [Object]$parent + + ArrayMember ( + [int]$index, [string]$prefix, [Object]$parent + ) : base ($index, $parent.remote) { + $this.prefix = $prefix + $this.parent = $parent + } + + [string] identifier () { + $parentId = $this.parent.identifier() + return "{0}.{1}[{2}]" -f $parentId, $this.prefix, $this.index + } + + [void] Set ($val) { + $this.Setter('', $val) + } +} + +class BoolArrayMember : ArrayMember { + BoolArrayMember ( + [int]$index, [string]$prefix, [Object]$parent + ) : base ($index, $prefix, $parent) {} + + [bool] Get () { + return [bool]$this.Getter('') + } +} + +class IntArrayMember : ArrayMember { + IntArrayMember ( + [int]$index, [string]$prefix, [Object]$parent + ) : base ($index, $prefix, $parent) {} + + [int] Get () { + return [int]$this.Getter('') + } +} + +class FloatArrayMember : ArrayMember { + [int]$decimals + + FloatArrayMember ( + [int]$index, [string]$prefix, [Object]$parent, [int]$decimals = 1 + ) : base ($index, $prefix, $parent) { + $this.decimals = $decimals + } + + [double] Get () { + return [math]::Round($this.Getter(''), $this.decimals) + } +} + +class StringArrayMember : ArrayMember { + StringArrayMember ( + [int]$index, [string]$prefix, [Object]$parent + ) : base ($index, $prefix, $parent) {} + + [string] Get () { + return [string]$this.Getter_String('') + } +} \ No newline at end of file