Summary Table

Categories Total Count
PII 23
URL 0
DNS 0
EKL 0
IP 0
PORT 0
VsID 0
CF 0
AI 0
VPD 0
PL 0
Other 0

File Content

unit mGMV_EditTemplate;
{
================================================================================
*
* Application: Vitals
* Revision: $Revision: 1 $ $Modtime: 3/05/09 10:31a $
* Developer:
PII
* Site: Hines OIFO
*
* Description: Frame used to edit/save vitals templates
*
* Notes: Used on the Vitals User and Manager application
*
================================================================================
* $Archive: /Vitals/5.0 (Version 5.0)/5.0.23 (Patch 23)/VITALS_5_0_23_8/Source/VITALSCOMMON/mGMV_EditTemplate.pas $
*
* $History: mGMV_EditTemplate.pas $
*
* ***************** Version 1 *****************
* User:
PII Date: 8/12/09 Time: 8:29a
* Created in $/Vitals/5.0 (Version 5.0)/5.0.23 (Patch 23)/VITALS_5_0_23_8/Source/VITALSCOMMON
*
* ***************** Version 1 *****************
* User:
PII Date: 3/09/09 Time: 3:38p
* Created in $/Vitals/5.0 (Version 5.0)/5.0.23 (Patch 23)/VITALS_5_0_23_6/Source/VITALSCOMMON
*
* ***************** Version 1 *****************
* User:
PII Date: 1/13/09 Time: 1:26p
* Created in $/Vitals/5.0 (Version 5.0)/5.0.23 (Patch 23)/VITALS_5_0_23_4/Source/VITALSCOMMON
*
* ***************** Version 1 *****************
* User:
PII Date: 5/14/07 Time: 10:29a
* Created in $/Vitals GUI 2007/Vitals-5-0-18/VITALSCOMMON
*
* ***************** Version 1 *****************
* User:
PII Date: 5/16/06 Time: 5:43p
* Created in $/Vitals/VITALS-5-0-18/VitalsCommon
* GUI v. 5.0.18 updates the default vital type IENs with the local
* values.
*
* ***************** Version 1 *****************
* User:
PII Date: 5/16/06 Time: 5:33p
* Created in $/Vitals/Vitals-5-0-18/VITALS-5-0-18/VitalsCommon
*
* ***************** Version 1 *****************
* User:
PII Date: 5/24/05 Time: 3:33p
* Created in $/Vitals/Vitals GUI v 5.0.2.1 -5.0.3.1 - Patch GMVR-5-7 (CASMed, No CCOW) - Delphi 6/VitalsCommon
*
* ***************** Version 1 *****************
* User:
PII Date: 4/16/04 Time: 4:18p
* Created in $/Vitals/Vitals GUI Version 5.0.3 (CCOW, CPRS, Delphi 7)/VITALSCOMMON
*
* ***************** Version 1 *****************
* User:
PII Date: 1/26/04 Time: 1:06p
* Created in $/Vitals/Vitals GUI Version 5.0.3 (CCOW, Delphi7)/V5031-D7/Common
*
* ***************** Version 1 *****************
* User:
PII Date: 10/29/03 Time: 4:14p
* Created in $/Vitals503/Common
* Version 5.0.3
*
* ***************** Version 11 *****************
* User:
PII Date: 5/02/03 Time: 9:33a
* Updated in $/Vitals GUI Version 5.0/Common
* Sentillion CCOW Immersion updates
*
* ***************** Version 10 *****************
* User:
PII Date: 11/04/02 Time: 9:15a
* Updated in $/Vitals GUI Version 5.0/Common
* Version 5.0.0.0
*
* ***************** Version 9 *****************
* User:
PII Date: 10/04/02 Time: 4:50p
* Updated in $/Vitals GUI Version 5.0/Common
* Version T32
*
* ***************** Version 8 *****************
* User:
PII Date: 9/06/02 Time: 3:58p
* Updated in $/Vitals GUI Version 5.0/Common
* Version T31
*
* ***************** Version 7 *****************
* User:
PII Date: 7/12/02 Time: 5:01p
* Updated in $/Vitals GUI Version 5.0/Common
* GUI Version T28
*
* ***************** Version 6 *****************
* User:
PII Date: 6/13/02 Time: 5:14p
* Updated in $/Vitals GUI Version 5.0/Common
*
* ***************** Version 5 *****************
* User:
PII Date: 6/11/02 Time: 4:47p
* Updated in $/Vitals GUI Version 5.0/Common
*
* ***************** Version 4 *****************
* User:
PII Date: 6/06/02 Time: 11:08a
* Updated in $/Vitals GUI Version 5.0/Common
* Roll-up to 5.0.0.27
*
* ***************** Version 3 *****************
* User:
PII Date: 4/26/02 Time: 11:31a
* Updated in $/Vitals GUI Version 5.0/Common
*
* ***************** Version 2 *****************
* User:
PII Date: 4/15/02 Time: 12:16p
* Updated in $/Vitals GUI Version 5.0/Common
*
* ***************** Version 1 *****************
* User:
PII Date: 4/04/02 Time: 4:01p
* Created in $/Vitals GUI Version 5.0/Common
*
*
*
================================================================================
}

