-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathCAPI_ActiveClass.pas
155 lines (141 loc) · 5.05 KB
/
CAPI_ActiveClass.pas
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
unit CAPI_ActiveClass;
interface
uses
CAPI_Utils,
CAPI_Types;
procedure ActiveClass_Get_AllNames(var ResultPtr: PPAnsiChar; ResultCount: PAPISize); CDECL;
procedure ActiveClass_Get_AllNames_GR(); CDECL;
function ActiveClass_Get_First(): Integer; CDECL;
function ActiveClass_Get_Next(): Integer; CDECL;
function ActiveClass_Get_Name(): PAnsiChar; CDECL;
procedure ActiveClass_Set_Name(const Value: PAnsiChar); CDECL;
function ActiveClass_Get_NumElements(): Integer; CDECL;
function ActiveClass_Get_ActiveClassName(): PAnsiChar; CDECL;
function ActiveClass_Get_Count(): Integer; CDECL;
function ActiveClass_Get_ActiveClassParent(): PAnsiChar; CDECL;
implementation
uses
CAPI_Constants,
DSSGlobals,
DSSObject,
CktElement,
PCClass,
PDClass,
DSSClass,
DSSHelper,
MeterClass,
ControlClass;
procedure ActiveClass_Get_AllNames(var ResultPtr: PPAnsiChar; ResultCount: PAPISize); CDECL;
var
Result: PPAnsiCharArray0;
idx: Integer;
k: Integer;
begin
if (InvalidCircuit(DSSPrime)) or (DSSPrime.ActiveDSSClass = NIL) then
begin
DefaultResult(ResultPtr, ResultCount, '');
Exit;
end;
with DSSPrime.ActiveCircuit do
begin
Result := DSS_RecreateArray_PPAnsiChar(ResultPtr, ResultCount, DSSPrime.ActiveDSSClass.ElementCount);
k := 0;
idx := DSSPrime.ActiveDSSClass.First;
while idx > 0 do
begin
Result[k] := DSS_CopyStringAsPChar(DSSPrime.ActiveDSSObject.Name);
Inc(k);
idx := DSSPrime.ActiveDSSClass.Next;
end;
end;
end;
procedure ActiveClass_Get_AllNames_GR(); CDECL;
// Same as ActiveClass_Get_AllNames but uses global result (GR) pointers
begin
ActiveClass_Get_AllNames(DSSPrime.GR_DataPtr_PPAnsiChar, @DSSPrime.GR_Counts_PPAnsiChar[0])
end;
//------------------------------------------------------------------------------
function ActiveClass_Get_First(): Integer; CDECL;
begin
Result := 0;
if (InvalidCircuit(DSSPrime)) or (DSSPrime.ActiveDSSClass = NIL) then
Exit;
Result := DSSPrime.ActiveDSSClass.First; // sets active objects
end;
//------------------------------------------------------------------------------
function ActiveClass_Get_Next(): Integer; CDECL;
begin
Result := 0;
if (InvalidCircuit(DSSPrime)) or (DSSPrime.ActiveDSSClass = NIL) then
Exit;
Result := DSSPrime.ActiveDSSClass.Next; // sets active objects
end;
//------------------------------------------------------------------------------
function ActiveClass_Get_Name(): PAnsiChar; CDECL;
begin
Result := NIL;
if DSSPrime.ActiveDSSObject = NIL then
Exit;
Result := DSS_GetAsPAnsiChar(DSSPrime, DSSPrime.ActiveDSSObject.Name)
end;
//------------------------------------------------------------------------------
procedure ActiveClass_Set_Name(const Value: PAnsiChar); CDECL;
// set object active by name
var
pelem: TDSSObject;
begin
if DSSPrime.ActiveDSSClass = NIL then
Exit;
pelem := DSSPrime.ActiveDSSClass.Find(Value);
if pelem = NIL then
Exit;
if pelem is TDSSCktElement then
DSSPrime.ActiveCircuit.ActiveCktElement := TDSSCktElement(pelem) // sets DSSPrime.ActiveDSSObject
else
DSSPrime.ActiveDSSObject := pelem;
end;
//------------------------------------------------------------------------------
function ActiveClass_Get_NumElements(): Integer; CDECL;
begin
Result := 0;
if DSSPrime.ActiveDSSClass = NIL then
Exit;
Result := DSSPrime.ActiveDSSCLass.ElementCount
end;
//------------------------------------------------------------------------------
function ActiveClass_Get_ActiveClassName(): PAnsiChar; CDECL;
begin
Result := NIL;
if DSSPrime.ActiveDSSClass = NIL then
Exit;
Result := DSS_GetAsPAnsiChar(DSSPrime, DSSPrime.ActiveDSSCLass.Name)
end;
//------------------------------------------------------------------------------
function ActiveClass_Get_Count(): Integer; CDECL;
begin
Result := 0;
if DSSPrime.ActiveDSSClass = NIL then
Exit;
Result := DSSPrime.ActiveDSSCLass.ElementCount
end;
//------------------------------------------------------------------------------
function ActiveClass_Get_ActiveClassParent(): PAnsiChar; CDECL;
begin
if DSSPrime.ActiveDSSClass = NIL then
begin
Result := DSS_GetAsPAnsiChar(DSSPrime, 'Parent Class unknown');
Exit;
end;
if DSSPrime.ActiveDSSClass.ClassType.InheritsFrom(TMeterClass) then
Result := DSS_GetAsPAnsiChar(DSSPrime, 'TMeterClass')
else if DSSPrime.ActiveDSSClass.ClassType.InheritsFrom(TControlClass) then
Result := DSS_GetAsPAnsiChar(DSSPrime, 'TControlClass')
else if DSSPrime.ActiveDSSClass.ClassType.InheritsFrom(TPDClass) then
Result := DSS_GetAsPAnsiChar(DSSPrime, 'TPDClass')
else if DSSPrime.ActiveDSSClass.ClassType.InheritsFrom(TPCClass) then
Result := DSS_GetAsPAnsiChar(DSSPrime, 'TPCClass')
else
Result := DSS_GetAsPAnsiChar(DSSPrime, 'Generic Object');
end;
//------------------------------------------------------------------------------
end.