The PropertyStack object

'A class similar to the propertybag object that handles serializing, XLM, etc.
'well, technically, everything's stored as an array of variants.

'This class lets you store and recall properties in a flexible, simple, and standard format.
'It can save and load those properties easily in binary, text, or XML format, or of course just in memory.
'Each property has its own tag, to make it easy to identify.
'Properties can be of different datatypes in the same vbpropertystack instance.

'This class can also save all the values from controls on a VB form, all with one function call.
'this will likely become the standard way we save settings for filters and other features from now on in Howler.

'The VBPropertyStack class will work with any data type that can fit in a variant, excluding UDTs and probably fixed length strings.
'some of the more essoteric datatypes, such as currency and date, may not save or load in string or xml format properly.
'loading or saving currentlly only supports the use of single dimensions for properties that are stored as arrays.
'saving in string format, and "ContentString" do not currently support arrays.
'the "name" or tag strings are case sensitive.

'This class includes A simple XML writer that supports these datatypes: byte,integer,long,single,double, and arrays, byte(),integer(),long(),single(),double()
'arrays of variants or multidimentional arrays are not supported in the xml saver.

'if you want to save in XML format, you'll have to set the "IncludeDatatype"  flag to true, (default) so the class knows how to reconstruct the properties.

'tag names should not start or end with spaces.

Function
GetCount() As Long

Sub
SetProperty(ByVal Name As String, ByVal Value As Variant)

'this is case sensitive.
Function
GetProperty(ByVal Name As String) As Variant

Sub
SetPropertyByIndex(Value As Variant, ByVal index As Long)

Function
GetPropertyByIndex(ByVal index As Long) As Variant

'get all the content.
Function
ContentBinary() As Variant

'get all the content in string format.
Function
ContentString(Optional ByVal Delimiter As String = "") As String

'returns a string version of our serializer in XML format.
Function ContentXML(Optional ByVal HeadingTag As String = "", Optional ByVal IncludeDatatype As Boolean = True, Optional ByVal XMLHeader As Boolean = False) As String

'this is a simple XML document saver.
'supports properties of almost all data types, including arrays of byte,long,int,single,double (but not multidimensional array.)

Sub
SaveXML(ByVal FileName As String, Optional ByVal ParentNodeTag As String = "", Optional ByVal IncludeDatatype As Boolean = True, Optional ByVal XMLHeader As Boolean = False)

'This is not a super flexible parser. It will probably only read XML files create by this class.
Sub LoadXML(ByVal FileName As String, Optional ParentNodeTag As String = "")

Sub
LoadXMLFromString(ByVal s As String, Optional ParentNodeTag As String = "")

'This should work with arrays and everything.
Sub SaveBinary(ByVal FileName As String)

Sub
LoadBinary(ByVal FileName As String)

'saving and loading as a string won't support arrays as properties currently.

Function
SaveString(ByVal FileName As String, Optional ByVal Delimiter As String = "") As String

Sub
LoadString(ByVal FileName As String, Optional ByVal Delimiter As String = "")