interface

uses
Windows,
Messages,
SysUtils,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
Buttons,
StdCtrls,
ExtCtrls,
ComCtrls,
CheckLst,
uGMV_Common,
fGMV_AddVCQ
, uGMV_QualifyBox
, uGMV_Template
,uGMV_User
, ActnList, ImgList, System.Actions, System.ImageList, uGMV_FileEntry;

type

TListViewHelper = class helper for TListView
public
function Contains(const aString : string) : boolean;
Procedure SelectByCaption(const aString : string);
Function IndexOf(const aString : string): Integer;
end;

TfraGMV_EditTemplate = class(TFrame)
pnlQualifiers: TPanel;
pnlVitals: TPanel;
rgMetric: TRadioGroup;
Splitter1: TSplitter;
pnlHeader: TPanel;
pnlNameDescription: TPanel;
edtTemplateDescription: TEdit;
Label2: TLabel;
Label1: TLabel;
edtTemplateName: TEdit;
pnlListView: TPanel;
ActionList1: TActionList;
acUp: TAction;
acDown: TAction;
acAdd: TAction;
acDelete: TAction;
Panel1: TPanel;
Panel3: TPanel;
lblVitals: TLabel;
Panel5: TPanel;
ImageList1: TImageList;
pnlDefaults: TPanel;
Panel8: TPanel;
lblQualifiers: TLabel;
pnlDefaultQualifiers: TPanel;
Panel2: TPanel;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
gb: TGroupBox;
Panel4: TPanel;
lvVitals: TListView;
Panel6: TPanel;
GB2: TGroupBox;
chkQualReq: TCheckBox;
clbQualReq: TCheckListBox;
procedure QBCheck(Sender: TObject);
procedure lvVitalsSelectItem(Sender: TObject; Item: TListItem; Selected: Boolean);
procedure pnlQualifiersResize(Sender: TObject);
procedure rgMetricClick(Sender: TObject);
procedure pnlListViewResize(Sender: TObject);
procedure ChangeMade(Sender: TObject);
procedure edtTemplateNameKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure acUpExecute(Sender: TObject);
procedure acDownExecute(Sender: TObject);
procedure acAddExecute(Sender: TObject);
procedure acDeleteExecute(Sender: TObject);
procedure edtTemplateNameEnter(Sender: TObject);
procedure edtTemplateNameExit(Sender: TObject);
procedure edtTemplateDescriptionEnter(Sender: TObject);
procedure edtTemplateDescriptionExit(Sender: TObject);
procedure lvVitalsExit(Sender: TObject);
procedure lvVitalsEnter(Sender: TObject);
procedure rgMetricEnter(Sender: TObject);
procedure rgMetricExit(Sender: TObject);
procedure gbDefaultEnter(Sender: TObject);
procedure gbDefaultExit(Sender: TObject);
procedure chkQualReqClick(Sender: TObject);
procedure GB2Enter(Sender: TObject);
procedure GB2Exit(Sender: TObject);
private
fQualBoxes: TList;
fEditTemplate: TGMV_Template;
fIgnore:Boolean;
fChangingOrder: Boolean;
fChangesMade: Boolean;
fQCanvas: TWinControl;
procedure AddVital(Vital: TGMV_TemplateVital);
procedure ClearAllQualBoxes(Keep:Boolean=False);
procedure LoadQualifiers(VitalIEN: string);
function GetEditTemplate: TGMV_Template;
procedure SetEditTemplate(const Value: TGMV_Template);
procedure getTemplate(Selected:Boolean;aCaption:String;aTemplate:TGMV_TemplateVital);
procedure btnMoveUp;
procedure btnMoveDown;
procedure btnAddVital;
procedure btnDeleteVital;
Procedure SetchkQualReq(aObj: TWinControl; aValue: Boolean; BypassClick: Boolean = false);
procedure WMDestroy(var Msg: TWMDestroy); message WM_DESTROY;
Procedure CleanUp;
Procedure ClearList();
public
procedure SaveTemplate;
procedure SaveTemplateIfChanged;
published
property EditTemplate: TGMV_Template
read GetEditTemplate write SetEditTemplate;
property ChangesMade: Boolean
read FChangesMade;
end;

implementation

uses uGMV_GlobalVars, uGMV_Const
, uGMV_Engine, mGMV_DefaultSelector, System.UITypes, StrUtils;


{$R *.DFM}

//AAN 06/11/02------------------------------------------------------------Begin
function MetricCaption(sVitalName:String;bVitalMetric:Boolean):String;
begin
if pos(UpperCase(sVitalName),upperCase(MetricList)) <> 0 then
result :=BOOLEANUM[bVitalMetric]
else
result := 'N/A';
end;

