-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclassPrefs.xojo_code
293 lines (233 loc) · 6.79 KB
/
classPrefs.xojo_code
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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
#tag Class
Protected Class classPrefs
#tag Method, Flags = &h0
Sub Constructor(bundleID as String)
Var prefFile As FolderItem
prefDB = New SQLiteDatabase
prefFile = SpecialFolder.ApplicationData.Child(bundleID)
If Not prefFile.Exists Then
prefFile.CreateFolder
End If
prefFile = SpecialFolder.ApplicationData.Child(bundleID).Child(bundleID + ".prefs")
If Not prefFile.Exists Then
Try
prefDB.DatabaseFile = prefFile
prefDB.CreateDatabase
Catch Error As IOException
MessageBox("Prefs-File could not be created: " + Error.Message)
End Try
Try
prefDB.Connect
prefDB.BeginTransaction
prefDB.ExecuteSQL("CREATE TABLE tblPrefs (ID INTEGER PRIMARY KEY AUTOINCREMENT, key TEXT, value TEXT);")
prefDB.CommitTransaction
Catch Error As DatabaseException
MessageBox("Database Error: " + Error.Message)
prefDB.RollbackTransaction
End Try
Else
Try
prefDB.DatabaseFile = prefFile
prefDB.Connect
Catch Error As DatabaseException
MessageBox("Database cannot be connected: " + Error.Message)
End Try
End If
End Sub
#tag EndMethod
#tag Method, Flags = &h0
Sub deleteValue(key as String)
Var rs As RowSet
Try
prefDB.Connect
rs = prefDB.SelectSQL("SELECT * FROM tblPrefs WHERE key=?;", key.Uppercase)
If rs.RowCount = 0 Then
Raise New KeyNotFoundException
Else
prefDB.ExecuteSQL("DELETE FROM tblPrefs WHERE key=?;", key.Uppercase)
End If
Catch Error As DatabaseException
MessageBox Error.Message
End Try
End Sub
#tag EndMethod
#tag Method, Flags = &h0
Function getBooleanValue(key as String, Optional default as Boolean) As Boolean
Return GetValue(key, default) = "TRUE"
End Function
#tag EndMethod
#tag Method, Flags = &h0
Function getColorValue(key as variant, Optional default as Color) As color
Var v As Variant = GetValue(key, default)
Return v.ColorValue
End Function
#tag EndMethod
#tag Method, Flags = &h0
Function getDoubleValue(key as string, Optional default as Double) As Double
Return GetValue(key, Default).ToDouble
End Function
#tag EndMethod
#tag Method, Flags = &h0
Function getIntegerValue(key as string, Optional default as Integer) As Integer
Return GetValue(key, default).ToInteger
End Function
#tag EndMethod
#tag Method, Flags = &h0
Function getPictureValue(key as String, Optional default as picture) As Picture
Var tmpDef As Variant
If default <> Nil Then
tmpDef = EncodeBase64(default.ToData(Picture.Formats.PNG))
End If
Return Picture.FromData(DecodeBase64(getValue(key, tmpDef)))
End Function
#tag EndMethod
#tag Method, Flags = &h0
Function getSingleValue(key as string, Optional default as Single) As Single
Return GetValue(key, default).ToDouble
End Function
#tag EndMethod
#tag Method, Flags = &h0
Function getStringValue(key as string, Optional default as String) As String
Return GetValue(key, default)
End Function
#tag EndMethod
#tag Method, Flags = &h21
Private Function getValue(key as String, Optional default as Variant) As String
Var rs As RowSet
Try
prefDB.Connect
rs = prefDB.SelectSQL("SELECT * FROM tblPrefs WHERE key=?;", key.Uppercase)
If rs.RowCount = 0 Then
If default <> Nil Then
Return default
Else
Raise New KeyNotFoundException
End If
Else
Return rs.Column("value").StringValue
End If
Catch Error As DatabaseException
MessageBox Error.Message
End Try
End Function
#tag EndMethod
#tag Method, Flags = &h0
Function hasKey(key as String) As Boolean
Var rs As RowSet
Try
prefDB.Connect
rs = prefDB.SelectSQL("SELECT * FROM tblPrefs WHERE key=?;", key.Uppercase)
If rs.RowCount = 0 Then
Return False
Else
Return True
End If
Catch Error As DatabaseException
MessageBox Error.Message
End Try
End Function
#tag EndMethod
#tag Method, Flags = &h0
Sub setBooleanValue(key as String, value as Boolean)
SetValue(key, value.ToString)
End Sub
#tag EndMethod
#tag Method, Flags = &h0
Sub setColorValue(key as String, value as Color)
SetValue(key, value)
End Sub
#tag EndMethod
#tag Method, Flags = &h0
Sub setDoubleValue(key as String, value as Double)
SetValue(key, value)
End Sub
#tag EndMethod
#tag Method, Flags = &h0
Sub setIntegerValue(key as String, value as Integer)
SetValue(key, value.ToString)
End Sub
#tag EndMethod
#tag Method, Flags = &h0
Sub setPictureValue(key as string,value as Picture)
SetValue(key, EncodeBase64(value.GetData(Picture.FormatPNG)))
End Sub
#tag EndMethod
#tag Method, Flags = &h0
Sub setSingleValue(key as String, value as single)
SetValue(key, value)
End Sub
#tag EndMethod
#tag Method, Flags = &h0
Sub setStringValue(key as String, value as String)
SetValue(key, value)
End Sub
#tag EndMethod
#tag Method, Flags = &h21
Private Sub setValue(key as string, value as variant)
Var rs As RowSet
Try
prefDB.Connect
rs = prefDB.SelectSQL("SELECT * FROM tblPrefs WHERE key=?;", key.Uppercase)
// key dosn't exist
If rs.RowCount = 0 Then
prefDB.ExecuteSQL("INSERT INTO tblPrefs (key, value) VALUES (?,?);", key.Uppercase, value.StringValue)
Else
// key exists, therefore just update
prefDB.ExecuteSQL("UPDATE tblPrefs SET value=? WHERE key=?;", value.StringValue, key.Uppercase)
End If
RaiseEvent PreferencesChanged
Catch Error As DatabaseException
MessageBox Error.Message
End Try
End Sub
#tag EndMethod
#tag Hook, Flags = &h0
Event PreferencesChanged()
#tag EndHook
#tag Property, Flags = &h21
Private prefDB As SQLiteDatabase
#tag EndProperty
#tag ViewBehavior
#tag ViewProperty
Name="Index"
Visible=true
Group="ID"
InitialValue="-2147483648"
Type="Integer"
EditorType=""
#tag EndViewProperty
#tag ViewProperty
Name="Left"
Visible=true
Group="Position"
InitialValue="0"
Type="Integer"
EditorType=""
#tag EndViewProperty
#tag ViewProperty
Name="Name"
Visible=true
Group="ID"
InitialValue=""
Type="String"
EditorType=""
#tag EndViewProperty
#tag ViewProperty
Name="Super"
Visible=true
Group="ID"
InitialValue=""
Type="String"
EditorType=""
#tag EndViewProperty
#tag ViewProperty
Name="Top"
Visible=true
Group="Position"
InitialValue="0"
Type="Integer"
EditorType=""
#tag EndViewProperty
#tag EndViewBehavior
End Class
#tag EndClass