-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfoxrefresource.prg
145 lines (116 loc) · 2.91 KB
/
foxrefresource.prg
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
* Abstract:
* Class for add/retrieving values
* from FoxUser resource file.
*
#include "foxref.h"
CLEAR
x = NEWOBJECT("CFoxResource", "FoxRefResource.prg")
*!* x.Add("Width", 100)
*!* x.Add("Height", 200)
*!* x.Add("Name", "Ryan")
x.Load("TEST")
? x.get("Height")
? x.get("Name")
* ? x.save("TEST")
RETURN
DEFINE CLASS CFoxResource AS Session
PROTECTED oCollection
oCollection = .NULL.
ResourceType = "PREFW"
ResourceFile = ''
PROCEDURE Init()
SET TALK OFF
SET DELETED ON
THIS.oCollection = NEWOBJECT("CCollection", "FoxRefCollection.prg")
THIS.ResourceFile = SYS(2005)
ENDPROC
* Clear out all options
FUNCTION Clear()
THIS.oCollection.Remove(-1)
ENDFUNC
FUNCTION Add(cOption, xValue)
RETURN THIS.oCollection.Add(m.xValue, UPPER(m.cOption))
ENDFUNC
FUNCTION Get(cOption)
RETURN THIS.oCollection.Item(UPPER(m.cOption))
ENDFUNC
FUNCTION OpenResource()
IF USED("ResourceAlias")
USE IN ResourceAlias
ENDIF
IF FILE(THIS.ResourceFile)
TRY
USE (THIS.ResourceFile) ALIAS FoxResource IN 0 SHARED AGAIN
CATCH
ENDTRY
ENDIF
RETURN USED("FoxResource")
ENDFUNC
PROCEDURE Save(cID, cName)
LOCAL nSelect
LOCAL cType
LOCAL i
LOCAL ARRAY aOptions[1]
IF VARTYPE(m.cName) <> 'C'
m.cName = ''
ENDIF
IF THIS.OpenResource()
m.nSelect = SELECT()
m.cType = PADR(THIS.ResourceType, LEN(FoxResource.Type))
m.cID = PADR(m.cID, LEN(FoxResource.ID))
SELECT FoxResource
LOCATE FOR Type == m.cType AND ID == m.cID AND Name == m.cName
IF !FOUND()
APPEND BLANK IN FoxResource
REPLACE ;
Type WITH m.cType, ;
ID WITH m.cID, ;
ReadOnly WITH .F. ;
IN FoxResource
ENDIF
IF !FoxResource.ReadOnly
IF THIS.oCollection.Count > 0
DIMENSION aOptions[THIS.oCollection.Count, 2]
FOR m.i = 1 TO THIS.oCollection.Count
aOptions[m.i, 1] = THIS.oCollection.GetKey(m.i)
aOptions[m.i, 2] = THIS.oCollection.Item(m.i)
ENDFOR
SAVE TO MEMO Data ALL LIKE aOptions
ELSE
BLANK FIELDS Data IN FoxResource
ENDIF
REPLACE ;
Updated WITH DATE(), ;
ckval WITH VAL(SYS(2007, FoxResource.Data)) ;
IN FoxResource
ENDIF
SELECT (m.nSelect)
ENDIF
ENDPROC
PROCEDURE Load(cID, cName)
LOCAL nSelect
LOCAL cType
LOCAL ARRAY aOptions[1]
IF VARTYPE(m.cName) <> 'C'
m.cName = ''
ENDIF
THIS.Clear()
IF THIS.OpenResource()
m.nSelect = SELECT()
m.cType = PADR(THIS.ResourceType, LEN(FoxResource.Type))
m.cID = PADR(m.cID, LEN(FoxResource.ID))
SELECT FoxResource
LOCATE FOR Type == m.cType AND ID == m.cID AND Name == m.cName
IF FOUND() AND !EMPTY(Data) AND ckval == VAL(SYS(2007, Data))
RESTORE FROM MEMO Data ADDITIVE
IF VARTYPE(aOptions[1,1]) == 'C'
m.nCnt = ALEN(aOptions, 1)
FOR m.i = 1 TO m.nCnt
THIS.Add(aOptions[m.i, 1], aOptions[m.i, 2])
ENDFOR
ENDIF
ENDIF
SELECT (m.nSelect)
ENDIF
ENDPROC
ENDDEFINE