Skip to content

Commit 38e9c64

Browse files
Merge pull request #178 from HealthIntersections/gg-202112-valueset-display
Gg 202112 valueset display
2 parents 0cb782b + fee6979 commit 38e9c64

11 files changed

+664
-368
lines changed

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,5 @@ exec/Resources
7373
/dependencies/Indy10-mod-static
7474
/dependencies/indy-master
7575
/release-notes.md
76-
/install/build
76+
/install/build
77+
/release-notes-old.md

build/linux-toolchain.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ echo "Get fpclazup"
1414

1515
mkdir tools
1616

17-
wget -q https://github.com/LongDirtyAnimAlf/Reiniero-fpcup/releases/download/v2.2.0b/fpclazup-x86_64-linux -O tools/fpclazup
17+
wget -q https://github.com/LongDirtyAnimAlf/Reiniero-fpcup/releases/download/v2.2.0g/fpclazup-x86_64-linux -O tools/fpclazup
1818

1919
chmod +x tools/fpclazup
2020

library/ftx/fhir_valuesets.pas

+17-12
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ TValueSetWorker = class (TFslObject)
169169
function sizeInBytesV(magic : integer) : cardinal; override;
170170
procedure listDisplays(displays : TCodeDisplays; cs : TCodeSystemProvider; c: TCodeSystemProviderContext); overload;
171171
procedure listDisplays(displays : TCodeDisplays; c: TFhirCodeSystemConceptW); overload;
172-
procedure listDisplays(displays: TCodeDisplays; c: TFhirValueSetComposeIncludeConceptW); overload;
172+
procedure listDisplays(displays: TCodeDisplays; c: TFhirValueSetComposeIncludeConceptW; vs : TFHIRValueSetW); overload;
173173
public
174174
constructor Create(factory : TFHIRFactory; getVS: TGetValueSetEvent; getCS : TGetProviderEvent; getVersions : TGetSystemVersionsEvent; txResources : TFslMetadataResourceList; languages : TIETFLanguageDefinitions); overload;
175175
destructor Destroy; override;
@@ -185,7 +185,7 @@ TValueSetChecker = class (TValueSetWorker)
185185
function determineSystem(code : String) : String;
186186
function check(system, version, code : String; abstractOk, implySystem : boolean; displays : TCodeDisplays; var message, ver : String; var cause : TFhirIssueType; op : TFhirOperationOutcomeW; var contentMode : TFhirCodeSystemContentMode) : boolean; overload;
187187
function findCode(cs : TFhirCodeSystemW; code: String; list : TFhirCodeSystemConceptListW; displays : TCodeDisplays; out isabstract : boolean): boolean;
188-
function checkConceptSet(cs: TCodeSystemProvider; cset : TFhirValueSetComposeIncludeW; code : String; abstractOk : boolean; displays : TCodeDisplays; var message : String) : boolean;
188+
function checkConceptSet(cs: TCodeSystemProvider; cset : TFhirValueSetComposeIncludeW; code : String; abstractOk : boolean; displays : TCodeDisplays; vs : TFHIRValueSetW; var message : String) : boolean;
189189
procedure prepareConceptSet(desc: string; cc: TFhirValueSetComposeIncludeW);
190190
function getName: String;
191191
protected
@@ -220,7 +220,7 @@ TFHIRValueSetExpander = class (TValueSetWorker)
220220
procedure handleDefine(cs : TFhirCodeSystemW; list : TFslList<TFhirValueSetExpansionContainsW>; map : TFslMap<TFhirValueSetExpansionContainsW>; limitCount : integer; source : TFhirValueSetCodeSystemW; defines : TFhirCodeSystemConceptListW; filter : TSearchFilterText; expansion : TFhirValueSetExpansionW; imports : TFslList<TFHIRImportedValueSet>);
221221
procedure importValueSet(list : TFslList<TFhirValueSetExpansionContainsW>; map : TFslMap<TFhirValueSetExpansionContainsW>; vs : TFHIRValueSetW; expansion : TFhirValueSetExpansionW; imports : TFslList<TFHIRImportedValueSet>; offset : integer);
222222
procedure excludeValueSet(list: TFslList<TFhirValueSetExpansionContainsW>; map: TFslMap<TFhirValueSetExpansionContainsW>; vs : TFHIRValueSetW; expansion : TFhirValueSetExpansionW; imports : TFslList<TFHIRImportedValueSet>; offset : integer);
223-
procedure processCodes(doDelete : boolean; list : TFslList<TFhirValueSetExpansionContainsW>; map : TFslMap<TFhirValueSetExpansionContainsW>; limitCount : integer; cset : TFhirValueSetComposeIncludeW; filter : TSearchFilterText; dependencies : TStringList; expansion : TFhirValueSetExpansionW; var notClosed : boolean);
223+
procedure processCodes(doDelete : boolean; list : TFslList<TFhirValueSetExpansionContainsW>; map : TFslMap<TFhirValueSetExpansionContainsW>; limitCount : integer; cset : TFhirValueSetComposeIncludeW; vsSrc : TFHIRValueSetW; filter : TSearchFilterText; dependencies : TStringList; expansion : TFhirValueSetExpansionW; var notClosed : boolean);
224224
procedure handleCompose(list : TFslList<TFhirValueSetExpansionContainsW>; map : TFslMap<TFhirValueSetExpansionContainsW>; limitCount : integer; source : TFhirValueSetW; filter : TSearchFilterText; dependencies : TStringList; expansion : TFhirValueSetExpansionW; var notClosed : boolean);
225225