Function RequiredText(aVital: TGMV_TemplateVital): String;
begin
Result := '';
case aVital.Required[aVital.IEN] of
qrSystemWide: Result := 'System wide';
qrTemplateOnly: Result := 'Template only';
qrTemplateBypass: Result := 'Excluded from template';
end;
end;

Procedure SetMaxQual;
begin

end;

//AAN 06/11/02--------------------------------------------------------------End

procedure TfraGMV_EditTemplate.AddVital(Vital: TGMV_TemplateVital);
begin
try
with lvVitals.Items.Add do
begin
Caption := Vital.VitalName;
SubItems.Add(MetricCaption(Caption,Vital.Metric));//AAN 06/11/02
try
SubItems.Add(Vital.DisplayQualifiers);
Data := Vital;
except
Data := nil;
end;
SubItems.Add(RequiredText(Vital));
end;
except
end;
end;

procedure TfraGMV_EditTemplate.ClearAllQualBoxes(Keep:Boolean=False);
var
pnlQB: TPanel;
begin
if fQualBoxes <> nil then
while fQualBoxes.Count > 0 do
begin
pnlQB := TPanel(fQualBoxes[0]);
fQualBoxes.Delete(0);
FreeAndNil(pnlQB);
end
else
fQualBoxes := TList.Create;

rgMetric.ItemIndex := -1;
SetchkQualReq(chkQualReq, false, true);
clbQualReq.Items.Clear;
clbQualReq.Repaint;
end;

procedure TfraGMV_EditTemplate.QBCheck(Sender: TObject);
var
i, j: integer;
s, defQuals: string;
defQualsText: string;
begin
for i := 0 to FQualBoxes.Count - 1 do
with TGMV_TemplateQualifierBox(FQualBoxes[i]) do
begin
s := DefaultQualifierIEN;
if StrToIntDef(s, -1) > 0 then
begin
j := GMVQuals.IndexOfIEN(DefaultQualifierIEN);
if j > -1 then
begin
if defQuals <> '' then
defQuals := defQuals + '~';
if defQualsText <> '' then
defQualsText := defQualsText + ',';
defQuals := defQuals + CategoryIEN + ',' + DefaultQualifierIEN;
defQualsText := defQualsText +
GMVQuals.Entries[GMVQuals.IndexOfIEN(DefaultQualifierIEN)];
end;
end
end;
TGMV_TemplateVital(lvVitals.Selected.Data).Qualifiers := defQuals;
lvVitals.Selected.SubItems[1] := TGMV_TemplateVital(lvVitals.Selected.Data).DisplayQualifiers;
FChangesMade := True;
GetParentForm(Self).Perform(CM_TEMPLATEUPDATED, 0, 0) //AAN 06/11/02
end;

function TfraGMV_EditTemplate.GetEditTemplate: TGMV_Template;
begin
Result := FEditTemplate;
end;

procedure TfraGMV_EditTemplate.SaveTemplate;
var
x: string;
i: integer;
begin
{Is it renamed?}
if edtTemplateName.Text <> FEditTemplate.TemplateName then
if not FEditTemplate.Rename(edtTemplateName.Text) then
begin
MessageDlg('Sorry, ' + edtTemplateName.Text + ' is not a valid template name.', mtError, [mbok], 0);
edtTemplateName.Text := FEditTemplate.TemplateName;
Exit;
end;

x := edtTemplateDescription.Text + '|';
for i := 0 to lvVitals.Items.Count - 1 do
with TGMV_TemplateVital(lvVitals.Items[i].Data) do
begin
if i > 0 then
x := x + ';';
x := x + IEN + ':' + IntToStr(BOOLEAN01[Metric]);
// if Qualifiers <> '' then
x := x + ':' + Qualifiers;
x := X + ':' + RequiredAsString;
end;
FEditTemplate.XPARValue := x;
FChangesMade := False;
GetParentForm(Self).Perform(CM_TEMPLATEREFRESHED, 0, 0) //AAN 06/11/02
end;

procedure TfraGMV_EditTemplate.pnlQualifiersResize(Sender: TObject);
var
i: integer;
begin
Exit;
if FQualBoxes <> nil then
for i := 0 to FQualBoxes.Count - 1 do
TGMV_TemplateQualifierBox(FQualBoxes[i]).Width := (pnlQualifiers.Width div FQualBoxes.Count);
end;

procedure TfraGMV_EditTemplate.btnMoveUp;
var
tmpItem: TGMV_TemplateVital;
i: integer;
begin
lvVitals.Items.BeginUpdate;
FChangingOrder := True;
FChangesMade := True;
GetParentForm(Self).Perform(CM_TEMPLATEUPDATED, 0, 0); //AAN 06/11/02
if lvVitals.Selected.Index > 0 then
begin
i := lvVitals.Items.IndexOf(lvVitals.Selected);
tmpItem := lvVitals.Items[i].Data;
lvVitals.Items[i].Data := lvVitals.Items[i - 1].Data;
lvVitals.Items[i - 1].Data := tmpItem;

