-
Notifications
You must be signed in to change notification settings - Fork 0
/
modModes.bas
161 lines (134 loc) · 4.88 KB
/
modModes.bas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
Attribute VB_Name = "modModes"
Option Explicit
' m_colModes is a collection of udtMode classes
Public m_colModes As Collection
' this initializes the mode handler
Public Sub modesInitialize()
Dim objReg As clsRegistry
Dim arrKeys() As String, lngCount As Long, X As Long
Dim strName As String, strRule As String
Dim objMode As udtMode
Set m_colModes = New Collection
' load modes & rules from the registry
Set objReg = New clsRegistry
With objReg
.ClassKey = HKEY_CURRENT_USER
.SectionKey = m_strRegRoot & "\Modes"
If .EnumerateSections(arrKeys, lngCount) Then
For X = 1 To lngCount
.SectionKey = m_strRegRoot & "\Modes\" & arrKeys(X)
.ValueKey = "m_strName"
strName = CStr(.Value)
.ValueKey = "m_strRule"
strRule = CStr(.Value)
Set objMode = New udtMode
objMode.m_lngID = CLng(arrKeys(X))
objMode.m_strName = strName
objMode.m_strRule = strRule
m_colModes.Add objMode, CStr(arrKeys(X))
Set objMode = Nothing
Next
End If
End With
Set objReg = Nothing
End Sub
' this stores the modes collection to the registry
Public Sub modesStore()
Dim objReg As clsRegistry
Dim arrKeys() As String, lngCount As Long, X As Long
Set objReg = New clsRegistry
With objReg
.ClassKey = HKEY_CURRENT_USER
.SectionKey = m_strRegRoot & "\Modes"
' get all sections that exists in the registry
If .EnumerateSections(arrKeys, lngCount) Then
' remove sections from the registry that does not exists in our collection
For X = 1 To lngCount
If isInCollection(arrKeys(X), m_colModes) = False Then
.SectionKey = m_strRegRoot & "\Modes\" & arrKeys(X)
.DeleteKeyRec
End If
Next
End If
' update/add sections
For X = 1 To m_colModes.Count
With m_colModes.Item(X)
objReg.SectionKey = m_strRegRoot & "\Modes\" & .m_lngID
objReg.ValueKey = "m_strName"
objReg.Value = .m_strName
objReg.ValueKey = "m_strRule"
objReg.Value = .m_strRule
End With
Next
End With
Set objReg = Nothing
End Sub
' this adds/updates a new mode to the collection
Public Sub modeUpdate(strName As String, strRule As String, Optional lngID As Long = -1)
Dim objMode As udtMode
If lngID = -1 Then
Set objMode = New udtMode
With objMode
.m_lngID = modeGetNextID
.m_strName = strName
.m_strRule = strRule
.m_strRulesLastRun = ""
End With
m_colModes.Add objMode, CStr(objMode.m_lngID)
Set objMode = Nothing
Else
With m_colModes.Item(CStr(lngID))
If .m_strRule <> strRule Then
.m_strRulesLastRun = ""
End If
.m_strName = strName
.m_strRule = strRule
End With
End If
End Sub
' this saves mode time into the registry
Public Sub modeSaveTime(lngID As Long, dteDate As Date, lngTime As Long)
Dim objReg As clsRegistry
If lngTime < 0 Then Exit Sub
If frmMain.m_blnLoadState Then Exit Sub
Set objReg = New clsRegistry
With objReg
.ClassKey = HKEY_CURRENT_USER
.SectionKey = m_strRegRoot & "\Modes\" & lngID
.ValueKey = "Date " & CLng(dteDate)
.Value = lngTime
End With
Set objReg = Nothing
End Sub
' this get mode time from the registry
Public Function modeGetTime(lngID As Long, dteDate As Date) As Long
Dim objReg As clsRegistry
Set objReg = New clsRegistry
With objReg
.ClassKey = HKEY_CURRENT_USER
.SectionKey = m_strRegRoot & "\Modes\" & lngID
.ValueKey = "Date " & CLng(dteDate)
modeGetTime = .Value
End With
Set objReg = Nothing
End Function
' this removes a mode from the collection
Public Sub modeDelete(lngID As Long)
m_colModes.Remove CStr(lngID)
End Sub
' this retrieves the next available mode id, and updates the registry
Private Function modeGetNextID() As Long
Dim objReg As clsRegistry
Dim lngTemp As Long
Set objReg = New clsRegistry
With objReg
.ClassKey = HKEY_CURRENT_USER
.SectionKey = m_strRegRoot & "\Modes"
.ValueKey = "m_lngNextModeID"
lngTemp = .Value
modeGetNextID = lngTemp
lngTemp = lngTemp + 1
.Value = lngTemp
End With
Set objReg = Nothing
End Function