VistA-cprs/CPRS-Chart/fLabTestGroups.pas

439 lines
13 KiB
Plaintext

unit fLabTestGroups;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, Buttons, ORCtrls, StdCtrls, fBase508Form, VA508AccessibilityManager;
type
TfrmLabTestGroups = class(TfrmBase508Form)
pnlLabTestGroups: TORAutoPanel;
cmdOK: TButton;
cmdCancel: TButton;
cmdClear: TButton;
cmdRemove: TButton;
lstList: TORListBox;
cboTests: TORComboBox;
cmdUp: TSpeedButton;
pnlUpButton: TKeyClickPanel;
cmdDown: TSpeedButton;
pnlDownButton: TKeyClickPanel;
bvlTestGroups: TBevel;
cboUsers: TORComboBox;
lstTestGroups: TORListBox;
cmdReplace: TButton;
lblTests: TLabel;
lblList: TLabel;
cboSpecimen: TORComboBox;
lblSpecimen: TLabel;
lblTestGroups: TLabel;
lblUsers: TLabel;
lblOrder: TLabel;
cmdDelete: TButton;
cmdAdd: TButton;
cmdAddTest: TButton;
lblDefine: TVA508StaticText;
lblTestGroup: TLabel;
procedure FormCreate(Sender: TObject);
procedure cboTestsNeedData(Sender: TObject; const StartFrom: string;
Direction, InsertAt: Integer);
procedure cmdOKClick(Sender: TObject);
procedure cmdClearClick(Sender: TObject);
procedure cmdRemoveClick(Sender: TObject);
procedure cmdUpClick(Sender: TObject);
procedure cmdDownClick(Sender: TObject);
procedure lstListClick(Sender: TObject);
procedure cboUsersNeedData(Sender: TObject; const StartFrom: string;
Direction, InsertAt: Integer);
procedure cboSpecimenNeedData(Sender: TObject; const StartFrom: string;
Direction, InsertAt: Integer);
procedure cboUsersClick(Sender: TObject);
procedure cmdReplaceClick(Sender: TObject);
procedure cmdAddClick(Sender: TObject);
procedure cmdDeleteClick(Sender: TObject);
procedure cboTestsChange(Sender: TObject);
procedure cboTestsEnter(Sender: TObject);
procedure cboTestsExit(Sender: TObject);
procedure cmdAddTestClick(Sender: TObject);
procedure pnlUpButtonEnter(Sender: TObject);
procedure pnlUpButtonExit(Sender: TObject);
procedure pnlDownButtonEnter(Sender: TObject);
procedure pnlDownButtonExit(Sender: TObject);
procedure pnlUpButtonResize(Sender: TObject);
procedure pnlDownButtonResize(Sender: TObject);
procedure lstTestGroupsChange(Sender: TObject);
private
{ Private declarations }
procedure AddTests(tests: TStrings);
procedure TestGroupEnable;
public
{ Public declarations }
end;
procedure SelectTestGroups(FontSize: Integer);
implementation
uses fLabs, ORFn, rLabs, uCore, VAUtils, VA508AccessibilityRouter;
{$R *.DFM}
procedure SelectTestGroups(FontSize: Integer);
var
frmLabTestGroups: TfrmLabTestGroups;
W, H: integer;
begin
frmLabTestGroups := TfrmLabTestGroups.Create(Application);
try
with frmLabTestGroups do
begin
Font.Size := FontSize;
W := ClientWidth;
H := ClientHeight;
ResizeToFont(FontSize, W, H);
ClientWidth := W; pnlLabTestGroups.Width := W;
ClientHeight := H; pnlLabTestGroups.Height := H;
with lblTestGroup do begin
AutoSize := False;
Height := lstList.Height div 3;
Width := cmdAddTest.Width * 4 div 3;
AutoSize := True;
end;
with lblOrder do begin
AutoSize := False;
Height := lstList.Height div 3;
Width := cmdAddTest.Width div 2 + 10;
AutoSize := True;
end;
FastAssign(frmLabs.lstTests.Items, lstList.Items);
if lstList.Items.Count > 0 then lstList.ItemIndex := 0;
lstListClick(frmLabTestGroups);
ShowModal;
end;
finally
frmLabTestGroups.Release;
end;
end;
procedure TfrmLabTestGroups.FormCreate(Sender: TObject);
var
i: integer;
blood, urine, serum, plasma: string;
begin
RedrawSuspend(cboTests.Handle);
cboTests.InitLongList('');
RedrawActivate(cboTests.Handle);
RedrawSuspend(cboSpecimen.Handle);
cboSpecimen.InitLongList('');
SpecimenDefaults(blood, urine, serum, plasma);
cboSpecimen.Items.Add('0^Any');
cboSpecimen.Items.Add(serum + '^Serum');
cboSpecimen.Items.Add(blood + '^Blood');
cboSpecimen.Items.Add(plasma + '^Plasma');
cboSpecimen.Items.Add(urine + '^Urine');
cboSpecimen.Items.Add(LLS_LINE);
cboSpecimen.Items.Add(LLS_SPACE);
cboSpecimen.ItemIndex := 0;
RedrawActivate(cboSpecimen.Handle);
RedrawSuspend(cboTests.Handle);
cboUsers.InitLongList(User.Name);
for i := 0 to cboUsers.Items.Count - 1 do
if StrToInt64Def(Piece(cboUsers.Items[i], '^', 1), 0) = User.DUZ then
begin
cboUsers.ItemIndex := i;
break;
end;
if cboUsers.ItemIndex > -1 then cboUsersClick(self);
RedrawActivate(cboTests.Handle);
cmdUp.Enabled := false;
pnlUpButton.TabStop := false;
cmdDown.Enabled := false;
pnlDownButton.TabStop := false;
lstList.Clear;
end;
procedure TfrmLabTestGroups.cboTestsNeedData(Sender: TObject;
const StartFrom: string; Direction, InsertAt: Integer);
begin
cboTests.ForDataUse(ChemTest(StartFrom, Direction));
end;
procedure TfrmLabTestGroups.cmdOKClick(Sender: TObject);
begin
if lstList.Items.Count = 0 then
ShowMsg('No tests were selected.')
else
begin
FastAssign(lstList.Items, frmLabs.lstTests.Items);
frmLabs.lblSpecimen.Caption := cboSpecimen.Items[cboSpecimen.ItemIndex];
Close;
end;
end;
procedure TfrmLabTestGroups.cmdClearClick(Sender: TObject);
//var
//i: integer;
begin
lstList.Clear;
lstListClick(self);
lstTestGroups.ClearSelection;
//for i := 0 to lstTestGroups.Count - 1 do
// lstTestGroups.Selected[i] := false;
end;
procedure TfrmLabTestGroups.cmdRemoveClick(Sender: TObject);
var
newindex: integer;
begin
if lstList.Items.Count > 0 then
begin
if lstList.ItemIndex = (lstList.Items.Count -1 ) then
newindex := lstList.ItemIndex - 1
else
newindex := lstList.ItemIndex;
lstList.Items.Delete(lstList.ItemIndex);
if lstList.Items.Count > 0 then lstList.ItemIndex := newindex;
end;
lstListClick(self);
lstTestGroups.ClearSelection;
end;
procedure TfrmLabTestGroups.cmdUpClick(Sender: TObject);
var
newindex: integer;
templine: string;
begin
if cmdUp.Enabled then begin
newindex := lstList.ItemIndex - 1;
templine := lstList.Items[lstList.ItemIndex - 1];
lstList.Items[lstList.ItemIndex - 1] := lstList.Items[lstList.ItemIndex];
lstList.Items[lstList.ItemIndex] := templine;
lstList.ItemIndex := newindex;
lstListClick(self);
if ScreenReaderSystemActive then
GetScreenReader.Speak('Test Moved Up');
end;
end;
procedure TfrmLabTestGroups.cmdDownClick(Sender: TObject);
var
newindex: integer;
templine: string;
begin
if cmdDown.Enabled then begin
newindex := lstList.ItemIndex + 1;
templine := lstList.Items[lstList.ItemIndex + 1];
lstList.Items[lstList.ItemIndex + 1] := lstList.Items[lstList.ItemIndex];
lstList.Items[lstList.ItemIndex] := templine;
lstList.ItemIndex := newindex;
lstListClick(self);
if ScreenReaderSystemActive then
GetScreenReader.Speak('Test Moved Down');
end;
end;
procedure TfrmLabTestGroups.lstListClick(Sender: TObject);
begin
cmdUp.Enabled := not (lstList.ItemIndex = 0);
pnlUpButton.TabStop := not (lstList.ItemIndex = 0);
cmdDown.Enabled := not (lstList.ItemIndex = lstList.Items.Count - 1);
pnlDownButton.TabStop := not (lstList.ItemIndex = lstList.Items.Count - 1);
if lstList.Items.Count = 0 then
begin
cmdUp.Enabled := false;
pnlUpButton.TabStop := false;
cmdDown.Enabled := false;
pnlDownButton.TabStop := false;
cmdClear.Enabled := false;
cmdRemove.Enabled := false;
end
else
begin
cmdClear.Enabled := true;
cmdRemove.Enabled := true;
end;
TestGroupEnable;
end;
procedure TfrmLabTestGroups.cboUsersNeedData(Sender: TObject;
const StartFrom: string; Direction, InsertAt: Integer);
begin
cboUsers.ForDataUse(Users(StartFrom, Direction));
end;
procedure TfrmLabTestGroups.cboSpecimenNeedData(Sender: TObject;
const StartFrom: string; Direction, InsertAt: Integer);
begin
cboSpecimen.ForDataUse(Specimens(StartFrom, Direction));
end;
procedure TfrmLabTestGroups.cboUsersClick(Sender: TObject);
begin
FastAssign(TestGroups(cboUsers.ItemIEN), lstTestGroups.Items);
TestGroupEnable;
end;
procedure TfrmLabTestGroups.AddTests(tests: TStrings);
var
i, j, textindex: integer;
ok: boolean;
begin
textindex := lstList.Items.Count;
for i := 0 to tests.Count - 1 do
begin
ok := true;
for j := 0 to lstList.Items.Count - 1 do
if lstList.Items[j] = tests[i] then
begin
ok := false;
textindex := j;
end;
if ok then
begin
lstList.Items.Add(tests[i]);
textindex := lstList.Items.Count - 1;
end;
end;
lstList.ItemIndex := textindex;
lstListClick(self);
end;
procedure TfrmLabTestGroups.lstTestGroupsChange(Sender: TObject);
begin
if lstTestGroups.ItemIEN > 0 then
begin
AddTests(ATestGroup(lstTestGroups.ItemIEN, cboUsers.ItemIEN));
end;
end;
procedure TfrmLabTestGroups.TestGroupEnable;
begin
cmdAdd.Enabled := (lstList.Items.Count > 0) and (lstList.Items.Count < 8);
cmdDelete.Enabled := (cboUsers.ItemIEN = User.DUZ) and (lstTestGroups.ItemIndex > -1);
cmdReplace.Enabled := cmdAdd.Enabled and cmdDelete.Enabled;
end;
procedure TfrmLabTestGroups.cmdReplaceClick(Sender: TObject);
var
text: string;
i: integer;
begin
text := 'Do you want to REPLACE your test group -' + #13 + ' ';
text := text + lstTestGroups.DisplayText[lstTestGroups.ItemIndex] + #13;
text := text + ' with:' + #13 + ' ';
for i := 0 to lstList.Items.Count -1 do
text := text + lstList.DisplayText[i] + #13 + ' ';
if InfoBox(text,'Confirmation', MB_YESNO or MB_ICONQUESTION) = IDYES then
begin
UTGReplace(lstList.Items, lstTestGroups.ItemIEN); //Show508Message('Replace'); //Replace
if ScreenReaderSystemActive then
GetScreenReader.Speak('test group replaced');
end;
cboUsersClick(self);
lstTestGroups.SetFocus;
end;
procedure TfrmLabTestGroups.cmdAddClick(Sender: TObject);
var
text: string;
i: integer;
begin
text := 'Do you wish to create a NEW test group with these tests: ' + #13 + ' ';
for i := 0 to lstList.Items.Count -1 do
text := text + lstList.DisplayText[i] + #13 + ' ';
if InfoBox(text,'Confirmation', MB_YESNO or MB_ICONQUESTION) = IDYES then
begin
UTGAdd(lstList.Items);
if ScreenReaderSystemActive then
GetScreenReader.Speak('New test group created');
cboUsers.InitLongList(User.Name);
for i := 0 to cboUsers.Items.Count - 1 do
if StrToInt64Def(Piece(cboUsers.Items[i], '^', 1), 0) = User.DUZ then
begin
cboUsers.ItemIndex := i;
break;
end;
end;
if cboUsers.ItemIndex > -1 then cboUsersClick(self);
lstTestGroups.SetFocus;
end;
procedure TfrmLabTestGroups.cmdDeleteClick(Sender: TObject);
var
text: string;
i: integer;
begin
text := 'Do you wish to DELETE your test group:' + #13 + ' ';
text := text + lstTestGroups.DisplayText[lstTestGroups.ItemIndex] + #13 + ' ';
if InfoBox(text,'Confirmation', MB_YESNO or MB_ICONQUESTION) = IDYES then
begin
UTGDelete(lstTestGroups.ItemIEN);
if ScreenReaderSystemActive then
GetScreenReader.Speak('Test group deleted');
cboUsers.Text := '';
lstTestGroups.Clear;
cboUsers.InitLongList(User.Name);
for i := 0 to cboUsers.Items.Count - 1 do
if StrToInt64Def(Piece(cboUsers.Items[i], '^', 1), 0) = User.DUZ then
begin
cboUsers.ItemIndex := i;
break;
end;
end;
if cboUsers.ItemIndex > -1 then cboUsersClick(self);
lstTestGroups.SetFocus;
end;
procedure TfrmLabTestGroups.cboTestsChange(Sender: TObject);
begin
cmdAddTest.Enabled := cboTests.ItemIndex > -1;
end;
procedure TfrmLabTestGroups.cboTestsEnter(Sender: TObject);
begin
cmdAddTest.Default := true;
end;
procedure TfrmLabTestGroups.cboTestsExit(Sender: TObject);
begin
cmdAddTest.Default := false;
end;
procedure TfrmLabTestGroups.cmdAddTestClick(Sender: TObject);
begin
AddTests(ATest(cboTests.ItemIEN));
end;
procedure TfrmLabTestGroups.pnlUpButtonEnter(Sender: TObject);
begin
pnlUpButton.BevelOuter := bvLowered;
end;
procedure TfrmLabTestGroups.pnlUpButtonExit(Sender: TObject);
begin
pnlUpButton.BevelOuter := bvNone;
end;
procedure TfrmLabTestGroups.pnlDownButtonEnter(Sender: TObject);
begin
pnlDownButton.BevelOuter := bvLowered;
end;
procedure TfrmLabTestGroups.pnlDownButtonExit(Sender: TObject);
begin
pnlDownButton.BevelOuter := bvNone;
end;
procedure TfrmLabTestGroups.pnlUpButtonResize(Sender: TObject);
begin
cmdUp.Width := pnlUpButton.Width;
end;
procedure TfrmLabTestGroups.pnlDownButtonResize(Sender: TObject);
begin
cmdDown.Width := pnlDownButton.Width;
end;
end.