with TGMV_TemplateVital(lvVitals.Items[i].Data) do
begin
//lvVitals.Items[i].Caption := VitalName;
lvVitals.Items[i].Caption := VitalName;
lvVitals.Items[i].SubItems[2] := RequiredText(TGMV_TemplateVital(lvVitals.Items[i].Data));
lvVitals.Items[i].SubItems[1] := DisplayQualifiers;
lvVitals.Items[i].SubItems[0] := MetricCaption( //AAN 06/11/02
VitalName, //AAN 06/11/02
Metric); //AAN 06/11/02
end;

with TGMV_TemplateVital(lvVitals.Items[i - 1].Data) do
begin
//lvVitals.Items[i - 1].Caption := VitalName;
lvVitals.Items[i - 1].Caption := VitalName;
lvVitals.Items[i - 1].SubItems[2] := RequiredText(TGMV_TemplateVital(lvVitals.Items[i - 1].Data));
lvVitals.Items[i - 1].SubItems[1] := DisplayQualifiers;
lvVitals.Items[i - 1].SubItems[0] := MetricCaption( //AAN 06/11/02
VitalName, //AAN 06/11/02
Metric); //AAN 06/11/02
end;

lvVitals.Items[i].Selected := False;
lvVitals.Items[i - 1].Selected := True;
lvVitals.UpdateItems(i - 1, i);
lvVitals.ItemFocused := lvVitals.Items[i - 1];
end;
FChangingOrder := False;
lvVitals.Items.EndUpdate;
end;

procedure TfraGMV_EditTemplate.btnMoveDown;
var
tmpItem: TGMV_TemplateVital;
i: integer;
begin
lvVitals.Items.BeginUpdate;
FChangingOrder := True;
FChangesMade := True;
GetParentForm(Self).Perform(CM_TEMPLATEUPDATED, 0, 0); //AAN 06/11/02
if lvVitals.Selected.Index < lvVitals.Items.Count - 1 then
begin
i := lvVitals.Items.IndexOf(lvVitals.Selected);
tmpItem := lvVitals.Items[i].Data;
lvVitals.Items[i].Data := lvVitals.Items[i + 1].Data;
lvVitals.Items[i + 1].Data := tmpItem;

with TGMV_TemplateVital(lvVitals.Items[i].Data) do
begin
// lvVitals.Items[i].Caption := VitalName;
lvVitals.Items[i].Caption := VitalName;
lvVitals.Items[i].SubItems[2] := RequiredText(TGMV_TemplateVital(lvVitals.Items[i].Data));
lvVitals.Items[i].SubItems[1] := DisplayQualifiers;
lvVitals.Items[i].SubItems[0] := MetricCaption( //AAN 06/11/02
VitalName, //AAN 06/11/02
Metric); //AAN 06/11/02
end;

with TGMV_TemplateVital(lvVitals.Items[i + 1].Data) do
begin
//lvVitals.Items[i + 1].Caption := VitalName;
lvVitals.Items[i + 1].Caption := VitalName;
lvVitals.Items[i + 1].SubItems[2] := RequiredText(TGMV_TemplateVital(lvVitals.Items[i + 1].Data));
lvVitals.Items[i + 1].SubItems[1] := DisplayQualifiers;
lvVitals.Items[i + 1].SubItems[0] := MetricCaption( //AAN 06/11/02
VitalName, //AAN 06/11/02
Metric); //AAN 06/11/02
end;

lvVitals.Items[i].Selected := False;
lvVitals.Items[i + 1].Selected := True;
lvVitals.UpdateItems(i, i + 1);
lvVitals.ItemFocused := lvVitals.Items[i + 1];
end;
FChangingOrder := False;
lvVitals.Items.EndUpdate;
end;

procedure TfraGMV_EditTemplate.btnAddVital;
var
i: integer;
aTempName: String;
begin
with TfrmGMV_AddVCQ.Create(Self) do
try
LoadVitals;
ShowModal;
if ModalResult = mrOk then
begin
for i := 0 to lbxVitals.Items.Count - 1 do
begin
if lbxVitals.Selected[i] then
begin
aTempName := GMVTypes.Entries[GMVTypes.IndexOfIEN(TGMV_FileEntry(lbxVitals.Items.Objects[i]).IEN)];
if not lvVitals.Contains(aTempName) then
begin
AddVital(TGMV_TemplateVital.CreateFromXPAR(
TGMV_FileEntry(lbxVitals.Items.Objects[i]).IEN +
':' + lbxVitals.Items[i] + '::'));
FChangesMade := True;
GetParentForm(Self).Perform(CM_TEMPLATEUPDATED, 0, 0) //AAN 06/11/02
end else
begin
ShowMessage(aTempName + ' already exist on template <' + FEditTemplate.TemplateName + '>.');
lvVitals.SelectByCaption(aTempName);
end;
end;
end;
end;
finally
free;
end;
end;

