Imports Keyboard.My
Imports Microsoft.VisualBasic.CompilerServices
Imports System
Imports System.Collections
Imports System.Collections.Generic
Imports System.Runtime.InteropServices
Imports System.Xml
Namespace Keyboard
Public Class clsLayouts
Public Sub Init(ByVal Path As String)
Dim settings As New XmlReaderSettings With { _
.CheckCharacters = True, _
.CloseInput = True _
}
Using reader As XmlReader = XmlReader.Create(Path, settings)
Try
reader.ReadStartElement("KeyLayout")
Me.Name = reader.ReadElementString("Name")
reader.ReadStartElement("Shortcut")
Me.Shortcut.Alt = Conversions.ToBoolean(reader.ReadElementString("Alt"))
Me.Shortcut.Ctrl = Conversions.ToBoolean(reader.ReadElementString("Ctrl"))
Me.Shortcut.KeyCode = Conversions.ToInteger(reader.ReadElementString("KeyCode"))
reader.ReadEndElement()
reader.ReadStartElement("Keys")
Do
Dim list As New ArrayList
If ((reader.NodeType = XmlNodeType.Element) Or (reader.NodeType = XmlNodeType.Attribute)) Then
Dim key As Integer = Conversions.ToInteger(reader.GetAttribute("KeyCode"))
list.Add(reader.GetAttribute("Normal_Option"))
list.Add(reader.GetAttribute("Shift_Option"))
reader.Read()
list.Insert(, reader.ReadElementString("Normal"))
list.Insert(, reader.ReadElementString("Shift"))
Me.Key.Add(key, list)
End If
reader.Read()
Loop While (reader.Name <> "Keys")
reader.ReadEndElement()
reader.ReadStartElement("Juks")
Do
If (reader.NodeType = XmlNodeType.Element) Then
reader.Read()
Dim str As String = reader.ReadElementString("Seq")
Dim str As String = reader.ReadElementString("Out")
Me.Juk.Add(str, str)
End If
reader.Read()
Loop While (reader.Name <> "Juks")
Catch exception As Exception
ProjectData.SetProjectError(exception)
Dim exception As Exception = exception
ProjectData.ClearProjectError()
Finally
reader.Close()
End Try
End Using
End Sub
Public Sub Update()
Me.Key.Clear
Me.Juk.Clear
Dim settings As New XmlReaderSettings With { _
.CheckCharacters = True, _
.CloseInput = True _
}
Using reader As XmlReader = XmlReader.Create(Me.Path, settings)
Try
reader.ReadStartElement("KeyLayout")
Me.Name = reader.ReadElementString("Name")
reader.ReadStartElement("Shortcut")
Me.Shortcut.Alt = Conversions.ToBoolean(reader.ReadElementString("Alt"))
Me.Shortcut.Ctrl = Conversions.ToBoolean(reader.ReadElementString("Ctrl"))
Me.Shortcut.Shift = Conversions.ToBoolean(reader.ReadElementString("Shift"))
Me.Shortcut.KeyCode = Conversions.ToInteger(reader.ReadElementString("KeyCode"))
reader.ReadEndElement()
reader.ReadStartElement("Keys")
Do
Dim list As New ArrayList
If ((reader.NodeType = XmlNodeType.Element) Or (reader.NodeType = XmlNodeType.Attribute)) Then
Dim key As Integer = Conversions.ToInteger(reader.GetAttribute("KeyCode"))
list.Add(reader.GetAttribute("Normal_Option"))
list.Add(reader.GetAttribute("Shift_Option"))
reader.Read()
list.Insert(, reader.ReadElementString("Normal"))
list.Insert(, reader.ReadElementString("Shift"))
Me.Key.Add(key, list)
End If
reader.Read()
Loop While (reader.Name <> "Keys")
reader.ReadEndElement()
reader.ReadStartElement("Juks")
Do
If (reader.NodeType = XmlNodeType.Element) Then
reader.Read()
Dim str As String = reader.ReadElementString("Seq")
Dim str As String = reader.ReadElementString("Out")
Me.Juk.Add(str, str)
End If
reader.Read()
Loop While (reader.Name <> "Juks")
Catch exception As Exception
ProjectData.SetProjectError(exception)
Dim exception As Exception = exception
ProjectData.ClearProjectError()
Finally
reader.Close()
End Try
End Using
End Sub
Public IconName As String
Public ID As Integer
Public Juk As Dictionary(Of String, String) = New Dictionary(Of String, String)
Public Key As Dictionary(Of Integer, ArrayList) = New Dictionary(Of Integer, ArrayList)
Public Name As String
Public Path As String
Public Shortcut As LayoutShortcut
<StructLayout(LayoutKind.Sequential)> _
Public Structure LayoutShortcut
Public Alt As Boolean
Public Ctrl As Boolean
Public Shift As Boolean
Public KeyCode As Integer
End Structure
End Class
End Namespace
In My layout i have two Part
One Is :
<Keys>
.......
.....
</Keys>
and
<Juks>
......
.....
</Juks>
More clear :
In XML File Is look like this :
<Keys>
<Key KeyCode="32">
<Normal> </Normal>
<Shift> </Shift>
<Key KeyCode="222">
<Normal>1</Normal>
<Shift>2</Shift>
<Key KeyCode="220">
<Normal>3</Normal>
<Shift>4</Shift>
</Keys>
<Juks>
<Juk>
<Seq>3</Seq>
<Out>25</Out>
</Juk>
<Juk>
<Seq>0</Seq>
<Out>1</Out>
</Juk>
</Juks>
etc etc....
these two part load from a selected *.XML file.
But i want something that load <Juks></Juks> section load from another file.Not My Selected XML file.
It will load from a common XML File. Such As : Juks.XML
Is this possible ?