226226
function passesImports(imports : TFslList<TFHIRImportedValueSet>; system, code : String; offset : integer) : boolean;
@@ -769,7 +769,7 @@ function TValueSetChecker.check(system, version, code : String; abstractOk, impl
769769
raise ETerminologyError.create('Value Set Validation depends on supplement '+s+' on '+cs.systemUri(nil)+' that is not known');
770770
end;
771771

772-
result := ((system = SYSTEM_NOT_APPLICABLE) or (cs.systemUri(nil) = system)) and checkConceptSet(cs, cc, code, abstractOk, displays, message);
772+
result := ((system = SYSTEM_NOT_APPLICABLE) or (cs.systemUri(nil) = system)) and checkConceptSet(cs, cc, code, abstractOk, displays, FValueSet, message);
773773
end
774774
else
775775
result := false;
@@ -799,7 +799,7 @@ function TValueSetChecker.check(system, version, code : String; abstractOk, impl
799799
if not cs.hasSupplement(s) then
800800
raise ETerminologyError.create('Value Set Validation depends on supplement '+s+' on '+cs.systemUri(nil)+' that is not known');
801801
end;
802-
excluded := ((system = SYSTEM_NOT_APPLICABLE) or (cs.systemUri(nil) = system)) and checkConceptSet(cs, cc, code, abstractOk, displays, message);
802+
excluded := ((system = SYSTEM_NOT_APPLICABLE) or (cs.systemUri(nil) = system)) and checkConceptSet(cs, cc, code, abstractOk, displays, FValueSet, message);
803803
end;
804804
for s in cc.valueSets do
805805
begin
@@ -1082,7 +1082,7 @@ function TValueSetChecker.check(system, version, code: String; implySystem : boo
10821082
cs.Close(ctxt);
10831083
end;
10841084

1085-
function TValueSetChecker.checkConceptSet(cs: TCodeSystemProvider; cset : TFhirValueSetComposeIncludeW; code: String; abstractOk : boolean; displays : TCodeDisplays; var message : String): boolean;
1085+
function TValueSetChecker.checkConceptSet(cs: TCodeSystemProvider; cset : TFhirValueSetComposeIncludeW; code: String; abstractOk : boolean; displays : TCodeDisplays; vs : TFHIRValueSetW; var message : String): boolean;
10861086
var
10871087
i : integer;
10881088
fc : TFhirValueSetComposeIncludeFilterW;
@@ -1117,7 +1117,7 @@ function TValueSetChecker.checkConceptSet(cs: TCodeSystemProvider; cset : TFhirV
11171117
if Loc <> nil then
11181118
begin
11191119
listDisplays(displays, cs, loc);
1120-
listDisplays(displays, cc);
1120+
listDisplays(displays, cc, vs);
11211121
result := (abstractOk or not cs.IsAbstract(loc));
11221122
cs.close(loc);
11231123
exit;
@@ -1463,9 +1463,9 @@ procedure TFHIRValueSetExpander.handleCompose(list: TFslList<TFhirValueSetExpans
14631463
checkSource(c, expansion, limitCount, filter);
14641464

14651465
for c in source.includes.forEnum do
1466-
processCodes(false, list, map, limitCount, c, filter, dependencies, expansion, notClosed);
1466+
processCodes(false, list, map, limitCount, c, source, filter, dependencies, expansion, notClosed);
14671467
for c in source.excludes.forEnum do
1468-
processCodes(true, list, map, limitCount, c, filter, dependencies, expansion, notClosed);
1468+
processCodes(true, list, map, limitCount, c, source, filter, dependencies, expansion, notClosed);
14691469
end;
14701470

14711471
procedure TFHIRValueSetExpander.handleDefine(cs : TFhirCodeSystemW; list : TFslList<TFhirValueSetExpansionContainsW>; map : TFslMap<TFhirValueSetExpansionContainsW>; limitCount : integer; source : TFhirValueSetCodeSystemW; defines : TFhirCodeSystemConceptListW; filter : TSearchFilterText; expansion : TFhirValueSetExpansionW; imports : TFslList<TFHIRImportedValueSet>);
@@ -1506,11 +1506,16 @@ procedure TValueSetWorker.listDisplays(displays : TCodeDisplays; c: TFhirCodeSys
15061506
displays.see(ccd.language, ccd.value);
15071507
end;
15081508

1509-
procedure TValueSetWorker.listDisplays(displays : TCodeDisplays; c: TFhirValueSetComposeIncludeConceptW);
1509+
procedure TValueSetWorker.listDisplays(displays : TCodeDisplays; c: TFhirValueSetComposeIncludeConceptW; vs : TFHIRValueSetW);
15101510
var
15111511
cd : TFhirValueSetComposeIncludeConceptDesignationW;
15121512
first : boolean;
15131513
begin
1514+
if c.display <> '' then
1515+
begin
1516+
displays.Clear;
1517+
displays.see(vs.language, c.display, true);
1518+
end;
15141519
first := true;
15151520
for cd in c.designations.forEnum do
15161521
begin
@@ -1813,7 +1818,7 @@ procedure TFHIRValueSetExpander.checkSource(cset: TFhirValueSetComposeIncludeW;
18131818
end;
18141819
end;
18151820

1816-
procedure TFHIRValueSetExpander.processCodes(doDelete : boolean; list: TFslList<TFhirValueSetExpansionContainsW>; map: TFslMap<TFhirValueSetExpansionContainsW>; limitCount : integer; cset: TFhirValueSetComposeIncludeW; filter : TSearchFilterText; dependencies : TStringList; expansion : TFhirValueSetExpansionW; var notClosed : boolean);
1821+
procedure TFHIRValueSetExpander.processCodes(doDelete : boolean; list: TFslList<TFhirValueSetExpansionContainsW>; map: TFslMap<TFhirValueSetExpansionContainsW>; limitCount : integer; cset: TFhirValueSetComposeIncludeW; vsSrc : TFHIRValueSetW; filter : TSearchFilterText; dependencies : TStringList; expansion : TFhirValueSetExpansionW; var notClosed : boolean);
18171822
var
18181823
cs : TCodeSystemProvider;
18191824
i, count, offset : integer;
@@ -1986,7 +1991,7 @@ procedure TFHIRValueSetExpander.processCodes(doDelete : boolean; list: TFslList<
19861991
if (cctxt <> nil) and (not FParams.activeOnly or not cs.IsInactive(cctxt)) and passesFilters(cctxt, 0) then
19871992
begin
19881993
listDisplays(cds, cs, cctxt);
1989-
listDisplays(cds, cc);
1994+
listDisplays(cds, cc, vsSrc);
19901995
if filter.passes(cds) or filter.passes(cc.code) then
19911996
processCode(doDelete, limitCount, list, map, cs.systemUri(nil), cs.version(nil), cc.code, cds, cs.Definition(cctxt), expansion, valueSets);
19921997
end;

library/fui/fui_lcl_managers.pas

+94-1
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,31 @@
6161

6262
TControlOperation = (copNone, copAdd, copAddSet, copEdit, copDelete, copUp, copDown, copReload, copExecute, copRefresh, copStop, copCopy, copUpdate);
6363

64+
{ TControlEntryMenuItem }
65+
66+
TControlEntryMenuItem = class (TFslObject)
67+
private
68+
FMenuItem: TMenuItem;
69+
FMode: String;
70+
FOp: TControlOperation;
71+
public
72+
function link : TControlEntryMenuItem; overload;
73+
74+
property menuItem : TMenuItem read FMenuItem write FMenuItem;
75+
property op : TControlOperation read FOp write FOp;
76+
property mode : String read FMode write FMode;
77+
end;
78+
6479
TControlEntry = class (TFslObject)
6580
private
6681
FControl: TControl;
6782
FMode: String;
6883
FOp: TControlOperation;
84+
FMenuItems : TFslList<TControlEntryMenuItem>;
85+
FMenu : TPopupMenu;
6986
public
87+
destructor Destroy; override;
88+
7089
function link : TControlEntry; overload;
7190

7291

@@ -93,6 +112,7 @@ TListOrTreeManagerBase = class abstract (TFslObject)
93112
procedure doControl(sender : TObject); virtual; abstract;
94113
procedure doMnuClick(Sender: TObject); virtual; abstract;
95114
procedure updateControls(op : TControlOperation; allowed : boolean);
115+
procedure updateMenuControls;
96116
procedure SetImages(AValue: TImagelist); virtual;
97117
public
98118
constructor Create; override;
@@ -106,7 +126,9 @@ TListOrTreeManagerBase = class abstract (TFslObject)
106126
procedure getCopyModes(modes : TStringList); virtual;
107127

108128
procedure registerControl(c : TControl; op : TControlOperation; mode : String = '');
109-
function registerMenuEntry(caption : String; imageIndex : integer; op : TControlOperation; mode : String = '') : TMenuItem;
129+
function registerControlForMenu(c : TControl; menu : TPopupMenu) : TControlEntry;
130+
function registerMenuEntry(caption : String; imageIndex : integer; op : TControlOperation; mode : String = '') : TMenuItem; overload;
131+
function registerMenuEntry(grp : TControlEntry; caption : String; imageIndex : integer; op : TControlOperation; mode : String = '') : TMenuItem; overload;
110132
function registerSubMenuEntry(parent : TMenuItem; caption : String; imageIndex : integer; op : TControlOperation; mode : String = '') : TMenuItem;
111133
end;
112134

@@ -555,6 +577,13 @@ TPanelStack = class (TFslObject)
555577

556578
Implementation
557579

580+
{ TControlEntryMenuItem }
581+
582+
function TControlEntryMenuItem.link: TControlEntryMenuItem;
583+
begin
584+
result := TControlEntryMenuItem(inherited link);
585+
end;
586+
558587
{ TPanelStackSubPanel }
559588

560589
constructor TPanelStackSubPanel.create(container, heading: TPanel);
@@ -679,6 +708,12 @@ procedure TObjectManager.registerControl(propName: String; control: TCheckBox);
679708

680709
{ TControlEntry }
681710

711+
destructor TControlEntry.Destroy;
712+
begin
713+
FMenuItems.Free;
714+
inherited Destroy;
715+
end;
716+
682717
function TControlEntry.link: TControlEntry;
683718
begin
684719
result := TControlEntry(inherited link);
@@ -727,6 +762,20 @@ procedure TListOrTreeManagerBase.registerControl(c : TControl; op : TControlOper
727762
end;
728763
end;
729764

765+
function TListOrTreeManagerBase.registerControlForMenu(c: TControl; menu : TPopupMenu): TControlEntry;
766+
begin
767+
result := TControlEntry.create;
768+
try
769+
result.control := c;
770+
result.op := copNone;
771+
result.FMenu := menu;
772+
c.enabled := false;
773+
FControls.add(result.link);
774+
finally
775+
result.free;
776+
end;
777+
end;
778+
730779
function TListOrTreeManagerBase.registerMenuEntry(caption: String; imageIndex: integer; op: TControlOperation; mode : String = '') : TMenuItem;
731780
var
732781
list : TStringList;
@@ -758,6 +807,22 @@ function TListOrTreeManagerBase.registerMenuEntry(caption: String; imageIndex: i
758807
end;
759808
end;
760809

810+
function TListOrTreeManagerBase.registerMenuEntry(grp: TControlEntry; caption: String; imageIndex: integer; op: TControlOperation; mode: String): TMenuItem;
811+
var
812+
list : TStringList;
813+
i : integer;
814+
begin
815+
result := TMenuItem.create(nil);
816+
grp.FMenu.Items.add(result);
817+
result.caption := caption;
818+
result.imageIndex := imageIndex;
819+
result.Tag := Integer(op);
820+
if mode <> '' then
821+
result.name := 'mnuMode'+mode;
822+
if op <> copNone then
823+
result.OnClick := doMnuClick;
824+
end;
825+
761826
function TListOrTreeManagerBase.registerSubMenuEntry(parent: TMenuItem; caption: String; imageIndex: integer; op: TControlOperation; mode: String): TMenuItem;
762827
begin
763828
result := TMenuItem.create(nil);
@@ -783,13 +848,38 @@ procedure TListOrTreeManagerBase.updateControls(op: TControlOperation; allowed:
783848
i : integer;
784849
begin
785850
for entry in FControls do
851+
begin
786852
if entry.op = op then
787853
entry.control.enabled := allowed;
854+
if (entry.FMenu <> nil) then
855+
for i := 0 to entry.FMenu.Items.Count - 1 do
856+
if (TControlOperation(entry.FMenu.Items[i].tag) = op) then
857+
entry.FMenu.Items[i].enabled := allowed;
858+
end;
788859
for i := 0 to FPopup.Items.Count - 1 do
789860
if (TControlOperation(FPopup.Items[i].tag) = op) then
790861
FPopup.Items[i].enabled := allowed;
791862
end;
792863

864+
procedure TListOrTreeManagerBase.updateMenuControls;
865+
var
866+
entry : TControlEntry;
867+
i : integer;
868+
ok : boolean;
869+
begin
870+
for entry in FControls do
871+
begin
872+
if (entry.FMenu <> nil) then
873+
begin
874+
ok := false;
875+
for i := 0 to entry.FMenu.Items.Count - 1 do
876+
if entry.FMenu.Items[i].Enabled then
877+
ok := true;
878+
entry.control.Enabled := ok;
879+
end;
880+
end;
881+
end;
882+
793883
{ TListManager }
794884

795885
constructor TListManager<T>.Create;
@@ -973,6 +1063,7 @@ procedure TListManager<T>.updateStatus;
9731063
updateControls(copUpdate, opUpdate in ops);
9741064
updateControls(copStop, opStop in ops);
9751065
updateControls(copCopy, FHasCopy);
1066+
updateMenuControls();
9761067
FCanEdit := opEdit in ops;
9771068

9781069
focusItemChange(focus);
@@ -2011,6 +2102,7 @@ procedure TTreeManager<T>.updateStatus;
20112102
updateControls(copUpdate, opUpdate in ops);
20122103
updateControls(copStop, opStop in ops);
20132104
updateControls(copCopy, FHasCopy);
2105+
updateMenuControls;
20142106
FCanEdit := opEdit in ops;
20152107

20162108
focusItemChange(focus);
@@ -2536,6 +2628,7 @@ procedure TVTreeManager<T>.updateStatus;
25362628
updateControls(copUpdate, opUpdate in ops);
25372629
updateControls(copStop, opStop in ops);
25382630
updateControls(copCopy, FHasCopy);
2631+
updateMenuControls;
25392632
FCanEdit := opEdit in ops;
25402633

25412634
focusItemChange(focus);

server/client_cache_manager.pas

+5-2
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,11 @@ procedure TClientCacheManagerEntry.update(list: TFslMetadataResourceList);
118118
FList.RemoveAll(remove);
119119
for i in list do
120120
begin
121-
FSize := FSize + i.sizeInBytes(magic);
122-
FList.Add(i.link);
121+
if (i.url <> '') then
122+
begin
123+
FSize := FSize + i.sizeInBytes(magic);
124+
FList.Add(i.link);
125+
end;
123126
end;
124127
finally
125128
remove.Free;

server/fhirserver.res

-28 Bytes
Binary file not shown.

toolkit2/fhirtoolkit.lpi

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
12
<CONFIG>
23
<ProjectOptions>
34
<Version Value="12"/>
@@ -16,9 +17,7 @@
1617
<VersionInfo>
1718
<UseVersionInfo Value="True"/>
1819
<MajorVersionNr Value="2"/>
19-
<MinorVersionNr Value="0"/>
2020
<RevisionNr Value="9"/>
21-
<Attributes pvaDebug="False"/>
2221
</VersionInfo>
2322
<BuildModes>
2423
<Item Name="default" Default="True"/>

0 commit comments

Comments
 (0)