procedure TfraGMV_EditTemplate.btnDeleteVital;
var
i: integer;
begin
i := lvVitals.Items.IndexOf(lvVitals.Selected); {Where are we now}

if lvVitals.Selected <> nil then
begin
FChangesMade := True;
GetParentForm(Self).Perform(CM_TEMPLATEUPDATED, 0, 0); //AAN 06/11/02
if lvVitals.Selected.Data <> nil then
TGMV_TemplateVital(lvVitals.Selected.Data).Free;
lvVitals.Selected.Delete;
if i > lvVitals.Items.Count - 1 then
i := lvVitals.Items.Count - 1; {Deleted last one, get new last item}
if i > -1 then
lvVitals.Items[i].Selected := True;
end;
end;

Procedure TfraGMV_EditTemplate.SetchkQualReq(aObj: TWinControl; aValue: Boolean;
BypassClick: Boolean = False);
var
rtnMethod: TNotifyEvent;
begin
if BypassClick then
begin
if aObj is TCheckBox then
begin
rtnMethod := TCheckBox(aObj).OnClick;
TCheckBox(aObj).OnClick := nil;
end else begin
rtnMethod := TCheckListBox(aObj).OnClick;
TCheckListBox(aObj).OnClick := nil;
end;
try
if aObj is TCheckBox then
TCheckBox(aObj).Checked := aValue
else if aObj is TCheckListBox then
TCheckListBox(aObj).Checked[TCheckListBox(aObj).ItemIndex] := aValue
finally
if aObj is TCheckBox then
TCheckBox(aObj).OnClick := rtnMethod
else
TCheckListBox(aObj).OnClick := rtnMethod;
end;
end else begin
if aObj is TCheckBox then
TCheckBox(aObj).Checked := aValue
else if aObj is TCheckListBox then
TCheckListBox(aObj).Checked[TCheckListBox(aObj).ItemIndex] := aValue
end;
end;

procedure TfraGMV_EditTemplate.rgMetricClick(Sender: TObject);
begin
if lvVitals.Selected <> nil then
begin
FChangesMade := True;
GetParentForm(Self).Perform(CM_TEMPLATEUPDATED, 0, 0); //AAN 06/11/02
//AAN 06/11/02 lvVitals.Selected.SubItems[0] := rgMetric.Items[rgMetric.ItemIndex];
TGMV_TemplateVital(lvVitals.Selected.Data).Metric := (rgMetric.ItemIndex = 1);
lvVitals.Selected.SubItems[0] := MetricCaption( //AAN 06/11/02
TGMV_TemplateVital(lvVitals.Selected.Data).VitalName, //AAN 06/11/02
TGMV_TemplateVital(lvVitals.Selected.Data).Metric); //AAN 06/11/02
end;
end;

procedure TfraGMV_EditTemplate.pnlListViewResize(Sender: TObject);
begin
lvVitals.Width := pnlListView.Width - (lvVitals.Left * 2);
lvVitals.Height := pnlListView.Height - (lvVitals.Top * 2);
end;

procedure TfraGMV_EditTemplate.ChangeMade(Sender: TObject);
begin
FChangesMade := True;
GetParentForm(Self).Perform(CM_TEMPLATEUPDATED, 0, 0) //AAN 06/11/02
end;

procedure TfraGMV_EditTemplate.chkQualReqClick(Sender: TObject);
Const
aMsg='This %s is currently marked to require the entry of qualifiers system wide. Are you sure you want to exclude that check in this template only?';
var
I: integer;
SenderIEN: String;
doChange: Boolean;
tmpGMV_Temp: TGMV_TemplateVital;
tmpGMV_FileEntry: TGMV_FileEntry;
aCheckBoxState: TCheckBoxState;
begin
if lvVitals.Selected <> nil then
begin
doChange := True;

//Get the lookup IEN based on the sender
tmpGMV_Temp := TGMV_TemplateVital(lvVitals.Selected.Data);
if Sender = clbQualReq then
begin
tmpGMV_FileEntry := TGMV_FileEntry(clbQualReq.Items.Objects[clbQualReq.ItemIndex]);
SenderIEN := tmpGMV_Temp.IEN+'_'+tmpGMV_FileEntry.IEN;
aCheckBoxState := clbQualReq.State[TCheckListBox(Sender).ItemIndex];
end else begin
SenderIEN := tmpGMV_Temp.IEN;
aCheckBoxState := chkQualReq.State;
end;

//See if this is already system wide and if so then confirm the change
if (tmpGMV_Temp.Required[SenderIEN] = qrSystemWide) and (aCheckBoxState = cbUnchecked) then
begin
if Sender = chkQualReq then
doChange := MessageDlg(Format(aMsg, ['vital measurement']), mtWarning, mbYesNo, 0) = mrYes
else
doChange := MessageDlg(Format(aMsg, ['measurement category']), mtWarning, mbYesNo, 0) = mrYes;

if not DoChange then
begin
if Sender = clbQualReq then
SetchkQualReq(clbQualReq, not clbQualReq.Checked[clbQualReq.ItemIndex], true)
else
SetchkQualReq(chkQualReq, not chkQualReq.Checked, true)
end;
end;

if doChange then
begin
FChangesMade := True;
GetParentForm(Self).Perform(CM_TEMPLATEUPDATED, 0, 0);

if Sender = clbQualReq then
aCheckBoxState := clbQualReq.State[TCheckListBox(Sender).ItemIndex]
else
aCheckBoxState := chkQualReq.State;


if aCheckBoxState = cbChecked then
begin
if IsQualifierGlobalRequired(SenderIEN) then
tmpGMV_Temp.Required[SenderIEN] := qrSystemWide
else
tmpGMV_Temp.Required[SenderIEN] := qrTemplateOnly;


if (Sender = chkQualReq) and (tmpGMV_Temp.Required[SenderIEN] = qrSystemWide) then
begin
//reset selection
for I := 0 to clbQualReq.Count - 1 do
begin
if IsQualifierGlobalRequired(tmpGMV_Temp.IEN+'_'+TGMV_FileEntry(clbQualReq.Items.Objects[I]).IEN) then
begin
clbQualReq.Checked[I] := true;
tmpGMV_Temp.Required[tmpGMV_Temp.IEN+'_'+TGMV_FileEntry(clbQualReq.Items.Objects[I]).IEN] := qrSystemWide;
end;
end;
end;


end else begin
//unchecking a system wide needs to be bypass
if IsQualifierGlobalRequired(SenderIEN) then
tmpGMV_Temp.Required[SenderIEN] := qrTemplateBypass
else
tmpGMV_Temp.Required[SenderIEN] := qrNo;

if Sender = chkQualReq then
begin
//Clear selection
for I := 0 to clbQualReq.Count - 1 do
begin
if clbQualReq.Checked[I] then
clbQualReq.Checked[I] := false;
if IsQualifierGlobalRequired(tmpGMV_Temp.IEN+'_'+TGMV_FileEntry(clbQualReq.Items.Objects[I]).IEN) then
tmpGMV_Temp.Required[tmpGMV_Temp.IEN+'_'+TGMV_FileEntry(clbQualReq.Items.Objects[I]).IEN] := qrTemplateBypass
else
tmpGMV_Temp.Required[tmpGMV_Temp.IEN+'_'+TGMV_FileEntry(clbQualReq.Items.Objects[I]).IEN] := qrNo;
end;
end;

end;

lvVitals.Selected.SubItems[2] := RequiredText(tmpGMV_Temp);
end;
end;

clbQualReq.Enabled := chkQualReq.Checked;

end;

//AAN 06/11/02 ---------------------------------------------------------- Begin
procedure TfraGMV_EditTemplate.edtTemplateNameKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if Key <> VK_Escape then
ChangeMade(Sender);
end;

procedure TfraGMV_EditTemplate.GB2Enter(Sender: TObject);
begin
gb2.Font.Style := [fsBold];
end;

procedure TfraGMV_EditTemplate.GB2Exit(Sender: TObject);
begin
gb2.Font.Style := [];
end;

procedure TfraGMV_EditTemplate.SaveTemplateIfChanged;
begin
if FChangesMade then
if MessageDlg('The template <' + FEditTemplate.TemplateName + '> has been changed.'+
#13#10+ 'Save changes?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
SaveTemplate;
fChangesMade := false;
GetParentForm(Self).Perform(CM_TEMPLATEREFRESHED, 0, 0)
end;
//AAN 06/11/02 ------------------------------------------------------------ End

procedure TfraGMV_EditTemplate.acUpExecute(Sender: TObject);
begin
btnMoveUp;
end;

procedure TfraGMV_EditTemplate.acDownExecute(Sender: TObject);
begin
btnMoveDown;
end;

procedure TfraGMV_EditTemplate.acAddExecute(Sender: TObject);
begin
btnAddVital;
end;

procedure TfraGMV_EditTemplate.acDeleteExecute(Sender: TObject);
begin
if MessageDlg( 'Are you sure you want to delete'+#13+
'<'+lvVitals.Selected.Caption+'>?' ,
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
btnDeleteVital;
end;

procedure TfraGMV_EditTemplate.edtTemplateNameEnter(Sender: TObject);
begin
label1.Font.Style := [fsBold];
end;

procedure TfraGMV_EditTemplate.edtTemplateNameExit(Sender: TObject);
begin
label1.Font.Style := [];
end;

procedure TfraGMV_EditTemplate.edtTemplateDescriptionEnter(
Sender: TObject);
begin
label2.Font.Style := [fsBold];
end;

procedure TfraGMV_EditTemplate.edtTemplateDescriptionExit(Sender: TObject);
begin
label2.Font.Style := [];
end;

procedure TfraGMV_EditTemplate.lvVitalsExit(Sender: TObject);
begin
lblVitals.Font.Style := [];
end;

procedure TfraGMV_EditTemplate.lvVitalsEnter(Sender: TObject);
begin
lblVitals.Font.Style := [fsBold];
end;

procedure TfraGMV_EditTemplate.gbDefaultEnter(Sender: TObject);
begin
gb.Font.Style := [fsBold];
end;

procedure TfraGMV_EditTemplate.gbDefaultExit(Sender: TObject);
begin
gb.Font.Style := [];
end;

procedure TfraGMV_EditTemplate.rgMetricExit(Sender: TObject);
begin
rgMetric.Font.Style := [];
end;

procedure TfraGMV_EditTemplate.rgMetricEnter(Sender: TObject);
var
i: Integer;
begin
rgMetric.font.Style := [fsBold];
for i := 0 to rgMetric.ControlCount - 1 do
if rgMetric.Controls[i] is TRadioButton then
TRadioButton(rgMetric.Controls[i]).Font.Style := [];
end;

procedure TfraGMV_EditTemplate.LoadQualifiers(VitalIEN: string);
var
iOrder,
i, J, aRtnID: integer;
retList: TStrings;
aTemplate:TGMV_TemplateVital;

function AddQualifierBox(QBVitalIEN: string;
QBCatIEN: string; DefaultQualIEN: string = ''): TGMV_TemplateQualifierBox;
begin
if FQualBoxes = nil then
FQualBoxes := TList.Create;
Result := TGMV_TemplateQualifierBox.CreateParented(Self,fQCanvas,
QBVitalIEN, QBCatIEN, DefaultQualIEN, false); //
PII 20090219
Result.OnClick := QBCheck;
Result.Visible := True;
Result.setDDWidth;
FQualBoxes.Add(Result);
end;

begin
fQCanvas := gb;

lblQualifiers.Caption := 'Default Qualifiers: (Loading...)';
Application.ProcessMessages;
ClearAllQualBoxes;
Application.ProcessMessages;

clbQualReq.Clear;
clbQualReq.Items.BeginUpdate;
try
RetList := getCategoryQualifiers(VitalIEN);
try
for i := RetList.Count - 1 downto 1 do
begin
//Add the qualifier box
AddQualifierBox(VitalIEN, Piece(RetList[i], '^', 1));

//Fill out required categories
j := GMVCats.IndexOfIEN(Piece(RetList[i], '^', 1));
if j > - 1 then
begin
aRtnID := clbQualReq.Items.AddObject(GMVCats.Entries[j], TGMV_FileEntry(GMVCats.Entries.Objects[j]));
aTemplate := TGMV_TemplateVital(lvVitals.Selected.Data);
clbQualReq.Checked[aRtnID] := aTemplate.IsRequired[VitalIEN+'_'+TGMV_FileEntry(GMVCats.Entries.Objects[j]).IEN];
end;
end;
Finally
RetList.Free;
End;
Finally
clbQualReq.Items.EndUpdate;
end;

for i := 0 to fQCanvas.ControlCount - 1 do
if fQCanvas.Controls[i] is tGMV_TemplateQualifierBox then
begin
iOrder := fQCanvas.ControlCount - 1 - i;
TGMV_TemplateQualifierBox(fQCanvas.Controls[i]).TabOrder := iOrder;
end;
lblQualifiers.Caption := 'Default Qualifiers:';

if not FChangesMade then //AAN 06/12/02
GetParentForm(Self).Perform(CM_TEMPLATEREFRESHED, 0, 0) //AAN 06/11/02
end;

procedure TfraGMV_EditTemplate.getTemplate(Selected:Boolean;aCaption:String;aTemplate:TGMV_TemplateVital);
var
CatIEN: string;
QualIEN: string;
i, j: integer;
bTmp: Boolean; //AAN 06/12/02
begin
lvVitals.Enabled := False;
if not fChangingOrder then
if Selected then
begin
application.ProcessMessages;
SendMessage(Parent.Handle, WM_SETREDRAW, 0, 0);
try
lblQualifiers.Caption := aCaption + ' Default Qualifiers';
with aTemplate do
begin
LoadQualifiers(IEN);
i := 1;
while Piece(Qualifiers, '~', i) <> '' do
begin
CatIEN := Piece(Piece(Qualifiers, '~', i), ',', 1);
QualIEN := Piece(Piece(Qualifiers, '~', i), ',', 2);
for j := 0 to fQualBoxes.Count - 1 do
with TGMV_TemplateQualifierBox(fQualBoxes[j]) do
begin
if CategoryIEN = CatIEN then
DefaultQualifierIEN := QualIEN;
OnQualExit(nil);
end;
inc(i);
end;
bTmp := FChangesMade; //AAN 06/12/02
rgMetric.ItemIndex := BOOLEAN01[Metric];
rgMetric.Enabled := True;
SetchkQualReq(chkQualReq, IsRequired[IEN], true);

//enable if not system wide and the owner of the template OR its the manager
chkQualReq.Enabled := (((not IsSystemWideRequired) and (StrToIntDef(Piece(fEditTemplate.Owner.Entity, ';', 1), -1) = StrToIntDef(GMVUser.DUZ, -1))) or (GMVUser.GMVManager));
clbQualReq.Enabled := chkQualReq.Checked;
fChangesMade := bTmp; //AAN 06/12/02
end;
finally
SendMessage(Parent.Handle, WM_SETREDRAW, 1, 0);
RedrawWindow(Parent.Handle, nil, 0, RDW_ERASE or RDW_FRAME or
RDW_INVALIDATE or RDW_ALLCHILDREN);
end;
end
else
ClearAllQualBoxes;

acUp.Enabled := Selected;
acDown.Enabled := Selected;
acDelete.Enabled := Selected;
rgMetric.Enabled := Selected;
// chkQualReq.Enabled := Selected;

//AAN 06/11/02 -----------------------------------------------------------Begin
try
rgMetric.Enabled := (pos(aTemplate.VitalName,MetricList) <> 0);
except
end;

if not fChangesMade then
GetParentForm(Self).Perform(CM_TEMPLATEREFRESHED, 0, 0); //AAN 06/11/02
//AAN 06/11/02 -------------------------------------------------------------End
try
lvVitals.Enabled := True;
lvVitals.SetFocus;
except
end;
end;

procedure TfraGMV_EditTemplate.SetEditTemplate(const Value: TGMV_Template);
var
XPAR: string;
i: integer;
begin
SaveTemplateIfChanged;

ClearAllQualBoxes;
fIgnore := True;
ClearList;
fIgnore := False;

rgMetric.ItemIndex := -1;
rgMetric.Enabled := False;

SetchkQualReq(chkQualReq, false, true);
chkQualReq.Enabled := false;

acUp.Enabled := False;
acDown.Enabled := False;
acDelete.Enabled := False;

if Value <> nil then
begin
fEditTemplate := Value;
fChangingOrder := False;
XPAR := FEditTemplate.XPARValue;
edtTemplateName.Text := FEditTemplate.TemplateName;
edtTemplateDescription.Text := Piece(XPAR, '|', 1);
XPAR := Piece(XPAR, '|', 2);
i := 1;
while Piece(XPAR, ';', i) <> '' do
begin
AddVital(TGMV_TemplateVital.CreateFromXPAR(Piece(XPAR, ';', i)));
inc(i);
end;
if lvVitals.Items.Count > 0 then
lvVitals.Items[0].Selected := True; // results in call to reload
end
else
begin
edtTemplateName.Text := '';
edtTemplateDescription.Text := '';
end;
Enabled := (Value <> nil);
fChangesMade := False;
GetParentForm(Self).Perform(CM_TEMPLATEREFRESHED, 0, 0); //AAN 06/11/02
end;

procedure TfraGMV_EditTemplate.lvVitalsSelectItem(Sender: TObject; Item: TListItem; Selected: Boolean);
begin
Panel4.Caption := 'Defaults';
if fIgnore then
exit
else
fIgnore := True;
getTemplate(Selected,Item.Caption,TGMV_TemplateVital(Item.Data));
Panel4.Caption := Item.Caption + ' Defaults';
Panel4.Caption := MixedCase(Panel4.Caption);
fIgnore := False;
end;

procedure TfraGMV_EditTemplate.WMDestroy(var Msg: TWMDestroy);
begin
if (csDestroying in ComponentState) then
CleanUp;
inherited;
end;

Procedure TfraGMV_EditTemplate.CleanUp;
begin
ClearList;
ClearAllQualBoxes;
FreeandNil(fQualBoxes);
end;

Procedure TfraGMV_EditTemplate.ClearList();
Var
I: integer;
begin
for I := 0 to lvVitals.Items.Count - 1 do
begin
if Assigned(lvVitals.Items[i].Data) then
TGMV_TemplateVital(lvVitals.Items[i].Data).Free;
end;
lvVitals.Items.Clear;
end;

Function TListViewHelper.IndexOf(const aString : string): Integer;
var
I: integer;
begin
Result := -1;
for i := 0 to self.Items.Count - 1 do
begin
if Self.Items[i].Caption = aString then
begin
result := I;
break;
end;
end;
end;

function TListViewHelper.Contains(const aString: string): boolean;
begin
Result := IndexOf(aString) <> -1;
end;

Procedure TListViewHelper.SelectByCaption(const aString : string);
var
aIdx: Integer;
begin
aIdx := IndexOf(aString);
if aIdx <> -1 then
begin
Self.ClearSelection;
self.Items[aIdx].Selected := true;
end;
end;

end.