| [460] | 1 | unit fGraphProfiles;
 | 
|---|
 | 2 | 
 | 
|---|
 | 3 | interface
 | 
|---|
 | 4 | 
 | 
|---|
 | 5 | uses
 | 
|---|
 | 6 |   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 | 
|---|
 | 7 |   ComCtrls, StdCtrls, ExtCtrls, CheckLst, ORCtrls, ORFn, uGraphs, uCore;
 | 
|---|
 | 8 | 
 | 
|---|
 | 9 | type
 | 
|---|
 | 10 |   TfrmGraphProfiles = class(TForm)
 | 
|---|
 | 11 |     btnAdd: TButton;
 | 
|---|
 | 12 |     btnAddAll: TButton;
 | 
|---|
 | 13 |     btnClear: TButton;
 | 
|---|
 | 14 |     btnClose: TButton;
 | 
|---|
 | 15 |     btnDelete: TButton;
 | 
|---|
 | 16 |     btnRemoveAll: TButton;
 | 
|---|
 | 17 |     btnRemoveOne: TButton;
 | 
|---|
 | 18 |     btnRename: TButton;
 | 
|---|
 | 19 |     btnSave: TButton;
 | 
|---|
 | 20 |     btnSavePublic: TButton;
 | 
|---|
 | 21 |     bvlBase: TBevel;
 | 
|---|
 | 22 |     cboAllItems: TORComboBox;
 | 
|---|
 | 23 |     lblApply: TLabel;
 | 
|---|
 | 24 |     lblDisplay: TLabel;
 | 
|---|
 | 25 |     lblEditInfo: TLabel;
 | 
|---|
 | 26 |     lblEditInfo1: TLabel;
 | 
|---|
 | 27 |     lblSelectandDefine: TLabel;
 | 
|---|
 | 28 |     lblSelection: TLabel;
 | 
|---|
 | 29 |     lblSelectionInfo: TLabel;
 | 
|---|
 | 30 |     lblSource: TLabel;
 | 
|---|
 | 31 |     lstActualItems: TORListBox;
 | 
|---|
 | 32 |     lstDrugClass: TListBox;
 | 
|---|
 | 33 |     lstItemsDisplayed: TORListBox;
 | 
|---|
 | 34 |     lstItemsTopSelection: TORListBox;
 | 
|---|
 | 35 |     lstScratch: TListBox;
 | 
|---|
 | 36 |     lstSource: TORListBox;
 | 
|---|
 | 37 |     lstTests: TListBox;
 | 
|---|
 | 38 |     pnlApply: TPanel;
 | 
|---|
 | 39 |     pnlSource: TPanel;
 | 
|---|
 | 40 |     pnlTempData: TPanel;
 | 
|---|
 | 41 |     radSourceAll: TRadioButton;
 | 
|---|
 | 42 |     radSourcePat: TRadioButton;
 | 
|---|
 | 43 |     radTop: TRadioButton;
 | 
|---|
 | 44 |     radBottom: TRadioButton;
 | 
|---|
 | 45 |     radBoth: TRadioButton;
 | 
|---|
 | 46 |     radNeither: TRadioButton;
 | 
|---|
 | 47 |     lblSave: TLabel;
 | 
|---|
 | 48 |     lblClose: TLabel;
 | 
|---|
 | 49 |     procedure FormCreate(Sender: TObject);
 | 
|---|
 | 50 |     procedure FormShow(Sender: TObject);
 | 
|---|
 | 51 |     procedure FormClose(Sender: TObject; var Action: TCloseAction);
 | 
|---|
 | 52 | 
 | 
|---|
 | 53 |     procedure btnClearClick(Sender: TObject);
 | 
|---|
 | 54 |     procedure btnDeleteClick(Sender: TObject);
 | 
|---|
 | 55 |     procedure btnCloseClick(Sender: TObject);
 | 
|---|
 | 56 |     procedure btnRemoveClick(Sender: TObject);
 | 
|---|
 | 57 |     procedure btnRemoveAllClick(Sender: TObject);
 | 
|---|
 | 58 |     procedure btnRemoveOneClick(Sender: TObject);
 | 
|---|
 | 59 |     procedure btnRenameClick(Sender: TObject);
 | 
|---|
 | 60 |     procedure btnSaveClick(Sender: TObject);
 | 
|---|
 | 61 | 
 | 
|---|
 | 62 |     procedure radSourceAllClick(Sender: TObject);
 | 
|---|
 | 63 | 
 | 
|---|
 | 64 |     procedure cboAllItemsClick(Sender: TObject);
 | 
|---|
 | 65 |     procedure cboAllItemsChange(Sender: TObject);
 | 
|---|
 | 66 |     procedure cboAllItemsNeedData(Sender: TObject; const StartFrom: String;
 | 
|---|
 | 67 |       Direction, InsertAt: Integer);
 | 
|---|
 | 68 |     procedure lstItemsDisplayedChange(Sender: TObject);
 | 
|---|
 | 69 |     procedure lstItemsDisplayedDblClick(Sender: TObject);
 | 
|---|
 | 70 |     procedure lstSourceChange(Sender: TObject);
 | 
|---|
 | 71 |     procedure lstSourceDblClick(Sender: TObject);
 | 
|---|
 | 72 | 
 | 
|---|
 | 73 |     procedure AddToList(aItem: string; aListBox: TORListBox);
 | 
|---|
 | 74 |     procedure ArrangeList(aCheckFile, aCheckItem, aItem: string;
 | 
|---|
 | 75 |       aListBox: TORListBox; var addtolist: boolean);
 | 
|---|
 | 76 |     procedure AssignHints;
 | 
|---|
 | 77 |     procedure AssignProfile(aList: TStrings; aProfile: string);
 | 
|---|
 | 78 |     procedure CheckPublic;
 | 
|---|
 | 79 |     procedure FillSource;
 | 
|---|
 | 80 | 
 | 
|---|
 | 81 |     function ProfileExists(aName: string; aType: integer): boolean;
 | 
|---|
 | 82 |   private
 | 
|---|
 | 83 |     { Private declarations }
 | 
|---|
 | 84 |     FHintPauseTime: integer;
 | 
|---|
 | 85 |     FPublicEditor: boolean;
 | 
|---|
 | 86 |     procedure CheckToClear;
 | 
|---|
 | 87 |     procedure QualifierDelete(line: string);
 | 
|---|
 | 88 |     procedure wmNCLButtonDown(var Msg: TWMNCLButtonDown); message WM_NCLBUTTONDOWN;
 | 
|---|
 | 89 |   public
 | 
|---|
 | 90 |     { Public declarations }
 | 
|---|
 | 91 |   end;
 | 
|---|
 | 92 | 
 | 
|---|
 | 93 | var
 | 
|---|
 | 94 |   frmGraphProfiles: TfrmGraphProfiles;
 | 
|---|
 | 95 | 
 | 
|---|
 | 96 | procedure DialogOptionsGraphProfiles(topvalue, leftvalue, fontsize: integer;
 | 
|---|
 | 97 |   var actiontype: boolean);
 | 
|---|
 | 98 | procedure DialogGraphProfiles(fontsize: integer;  var actionOK: boolean;
 | 
|---|
 | 99 |   var checkaction: boolean; aGraphSetting: TGraphSetting;
 | 
|---|
 | 100 |   var aProfname, aProfilestring, aSection: string;
 | 
|---|
 | 101 |   const PatientDFN: string; var aCounter: integer;
 | 
|---|
 | 102 |   aSelections: string);
 | 
|---|
 | 103 | 
 | 
|---|
 | 104 | implementation
 | 
|---|
 | 105 | 
 | 
|---|
 | 106 | {$R *.DFM}
 | 
|---|
 | 107 | 
 | 
|---|
 | 108 | uses
 | 
|---|
 | 109 |   rGraphs;
 | 
|---|
 | 110 | 
 | 
|---|
 | 111 | procedure DialogOptionsGraphProfiles(topvalue, leftvalue, fontsize: integer;
 | 
|---|
 | 112 |   var actiontype: boolean);
 | 
|---|
 | 113 | // create the form and make it modal, return an action
 | 
|---|
 | 114 | var
 | 
|---|
 | 115 |   FGraphSetting: TGraphSetting;
 | 
|---|
 | 116 |   aList, AllTypes: TStrings;
 | 
|---|
 | 117 |   dfntype, listline, settings, settings1, t1, t2: string;
 | 
|---|
 | 118 |   actionOK, checkaction: boolean;
 | 
|---|
 | 119 |   counter, i: integer;
 | 
|---|
 | 120 |   aSelections, profile, profilestring, section: string;
 | 
|---|
 | 121 | begin
 | 
|---|
 | 122 |   aList := TStringList.Create;
 | 
|---|
 | 123 |   FastAssign(rpcGetGraphSettings, aList);
 | 
|---|
 | 124 |   if aList.Count < 1 then
 | 
|---|
 | 125 |   begin
 | 
|---|
 | 126 |     showmessage('CPRS is not configured for graphing.');
 | 
|---|
 | 127 |     aList.Free;
 | 
|---|
 | 128 |     exit;
 | 
|---|
 | 129 |   end;
 | 
|---|
 | 130 |   t1 := aList[0]; t2 := aList[1];   // t1 are personal, t2 public settings
 | 
|---|
 | 131 |   if length(t1) > 0 then settings := t1
 | 
|---|
 | 132 |   else settings := t2;
 | 
|---|
 | 133 |   SetPiece(settings, '|', 8, Piece(t2, '|', 8));
 | 
|---|
 | 134 |   settings1 := Piece(settings, '|', 1);
 | 
|---|
 | 135 |   Alltypes := TStringList.Create;
 | 
|---|
 | 136 |   FastAssign(rpcGetTypes('0', true), AllTypes);
 | 
|---|
 | 137 |   for i := 0 to AllTypes.Count - 1 do
 | 
|---|
 | 138 |   begin
 | 
|---|
 | 139 |     listline := AllTypes[i];
 | 
|---|
 | 140 |     dfntype := UpperCase(Piece(listline, '^', 1));
 | 
|---|
 | 141 |     SetPiece(listline, '^', 1, dfntype);
 | 
|---|
 | 142 |     AllTypes[i] := listline;
 | 
|---|
 | 143 |   end;
 | 
|---|
 | 144 |   FGraphSetting := GraphSettingsInit(settings);
 | 
|---|
 | 145 |   checkaction := false;
 | 
|---|
 | 146 |   actionOK := false;
 | 
|---|
 | 147 |   profile := '*';
 | 
|---|
 | 148 |   counter := BIG_NUMBER;
 | 
|---|
 | 149 |   aSelections :='';
 | 
|---|
 | 150 |   DialogGraphProfiles(fontsize, actionOK, checkaction, FGraphSetting,
 | 
|---|
 | 151 |     profile, profilestring, section, Patient.DFN, counter, aSelections);
 | 
|---|
 | 152 |   FGraphSetting.Free;
 | 
|---|
 | 153 |   aList.Free;
 | 
|---|
 | 154 | end;
 | 
|---|
 | 155 | 
 | 
|---|
 | 156 | procedure DialogGraphProfiles(fontsize: integer;  var actionOK: boolean;
 | 
|---|
 | 157 |   var checkaction: boolean; aGraphSetting: TGraphSetting;
 | 
|---|
 | 158 |   var aProfname, aProfilestring, aSection: string;
 | 
|---|
 | 159 |   const PatientDFN: string; var aCounter: integer;
 | 
|---|
 | 160 |   aSelections: string);
 | 
|---|
 | 161 | var
 | 
|---|
 | 162 |   i: integer;
 | 
|---|
 | 163 |   counter, profile, profileitem, profiletype: string;
 | 
|---|
 | 164 |   frmGraphProfiles: TfrmGraphProfiles;
 | 
|---|
 | 165 | begin
 | 
|---|
 | 166 |   frmGraphProfiles := TfrmGraphProfiles.Create(Application);
 | 
|---|
 | 167 |   try
 | 
|---|
 | 168 |     with frmGraphProfiles do
 | 
|---|
 | 169 |     begin
 | 
|---|
 | 170 |       lblSave.Hint := aProfname;
 | 
|---|
 | 171 |       lblClose.Hint := PatientDFN;
 | 
|---|
 | 172 |       if aCounter = BIG_NUMBER then
 | 
|---|
 | 173 |       begin
 | 
|---|
 | 174 |         pnlApply.Visible := false;
 | 
|---|
 | 175 |         frmGraphProfiles.Caption := 'Define Views';
 | 
|---|
 | 176 |       end
 | 
|---|
 | 177 |       else
 | 
|---|
 | 178 |       begin
 | 
|---|
 | 179 |         pnlApply.Visible := true;
 | 
|---|
 | 180 |         frmGraphProfiles.Caption := 'Select Items and Define Views';
 | 
|---|
 | 181 |       end;
 | 
|---|
 | 182 |       if length(aSelections) > 0 then
 | 
|---|
 | 183 |         lstSource.Items.Insert(0, '-3^<current selections>^' + aSelections);
 | 
|---|
 | 184 |       ResizeAnchoredFormToFont(frmGraphProfiles);
 | 
|---|
 | 185 |       ShowModal;
 | 
|---|
 | 186 |       actionOK := (btnClose.Tag = 1);
 | 
|---|
 | 187 |       aProfname := '';
 | 
|---|
 | 188 |       if actionOK then
 | 
|---|
 | 189 |       begin
 | 
|---|
 | 190 |         aProfname := lblSave.Hint;
 | 
|---|
 | 191 |         if radTop.Checked then aSection := 'top'
 | 
|---|
 | 192 |         else if radBottom.Checked then aSection := 'bottom'
 | 
|---|
 | 193 |         else if radBoth.Checked then aSection := 'both'
 | 
|---|
 | 194 |         else aSection := 'neither';
 | 
|---|
 | 195 |         profile := '';
 | 
|---|
 | 196 |         with lstItemsDisplayed do
 | 
|---|
 | 197 |         for i := 0 to Items.Count - 1 do
 | 
|---|
 | 198 |         begin
 | 
|---|
 | 199 |           profiletype := Piece(Items[i], '^', 1);
 | 
|---|
 | 200 |           profileitem := Piece(Items[i], '^', 2);
 | 
|---|
 | 201 |           profile := profile + profiletype + '~' + profileitem + '~|';
 | 
|---|
 | 202 |         end;
 | 
|---|
 | 203 |         aCounter := aCounter + 1;
 | 
|---|
 | 204 |         counter := inttostr(aCounter);
 | 
|---|
 | 205 |         aProfileString := '^<view' + counter + '>^' + profile;
 | 
|---|
 | 206 |         with aGraphSetting do
 | 
|---|
 | 207 |         begin
 | 
|---|
 | 208 |           lstActualItems.Items.Clear;
 | 
|---|
 | 209 |           with lstItemsDisplayed do
 | 
|---|
 | 210 |           for i := 0 to Items.Count - 1 do
 | 
|---|
 | 211 |           begin
 | 
|---|
 | 212 |             lstActualItems.Items.Add(Piece(Items[i], '<', 1));  //get rid of <any>
 | 
|---|
 | 213 |           end;
 | 
|---|
 | 214 |           ItemsForDisplay := lstActualItems.Items;
 | 
|---|
 | 215 |         end;
 | 
|---|
 | 216 |      end;
 | 
|---|
 | 217 |     end;
 | 
|---|
 | 218 |   finally
 | 
|---|
 | 219 |     frmGraphProfiles.Release;
 | 
|---|
 | 220 |   end;
 | 
|---|
 | 221 | end;
 | 
|---|
 | 222 | 
 | 
|---|
 | 223 | procedure TfrmGraphProfiles.FormCreate(Sender: TObject);
 | 
|---|
 | 224 | begin
 | 
|---|
 | 225 |   FillSource;
 | 
|---|
 | 226 |   FPublicEditor := rpcPublicEdit;
 | 
|---|
 | 227 | end;
 | 
|---|
 | 228 | 
 | 
|---|
 | 229 | procedure TfrmGraphProfiles.FormShow(Sender: TObject);
 | 
|---|
 | 230 | begin
 | 
|---|
 | 231 |   cboAllItems.Visible := radSourceAll.Checked;
 | 
|---|
 | 232 |   FHintPauseTime := Application.HintHidePause;
 | 
|---|
 | 233 |   Application.HintHidePause := 9000; // uses a longer hint pause time
 | 
|---|
 | 234 | end;
 | 
|---|
 | 235 | 
 | 
|---|
 | 236 | procedure TfrmGraphProfiles.btnClearClick(Sender: TObject);
 | 
|---|
 | 237 | begin
 | 
|---|
 | 238 |   lstItemsDisplayed.Items.Clear;
 | 
|---|
 | 239 |   lstItemsTopSelection.Items.Clear;
 | 
|---|
 | 240 |   cboAllItems.Items.Clear;
 | 
|---|
 | 241 |   cboAllItems.Text :='';
 | 
|---|
 | 242 |   lstItemsDisplayedChange(self);
 | 
|---|
 | 243 |   cboAllItemsChange(self);
 | 
|---|
 | 244 |   lstSource.ItemIndex := -1; 
 | 
|---|
 | 245 | end;
 | 
|---|
 | 246 | 
 | 
|---|
 | 247 | procedure TfrmGraphProfiles.btnDeleteClick(Sender: TObject);
 | 
|---|
 | 248 | var
 | 
|---|
 | 249 |   publicview: boolean;
 | 
|---|
 | 250 |   info, profilename, profname, proftype: string;
 | 
|---|
 | 251 | begin
 | 
|---|
 | 252 |   if lstSource.ItemIndex < 0 then
 | 
|---|
 | 253 |   begin
 | 
|---|
 | 254 |     showmessage('You must select a valid View for deletion.');
 | 
|---|
 | 255 |     exit;
 | 
|---|
 | 256 |   end;
 | 
|---|
 | 257 |   publicview := false;
 | 
|---|
 | 258 |   profilename := '';
 | 
|---|
 | 259 |   info := lstSource.Items[lstSource.ItemIndex];
 | 
|---|
 | 260 |   proftype := Piece(info, '^', 1);
 | 
|---|
 | 261 |   profname := Piece(info, '^', 2);
 | 
|---|
 | 262 |   if proftype = '-1' then
 | 
|---|
 | 263 |     profilename := profname
 | 
|---|
 | 264 |   else if (proftype = '-2') and FPublicEditor then
 | 
|---|
 | 265 |   begin
 | 
|---|
 | 266 |     profilename := profname;
 | 
|---|
 | 267 |     publicview := true;
 | 
|---|
 | 268 |   end
 | 
|---|
 | 269 |   else
 | 
|---|
 | 270 |   begin
 | 
|---|
 | 271 |     showmessage('You must select a valid View for deletion.');
 | 
|---|
 | 272 |     exit;
 | 
|---|
 | 273 |   end;
 | 
|---|
 | 274 |   if publicview then
 | 
|---|
 | 275 |   begin
 | 
|---|
 | 276 |     if MessageDlg('This is Public and may be used by others.'
 | 
|---|
 | 277 |       + #13 + 'Delete ' + profilename + '?', mtConfirmation,
 | 
|---|
 | 278 |       [mbYes, mbNo], 0) = mrYes then
 | 
|---|
 | 279 |     begin
 | 
|---|
 | 280 |       rpcDeleteGraphProfile(UpperCase(profilename), '1');
 | 
|---|
 | 281 |       btnClose.Tag := 1;
 | 
|---|
 | 282 |       MessageDlg('The public view, ' + profilename + ' has been deleted.',
 | 
|---|
 | 283 |       mtInformation, [mbOk], 0);
 | 
|---|
 | 284 |     end
 | 
|---|
 | 285 |     else exit;
 | 
|---|
 | 286 |   end
 | 
|---|
 | 287 |   else
 | 
|---|
 | 288 |   begin
 | 
|---|
 | 289 |     if MessageDlg('Delete ' + profilename + '?', mtConfirmation,
 | 
|---|
 | 290 |       [mbYes, mbNo], 0) = mrYes then
 | 
|---|
 | 291 |     begin
 | 
|---|
 | 292 |       rpcDeleteGraphProfile(UpperCase(profilename), '0');
 | 
|---|
 | 293 |       btnClose.Tag := 1;
 | 
|---|
 | 294 |       MessageDlg('Your personal view, ' + profilename + ' has been deleted.',
 | 
|---|
 | 295 |       mtInformation, [mbOk], 0);
 | 
|---|
 | 296 |     end
 | 
|---|
 | 297 |     else exit;
 | 
|---|
 | 298 |   end;
 | 
|---|
 | 299 |   btnClearClick(self);
 | 
|---|
 | 300 |   lstItemsDisplayed.Items.Clear;
 | 
|---|
 | 301 |   lstItemsTopSelection.Items.Clear;
 | 
|---|
 | 302 |   cboAllItems.Items.Clear;
 | 
|---|
 | 303 |   cboAllItems.Text :='';
 | 
|---|
 | 304 |   FormCreate(self);
 | 
|---|
 | 305 |   lstItemsDisplayedChange(self);
 | 
|---|
 | 306 |   btnDelete.Enabled := false;
 | 
|---|
 | 307 |   btnRename.Enabled := false;
 | 
|---|
 | 308 | end;
 | 
|---|
 | 309 | 
 | 
|---|
 | 310 | procedure TfrmGraphProfiles.btnRenameClick(Sender: TObject);
 | 
|---|
 | 311 | var
 | 
|---|
 | 312 |   profentered, publicview: boolean;
 | 
|---|
 | 313 |   i, match: integer;
 | 
|---|
 | 314 |   aName, aType, info, infotitle: string;
 | 
|---|
 | 315 |   newprofilename, profilename, profname, proftype: string;
 | 
|---|
 | 316 | begin
 | 
|---|
 | 317 |   if lstSource.ItemIndex < 0 then
 | 
|---|
 | 318 |   begin
 | 
|---|
 | 319 |     showmessage('You must select a valid View to rename.');
 | 
|---|
 | 320 |     exit;
 | 
|---|
 | 321 |   end;
 | 
|---|
 | 322 |   publicview := false;
 | 
|---|
 | 323 |   profilename := '';
 | 
|---|
 | 324 |   info := lstSource.Items[lstSource.ItemIndex];
 | 
|---|
 | 325 |   proftype := Piece(info, '^', 1);
 | 
|---|
 | 326 |   profname := Piece(info, '^', 2);
 | 
|---|
 | 327 |   if proftype = '-1' then
 | 
|---|
 | 328 |     profilename := profname
 | 
|---|
 | 329 |   else if (proftype = '-2') and FPublicEditor then
 | 
|---|
 | 330 |   begin
 | 
|---|
 | 331 |     profilename := profname;
 | 
|---|
 | 332 |     publicview := true;
 | 
|---|
 | 333 |   end
 | 
|---|
 | 334 |   else
 | 
|---|
 | 335 |   begin
 | 
|---|
 | 336 |     showmessage('You must select a valid View to rename.');
 | 
|---|
 | 337 |   end;
 | 
|---|
 | 338 |   btnRemoveAllClick(self);
 | 
|---|
 | 339 |   lstSourceDblClick(self);
 | 
|---|
 | 340 |   if publicview then
 | 
|---|
 | 341 |   begin
 | 
|---|
 | 342 |     infotitle := 'Rename this Public View';
 | 
|---|
 | 343 |     info := 'This is Public and may be used by others.'
 | 
|---|
 | 344 |       + #13 + 'Enter a new name for ' + profilename + '.'
 | 
|---|
 | 345 |   end
 | 
|---|
 | 346 |   else
 | 
|---|
 | 347 |   begin
 | 
|---|
 | 348 |     infotitle := 'Rename your Personal View';
 | 
|---|
 | 349 |     info := 'Enter a new name for ' + profilename + '.'
 | 
|---|
 | 350 |   end;
 | 
|---|
 | 351 |   profentered := InputQuery(infotitle, info, newprofilename);
 | 
|---|
 | 352 |   if not profentered then exit;
 | 
|---|
 | 353 |   if newprofilename = '' then exit;
 | 
|---|
 | 354 |   info := '';
 | 
|---|
 | 355 |   if not ProfileExists(newprofilename, -2) and publicview then
 | 
|---|
 | 356 |     info := 'The Public View, ' + profilename + ', will be changed to '
 | 
|---|
 | 357 |       + newprofilename + #13 + 'Is this OK?'
 | 
|---|
 | 358 |   else if not ProfileExists(newprofilename, -1) then
 | 
|---|
 | 359 |     info := 'Your Personal View, ' + profilename + ', will be changed to '
 | 
|---|
 | 360 |       + newprofilename + #13 + 'Is this OK?';
 | 
|---|
 | 361 |   if length(info) > 0 then
 | 
|---|
 | 362 |   begin
 | 
|---|
 | 363 |     if MessageDlg(info, mtConfirmation, [mbYes, mbNo], 0) <> mrYes then exit;
 | 
|---|
 | 364 |     if publicview then
 | 
|---|
 | 365 |     begin
 | 
|---|
 | 366 |       FastAssign(rpcGetGraphProfiles(UpperCase(profilename), '1', 1), lstScratch.Items);
 | 
|---|
 | 367 |       rpcDeleteGraphProfile(UpperCase(profilename), '1');
 | 
|---|
 | 368 |       rpcSetGraphProfile(newprofilename, '1', lstScratch.Items);
 | 
|---|
 | 369 |       btnClose.Tag := 1;
 | 
|---|
 | 370 |       proftype := '-2';
 | 
|---|
 | 371 |     end
 | 
|---|
 | 372 |     else
 | 
|---|
 | 373 |     begin
 | 
|---|
 | 374 |       FastAssign(rpcGetGraphProfiles(UpperCase(profilename), '0', 1), lstScratch.Items);
 | 
|---|
 | 375 |       rpcDeleteGraphProfile(UpperCase(profilename), '0');
 | 
|---|
 | 376 |       rpcSetGraphProfile(newprofilename, '0', lstScratch.Items);
 | 
|---|
 | 377 |       btnClose.Tag := 1;
 | 
|---|
 | 378 |       proftype := '-1';
 | 
|---|
 | 379 |     end;
 | 
|---|
 | 380 |   end;
 | 
|---|
 | 381 |   if length(newprofilename) > 0 then
 | 
|---|
 | 382 |     lblSave.Hint := newprofilename;
 | 
|---|
 | 383 |   btnClearClick(self);
 | 
|---|
 | 384 |   lstScratch.Items.Clear;
 | 
|---|
 | 385 |   lstSource.Items.Clear;
 | 
|---|
 | 386 |   FormCreate(btnSave);
 | 
|---|
 | 387 |   match := -1;
 | 
|---|
 | 388 |   profilename := UpperCase(newprofilename);
 | 
|---|
 | 389 |   for i := lstSource.Items.Count - 1 downto 0 do
 | 
|---|
 | 390 |   begin
 | 
|---|
 | 391 |     info := lstSource.Items[i];
 | 
|---|
 | 392 |     aType := Piece(info, '^', 1);
 | 
|---|
 | 393 |     aName := Piece(info, '^', 2);
 | 
|---|
 | 394 |     if (UpperCase(aName) = newprofilename) and (aType = proftype) then
 | 
|---|
 | 395 |     begin
 | 
|---|
 | 396 |       match := i;
 | 
|---|
 | 397 |       break;
 | 
|---|
 | 398 |     end;
 | 
|---|
 | 399 |   end;
 | 
|---|
 | 400 |   if match = -1 then exit;
 | 
|---|
 | 401 |   lstSource.ItemIndex := match;
 | 
|---|
 | 402 |   lstSourceChange(self);
 | 
|---|
 | 403 | end;
 | 
|---|
 | 404 | 
 | 
|---|
 | 405 | procedure TfrmGraphProfiles.btnCloseClick(Sender: TObject);
 | 
|---|
 | 406 | begin
 | 
|---|
 | 407 |   if lstItemsDisplayed.Items.Count > 0 then
 | 
|---|
 | 408 |     btnClose.Tag := 1;
 | 
|---|
 | 409 |   Close;
 | 
|---|
 | 410 | end;
 | 
|---|
 | 411 | 
 | 
|---|
 | 412 | procedure TfrmGraphProfiles.btnRemoveClick(Sender: TObject);
 | 
|---|
 | 413 | begin
 | 
|---|
 | 414 |   if lstItemsDisplayed.ItemIndex < 0 then exit;
 | 
|---|
 | 415 |   lstItemsDisplayed.Items.Delete(lstItemsDisplayed.ItemIndex);
 | 
|---|
 | 416 |   CheckToClear;
 | 
|---|
 | 417 | end;
 | 
|---|
 | 418 | 
 | 
|---|
 | 419 | procedure TfrmGraphProfiles.btnRemoveAllClick(Sender: TObject);
 | 
|---|
 | 420 | begin
 | 
|---|
 | 421 |   lstItemsDisplayed.Clear;
 | 
|---|
 | 422 |   lstItemsDisplayedChange(self);
 | 
|---|
 | 423 |   CheckToClear;
 | 
|---|
 | 424 | end;
 | 
|---|
 | 425 | 
 | 
|---|
 | 426 | procedure TfrmGraphProfiles.btnRemoveOneClick(Sender: TObject);
 | 
|---|
 | 427 | begin
 | 
|---|
 | 428 |   lstItemsDisplayedDblClick(self);
 | 
|---|
 | 429 |   CheckToClear;
 | 
|---|
 | 430 | end;
 | 
|---|
 | 431 | 
 | 
|---|
 | 432 | procedure TfrmGraphProfiles.CheckToClear;
 | 
|---|
 | 433 | begin
 | 
|---|
 | 434 |   if cboAllItems.Visible and (cboAllItems.Items.Count = 0) then
 | 
|---|
 | 435 |    lstSource.ItemIndex := -1
 | 
|---|
 | 436 |   else if lstItemsTopSelection.Visible and (lstItemsTopSelection.Items.Count = 0) then
 | 
|---|
 | 437 |    lstSource.ItemIndex := -1;
 | 
|---|
 | 438 |   if lstSource.ItemIndex = -1 then
 | 
|---|
 | 439 |   begin
 | 
|---|
 | 440 |     btnAdd.Enabled := false;
 | 
|---|
 | 441 |     btnAddAll.Enabled := false;
 | 
|---|
 | 442 |   end;
 | 
|---|
 | 443 | end;
 | 
|---|
 | 444 | 
 | 
|---|
 | 445 | procedure TfrmGraphProfiles.btnSaveClick(Sender: TObject);
 | 
|---|
 | 446 | var
 | 
|---|
 | 447 |   profentered, puplicedit: boolean;
 | 
|---|
 | 448 |   i, j, match: integer;
 | 
|---|
 | 449 |   aName, aType, info, infotitle, profile, profileitem, profilename, profiletype, profname, proftype: string;
 | 
|---|
 | 450 |   aList: TStrings;
 | 
|---|
 | 451 | begin
 | 
|---|
 | 452 |   puplicedit := Sender = btnSavePublic;
 | 
|---|
 | 453 |   if lstItemsDisplayed.Items.Count < 1 then exit;
 | 
|---|
 | 454 |   profilename := '';
 | 
|---|
 | 455 |   if lstSource.ItemIndex > -1 then
 | 
|---|
 | 456 |   begin
 | 
|---|
 | 457 |     info := lstSource.Items[lstSource.ItemIndex];
 | 
|---|
 | 458 |     proftype := Piece(info, '^', 1);
 | 
|---|
 | 459 |     profname := Piece(info, '^', 2);
 | 
|---|
 | 460 |     profilename := profname;
 | 
|---|
 | 461 |   end;
 | 
|---|
 | 462 |   if puplicedit then
 | 
|---|
 | 463 |   begin
 | 
|---|
 | 464 |     infotitle := 'Save this Public View';
 | 
|---|
 | 465 |     info := 'Save this Public View by entering a name for it.'
 | 
|---|
 | 466 |       + #13 + 'If you are editing a View, enter the View''s name to overwrite it.';
 | 
|---|
 | 467 |   end
 | 
|---|
 | 468 |   else
 | 
|---|
 | 469 |   begin
 | 
|---|
 | 470 |     infotitle := 'Save your Personal View';
 | 
|---|
 | 471 |     info := 'Save your Personal View by entering a name for it.'
 | 
|---|
 | 472 |       + #13 + 'If you are editing a View, enter the View''s name to overwrite it.';
 | 
|---|
 | 473 |   end;
 | 
|---|
 | 474 |   profentered := InputQuery(infotitle, info, profilename);
 | 
|---|
 | 475 |   if not profentered then exit;
 | 
|---|
 | 476 |   if profilename = '' then exit;
 | 
|---|
 | 477 |   if (length(profilename) < 3) or (length(profilename) > 30) then
 | 
|---|
 | 478 |   begin
 | 
|---|
 | 479 |     showmessage('Not accepted - names of views must be 3-30 characters.');
 | 
|---|
 | 480 |     exit;
 | 
|---|
 | 481 |   end;
 | 
|---|
 | 482 |   info := '';
 | 
|---|
 | 483 |   if ProfileExists(profilename, -2) and FPublicEditor and puplicedit then
 | 
|---|
 | 484 |     info := 'The Public View, ' + profilename + ', will be overwritten.'
 | 
|---|
 | 485 |       + #13 + 'Is this OK?'
 | 
|---|
 | 486 |   else if ProfileExists(profilename, -1) and (not puplicedit) then
 | 
|---|
 | 487 |     info := 'Your Personal View, ' + profilename + ', will be overwritten.'
 | 
|---|
 | 488 |       + #13 + 'Is this OK?';
 | 
|---|
 | 489 |   if length(info) > 0 then
 | 
|---|
 | 490 |     if MessageDlg(info, mtConfirmation, [mbYes, mbNo], 0) <> mrYes then exit;
 | 
|---|
 | 491 |   aList := TStringList.Create;
 | 
|---|
 | 492 |   profile := '';
 | 
|---|
 | 493 |   aList.Clear;
 | 
|---|
 | 494 |   j := 1;
 | 
|---|
 | 495 |   with lstItemsDisplayed do
 | 
|---|
 | 496 |   for i := 0 to Items.Count - 1 do
 | 
|---|
 | 497 |   begin
 | 
|---|
 | 498 |     profiletype := Piece(Items[i], '^', 1);
 | 
|---|
 | 499 |     profileitem := Piece(Items[i], '^', 2);
 | 
|---|
 | 500 |     profile := profile + profiletype + '~' + profileitem + '~|';
 | 
|---|
 | 501 |     j := j +1;
 | 
|---|
 | 502 |     if (j mod 10) = 0 then
 | 
|---|
 | 503 |       if length(profile) > 0 then
 | 
|---|
 | 504 |       begin
 | 
|---|
 | 505 |         aList.Add(UpperCase(profile));
 | 
|---|
 | 506 |         profile := '';
 | 
|---|
 | 507 |       end;
 | 
|---|
 | 508 |   end;
 | 
|---|
 | 509 |   if length(profile) > 0 then
 | 
|---|
 | 510 |   begin
 | 
|---|
 | 511 |     aList.Add(UpperCase(profile));
 | 
|---|
 | 512 |     profile := '';
 | 
|---|
 | 513 |   end;
 | 
|---|
 | 514 |   if puplicedit then
 | 
|---|
 | 515 |   begin
 | 
|---|
 | 516 |     proftype := '-2';
 | 
|---|
 | 517 |     rpcSetGraphProfile(profilename, '1', aList);
 | 
|---|
 | 518 |     btnClose.Tag := 1;
 | 
|---|
 | 519 |   end
 | 
|---|
 | 520 |   else
 | 
|---|
 | 521 |   begin
 | 
|---|
 | 522 |     proftype := '-1';
 | 
|---|
 | 523 |     rpcSetGraphProfile(profilename, '0', aList);
 | 
|---|
 | 524 |     btnClose.Tag := 1;
 | 
|---|
 | 525 |   end;
 | 
|---|
 | 526 |   if length(profilename) > 0 then
 | 
|---|
 | 527 |     lblSave.Hint := profilename;
 | 
|---|
 | 528 |   btnClearClick(self);
 | 
|---|
 | 529 |   lstScratch.Items.Clear;
 | 
|---|
 | 530 |   lstSource.Items.Clear;
 | 
|---|
 | 531 |   FormCreate(btnSave);
 | 
|---|
 | 532 |   match := -1;
 | 
|---|
 | 533 |   profilename := UpperCase(profilename);
 | 
|---|
 | 534 |   for i := lstSource.Items.Count - 1 downto 0 do
 | 
|---|
 | 535 |   begin
 | 
|---|
 | 536 |     info := lstSource.Items[i];
 | 
|---|
 | 537 |     aType := Piece(info, '^', 1);
 | 
|---|
 | 538 |     aName := Piece(info, '^', 2);
 | 
|---|
 | 539 |     if (UpperCase(aName) = profilename) and (aType = proftype) then
 | 
|---|
 | 540 |     begin
 | 
|---|
 | 541 |       match := i;
 | 
|---|
 | 542 |       break;
 | 
|---|
 | 543 |     end;
 | 
|---|
 | 544 |   end;
 | 
|---|
 | 545 |   aList.Free;
 | 
|---|
 | 546 |   if match = -1 then exit;
 | 
|---|
 | 547 |   lstSource.ItemIndex := match;
 | 
|---|
 | 548 |   lstSourceChange(self);
 | 
|---|
 | 549 | end;
 | 
|---|
 | 550 | 
 | 
|---|
 | 551 | procedure TfrmGraphProfiles.CheckPublic;
 | 
|---|
 | 552 | var
 | 
|---|
 | 553 |   typedata: string;
 | 
|---|
 | 554 | begin
 | 
|---|
 | 555 |   if lstSource.ItemIndex = -1 then
 | 
|---|
 | 556 |   begin
 | 
|---|
 | 557 |     btnDelete.Enabled := false;
 | 
|---|
 | 558 |     btnRename.Enabled := false;
 | 
|---|
 | 559 |     exit;
 | 
|---|
 | 560 |   end;
 | 
|---|
 | 561 |   typedata :=  lstSource.Items[lstSource.ItemIndex];
 | 
|---|
 | 562 |   btnDelete.Enabled := (Piece(typedata, '^', 1) = '-1')
 | 
|---|
 | 563 |                     or ((Piece(typedata, '^', 1) = '-2') and FPublicEditor);
 | 
|---|
 | 564 |   btnRename.Enabled := btnDelete.Enabled;
 | 
|---|
 | 565 | end;
 | 
|---|
 | 566 | 
 | 
|---|
 | 567 | procedure TfrmGraphProfiles.radSourceAllClick(Sender: TObject);
 | 
|---|
 | 568 | var
 | 
|---|
 | 569 |   dfn: string;
 | 
|---|
 | 570 | begin
 | 
|---|
 | 571 |   if Sender = radSourceAll then
 | 
|---|
 | 572 |   begin
 | 
|---|
 | 573 |     lstItemsTopSelection.Visible := false;
 | 
|---|
 | 574 |     cboAllItems.Visible := true;
 | 
|---|
 | 575 |   end
 | 
|---|
 | 576 |   else
 | 
|---|
 | 577 |   begin
 | 
|---|
 | 578 |     if radSourcePat.Tag = 0 then
 | 
|---|
 | 579 |     begin
 | 
|---|
 | 580 |       dfn := lblClose.Hint;
 | 
|---|
 | 581 |       FastAssign(rpcGetAllItems(dfn), lstTests.Items);  //*** using a DFN, get all items
 | 
|---|
 | 582 |       FastAssign(rpcGetItems('50.605', dfn), lstDrugClass.Items);
 | 
|---|
 | 583 |       radSourcePat.Tag := 1;
 | 
|---|
 | 584 |     end;
 | 
|---|
 | 585 |     cboAllItems.Visible := false;
 | 
|---|
 | 586 |     lstItemsTopSelection.Visible := true;
 | 
|---|
 | 587 |   end;
 | 
|---|
 | 588 |   lstSourceChange(self);
 | 
|---|
 | 589 | end;
 | 
|---|
 | 590 | 
 | 
|---|
 | 591 | procedure TfrmGraphProfiles.cboAllItemsClick(Sender: TObject);
 | 
|---|
 | 592 | var
 | 
|---|
 | 593 |   profileselected: boolean;
 | 
|---|
 | 594 |   i: integer;
 | 
|---|
 | 595 |   first, profileitem, selection, subtype: string;
 | 
|---|
 | 596 | begin
 | 
|---|
 | 597 |   if Sender is TButton then
 | 
|---|
 | 598 |   begin
 | 
|---|
 | 599 |     if lstItemsTopSelection.Visible then
 | 
|---|
 | 600 |     begin
 | 
|---|
 | 601 |       if Sender = btnAddAll then
 | 
|---|
 | 602 |         lstItemsTopSelection.ItemIndex := 0;
 | 
|---|
 | 603 |       Sender := lstItemsTopSelection;
 | 
|---|
 | 604 |     end
 | 
|---|
 | 605 |     else
 | 
|---|
 | 606 |     begin
 | 
|---|
 | 607 |       if Sender = btnAddAll then
 | 
|---|
 | 608 |         cboAllItems.ItemIndex := 0;
 | 
|---|
 | 609 |       Sender := cboAllItems;
 | 
|---|
 | 610 |     end;
 | 
|---|
 | 611 |   end;
 | 
|---|
 | 612 |   if Sender is TORListBox then
 | 
|---|
 | 613 |   with (Sender as TORListBox) do
 | 
|---|
 | 614 |   begin
 | 
|---|
 | 615 |     if ItemIndex < 0 then exit;
 | 
|---|
 | 616 |     selection := Items[ItemIndex];
 | 
|---|
 | 617 |     if length(Piece(selection, '_', 2)) > 0 then
 | 
|---|
 | 618 |       selection := Piece(selection, '_', 1) + ' ' + Piece(selection, '_', 2);
 | 
|---|
 | 619 |     first := Piece(selection, '^', 1);
 | 
|---|
 | 620 |     if first = '' then exit;     // line
 | 
|---|
 | 621 |     profileselected := strtointdef(Piece(selection, '^', 2), 0) < 0;
 | 
|---|
 | 622 |     if profileselected then
 | 
|---|
 | 623 |     begin
 | 
|---|
 | 624 |       for i := 2 to Items.Count - 1 do
 | 
|---|
 | 625 |       begin
 | 
|---|
 | 626 |         profileitem := Items[i];
 | 
|---|
 | 627 |         if length(Piece(profileitem, '_', 2)) > 0 then
 | 
|---|
 | 628 |           profileitem := Piece(profileitem, '_', 1) + ' ' + Piece(profileitem, '_', 2);   //*****???? ^
 | 
|---|
 | 629 |         AddToList(profileitem, lstItemsDisplayed);
 | 
|---|
 | 630 |       end;
 | 
|---|
 | 631 |     end
 | 
|---|
 | 632 |     else
 | 
|---|
 | 633 |       AddToList(selection, lstItemsDisplayed);
 | 
|---|
 | 634 |     if ItemIndex = 0 then Clear;        //profile or type <any>
 | 
|---|
 | 635 |     ItemIndex := -1;
 | 
|---|
 | 636 |   end
 | 
|---|
 | 637 |   else if Sender is TORComboBox then
 | 
|---|
 | 638 |   with (Sender as TORComboBox) do
 | 
|---|
 | 639 |   begin
 | 
|---|
 | 640 |     if ItemIndex < 0 then exit;
 | 
|---|
 | 641 |     selection := Items[ItemIndex];
 | 
|---|
 | 642 |     subtype := Piece(Items[0], '^', 3);
 | 
|---|
 | 643 |     subtype := Piece(subtype, ':', 2);
 | 
|---|
 | 644 |     subtype := copy(subtype, 2, length(subtype));
 | 
|---|
 | 645 |     subtype := Piece(subtype, ' ', 1);
 | 
|---|
 | 646 |     if UpperCase(copy(selection, 1, 5)) = '63AP;' then
 | 
|---|
 | 647 |         selection := copy(selection, 1, 4) + '^A;' + copy(selection, 6, 1) + ';'
 | 
|---|
 | 648 |         + Piece(selection, '^', 2) + '^' + subtype + ': ' + Piece(selection, '^', 3)
 | 
|---|
 | 649 |     else if UpperCase(copy(selection, 1, 5)) = '63MI;' then
 | 
|---|
 | 650 |         selection := copy(selection, 1, 4) + '^M;' + copy(selection, 6, 1) + ';'
 | 
|---|
 | 651 |         + Piece(selection, '^', 2) + '^' + subtype + ': ' + Piece(selection, '^', 3);
 | 
|---|
 | 652 |     if length(Piece(selection, '_', 2)) > 0 then
 | 
|---|
 | 653 |       selection := Piece(selection, '_', 1) + ' ' + Piece(selection, '_', 2);
 | 
|---|
 | 654 |     first := Piece(selection, '^', 1);
 | 
|---|
 | 655 |     if first = '' then exit;     // line
 | 
|---|
 | 656 |     profileselected := strtointdef(Piece(selection, '^', 2), 0) < 0;
 | 
|---|
 | 657 |     if profileselected then
 | 
|---|
 | 658 |     begin
 | 
|---|
 | 659 |       for i := 2 to Items.Count - 1 do
 | 
|---|
 | 660 |       begin
 | 
|---|
 | 661 |         profileitem := Items[i];
 | 
|---|
 | 662 |         if length(Piece(profileitem, '_', 2)) > 0 then
 | 
|---|
 | 663 |           profileitem := Piece(profileitem, '_', 1) + ' ' + Piece(profileitem, '_', 2);   //*****???? ^
 | 
|---|
 | 664 |         AddToList(profileitem, lstItemsDisplayed);
 | 
|---|
 | 665 |       end;
 | 
|---|
 | 666 |     end
 | 
|---|
 | 667 |     else
 | 
|---|
 | 668 |       AddToList(selection, lstItemsDisplayed);
 | 
|---|
 | 669 |     if ItemIndex = 0 then Clear;        //profile or type <any>
 | 
|---|
 | 670 |     ItemIndex := -1;
 | 
|---|
 | 671 |   end
 | 
|---|
 | 672 |   else exit;
 | 
|---|
 | 673 |   lstItemsDisplayedChange(self);
 | 
|---|
 | 674 |   CheckToClear;
 | 
|---|
 | 675 | end;
 | 
|---|
 | 676 | 
 | 
|---|
 | 677 | procedure TfrmGraphProfiles.cboAllItemsChange(Sender: TObject);
 | 
|---|
 | 678 | begin
 | 
|---|
 | 679 |  if (Sender is TORListBox) then
 | 
|---|
 | 680 |    btnClear.Enabled := btnSave.Enabled or ((Sender as TORListBox).Items.Count > 0)
 | 
|---|
 | 681 |  else if (Sender is TORComboBox) then
 | 
|---|
 | 682 |    btnClear.Enabled := btnSave.Enabled or ((Sender as TORComboBox).Items.Count > 0);
 | 
|---|
 | 683 |  if lstItemsTopSelection.Visible then
 | 
|---|
 | 684 |  begin
 | 
|---|
 | 685 |    btnAddAll.Enabled := lstItemsTopSelection.Items.Count > 0;
 | 
|---|
 | 686 |    btnAdd.Enabled := lstItemsTopSelection.ItemIndex > -1;
 | 
|---|
 | 687 |  end
 | 
|---|
 | 688 |  else
 | 
|---|
 | 689 |  begin
 | 
|---|
 | 690 |    btnAddAll.Enabled := cboAllItems.Items.Count > 0;
 | 
|---|
 | 691 |    btnAdd.Enabled := cboAllItems.ItemIndex > -1;
 | 
|---|
 | 692 |  end;
 | 
|---|
 | 693 | end;
 | 
|---|
 | 694 | 
 | 
|---|
 | 695 | procedure TfrmGraphProfiles.cboAllItemsNeedData(Sender: TObject;
 | 
|---|
 | 696 |   const StartFrom: String; Direction, InsertAt: Integer);
 | 
|---|
 | 697 | var
 | 
|---|
 | 698 |   filetype: string;
 | 
|---|
 | 699 | begin
 | 
|---|
 | 700 |   if lstSource.ItemIndex = -1 then exit;
 | 
|---|
 | 701 |   filetype := Piece(lstSource.Items[lstSource.ItemIndex], '^', 1);
 | 
|---|
 | 702 |   cboAllItems.ForDataUse(rpcLookupItems(filetype, StartFrom, Direction));
 | 
|---|
 | 703 | end;
 | 
|---|
 | 704 | 
 | 
|---|
 | 705 | procedure TfrmGraphProfiles.lstItemsDisplayedChange(Sender: TObject);
 | 
|---|
 | 706 | begin
 | 
|---|
 | 707 |  btnSave.Enabled := lstItemsDisplayed.Items.Count > 0;
 | 
|---|
 | 708 |  btnSavePublic.Enabled := btnSave.Enabled and FPublicEditor;
 | 
|---|
 | 709 |  btnRemoveAll.Enabled := btnSave.Enabled;
 | 
|---|
 | 710 |  btnAdd.Enabled := (cboAllItems.Visible and (cboAllItems.ItemIndex > -1))
 | 
|---|
 | 711 |    or (lstItemsTopSelection.Visible and (lstItemsTopSelection.ItemIndex > -1));
 | 
|---|
 | 712 |  btnRemoveOne.Enabled :=  btnSave.Enabled and (lstItemsDisplayed.ItemIndex > -1);
 | 
|---|
 | 713 |  btnClear.Enabled := btnSave.Enabled or (lstItemsTopSelection.Items.Count > 0);
 | 
|---|
 | 714 |  if btnSave.Enabled and pnlApply.Visible then btnClose.Caption := 'Close and Display'
 | 
|---|
 | 715 |  else btnClose.Caption := 'Close';
 | 
|---|
 | 716 | end;
 | 
|---|
 | 717 | 
 | 
|---|
 | 718 | procedure TfrmGraphProfiles.lstItemsDisplayedDblClick(Sender: TObject);
 | 
|---|
 | 719 | var
 | 
|---|
 | 720 |   line: string;
 | 
|---|
 | 721 | begin
 | 
|---|
 | 722 |   if lstItemsDisplayed.ItemIndex < 0 then exit;
 | 
|---|
 | 723 |   line := lstItemsDisplayed.Items[lstItemsDisplayed.ItemIndex];
 | 
|---|
 | 724 |   lstItemsDisplayed.Items.Delete(lstItemsDisplayed.ItemIndex);
 | 
|---|
 | 725 |   QualifierDelete(line);
 | 
|---|
 | 726 |   lstItemsDisplayedChange(self);
 | 
|---|
 | 727 | end;
 | 
|---|
 | 728 | 
 | 
|---|
 | 729 | procedure TfrmGraphProfiles.QualifierDelete(line: string);
 | 
|---|
 | 730 | var
 | 
|---|
 | 731 |   i: integer;
 | 
|---|
 | 732 |   filenum: string;
 | 
|---|
 | 733 | begin
 | 
|---|
 | 734 |   if Piece(line, '^', 1) <> '0' then exit;
 | 
|---|
 | 735 |   filenum := Piece(line, '^', 2);
 | 
|---|
 | 736 |   if strtointdef(filenum, 0) < 0 then exit;
 | 
|---|
 | 737 |   if (filenum = '52') or (filenum = '55') or (filenum = '55NVAE')
 | 
|---|
 | 738 |   or (filenum = '55NVA') or (filenum = '53.79') then
 | 
|---|
 | 739 |   with lstItemsDisplayed do
 | 
|---|
 | 740 |   for i := 0 to Items.Count - 1 do
 | 
|---|
 | 741 |   if (Piece(Items[i], '^', 2) = '50.605') and (Piece(Items[i], '^', 1) = '0') then
 | 
|---|
 | 742 |   begin
 | 
|---|
 | 743 |     Items.Delete(i);
 | 
|---|
 | 744 |     break;
 | 
|---|
 | 745 |   end;
 | 
|---|
 | 746 | end;
 | 
|---|
 | 747 | 
 | 
|---|
 | 748 | procedure TfrmGraphProfiles.lstSourceChange(Sender: TObject);
 | 
|---|
 | 749 | var
 | 
|---|
 | 750 |   i: integer;
 | 
|---|
 | 751 |   filetype, itemdata, typedata: string;
 | 
|---|
 | 752 | begin
 | 
|---|
 | 753 |   cboAllItems.Items.Clear;
 | 
|---|
 | 754 |   cboAllItems.Text := '';
 | 
|---|
 | 755 |   CheckPublic;
 | 
|---|
 | 756 |   if lstSource.ItemIndex = -1 then exit;
 | 
|---|
 | 757 |   typedata :=  lstSource.Items[lstSource.ItemIndex];
 | 
|---|
 | 758 |   if typedata = LLS_LINE then
 | 
|---|
 | 759 |   begin
 | 
|---|
 | 760 |     cboAllItems.Items.Clear;
 | 
|---|
 | 761 |     cboAllItems.Text := '';
 | 
|---|
 | 762 |     exit;
 | 
|---|
 | 763 |   end;
 | 
|---|
 | 764 |   filetype := Piece(typedata, '^', 1);
 | 
|---|
 | 765 |   if filetype = '-1' then
 | 
|---|
 | 766 |     AssignProfile(cboAllItems.Items, typedata)
 | 
|---|
 | 767 |   else
 | 
|---|
 | 768 |   if filetype = '-2' then
 | 
|---|
 | 769 |     AssignProfile(cboAllItems.Items, typedata)
 | 
|---|
 | 770 |   else
 | 
|---|
 | 771 |   if filetype = '-3' then   // current selections
 | 
|---|
 | 772 |   begin
 | 
|---|
 | 773 |     AssignProfile(cboAllItems.Items, typedata);
 | 
|---|
 | 774 |   end
 | 
|---|
 | 775 |   else
 | 
|---|
 | 776 |   with cboAllItems.Items do
 | 
|---|
 | 777 |   begin
 | 
|---|
 | 778 |     Clear;
 | 
|---|
 | 779 |     cboAllItems.InitLongList('');
 | 
|---|
 | 780 |     typedata := '0^' + Piece(typedata, '^', 1) + '^ ' + Piece(typedata, '^', 2) + ' <any>';
 | 
|---|
 | 781 |     Insert(0, typedata);
 | 
|---|
 | 782 |     Insert(1, '^' + LLS_LINE);
 | 
|---|
 | 783 |     if Piece(typedata, '^', 2) = '63AP' then
 | 
|---|
 | 784 |     begin
 | 
|---|
 | 785 |       for i := 0 to lstSource.Items.Count - 1 do
 | 
|---|
 | 786 |       if copy(lstSource.Items[i], 1, 5) = '63AP;' then
 | 
|---|
 | 787 |       begin
 | 
|---|
 | 788 |         typedata := lstSource.Items[i];
 | 
|---|
 | 789 |         typedata := '0^' + Piece(typedata, '^', 1) + '^ ' + Piece(typedata, '^', 2) + ' <any>';
 | 
|---|
 | 790 |         Add(typedata);
 | 
|---|
 | 791 |       end;
 | 
|---|
 | 792 |     end
 | 
|---|
 | 793 |     else if Piece(typedata, '^', 2) ='63MI' then
 | 
|---|
 | 794 |     begin
 | 
|---|
 | 795 |       for i := 0 to lstSource.Items.Count - 1 do
 | 
|---|
 | 796 |       if copy(lstSource.Items[i], 1, 5) = '63MI;' then
 | 
|---|
 | 797 |       begin
 | 
|---|
 | 798 |         typedata := lstSource.Items[i];
 | 
|---|
 | 799 |         typedata := '0^' + Piece(typedata, '^', 1) + '^ ' + Piece(typedata, '^', 2) + ' <any>';
 | 
|---|
 | 800 |         Add(typedata);
 | 
|---|
 | 801 |       end;
 | 
|---|
 | 802 |     end;
 | 
|---|
 | 803 |   end;
 | 
|---|
 | 804 |   cboAllItemsChange(cboAllItems);
 | 
|---|
 | 805 |   CheckPublic;
 | 
|---|
 | 806 |   if lstSource.ItemIndex = -1 then exit;
 | 
|---|
 | 807 |   typedata :=  lstSource.Items[lstSource.ItemIndex];
 | 
|---|
 | 808 |   if typedata = LLS_LINE then
 | 
|---|
 | 809 |   begin
 | 
|---|
 | 810 |     lstItemsTopSelection.Clear;
 | 
|---|
 | 811 |     exit;
 | 
|---|
 | 812 |   end;
 | 
|---|
 | 813 |   filetype := Piece(typedata, '^', 1);
 | 
|---|
 | 814 |   if filetype = '-1' then
 | 
|---|
 | 815 |     AssignProfile(lstItemsTopSelection.Items, typedata)
 | 
|---|
 | 816 |   else
 | 
|---|
 | 817 |   if filetype = '-2' then
 | 
|---|
 | 818 |     AssignProfile(lstItemsTopSelection.Items, typedata)
 | 
|---|
 | 819 |   else
 | 
|---|
 | 820 |   if filetype = '-3' then
 | 
|---|
 | 821 |   begin
 | 
|---|
 | 822 |     AssignProfile(lstItemsTopSelection.Items, typedata);
 | 
|---|
 | 823 |   end
 | 
|---|
 | 824 |   else
 | 
|---|
 | 825 |   with lstItemsTopSelection.Items do
 | 
|---|
 | 826 |   begin
 | 
|---|
 | 827 |     Clear;
 | 
|---|
 | 828 |     lstItemsTopSelection.Sorted := true;
 | 
|---|
 | 829 |     typedata := '0^' + Piece(typedata, '^', 1) + '^ ' + Piece(typedata, '^', 2) + ' <any>';
 | 
|---|
 | 830 |     Insert(0, typedata);
 | 
|---|
 | 831 |     Insert(1, '^' + LLS_LINE);
 | 
|---|
 | 832 |     if filetype = '63AP' then
 | 
|---|
 | 833 |     begin
 | 
|---|
 | 834 |       lstItemsTopSelection.Sorted := false;
 | 
|---|
 | 835 |       for i := 0 to lstSource.Items.Count - 1 do
 | 
|---|
 | 836 |       if copy(lstSource.Items[i], 1, 5) = '63AP;' then
 | 
|---|
 | 837 |       begin
 | 
|---|
 | 838 |         typedata := lstSource.Items[i];
 | 
|---|
 | 839 |         typedata := '0^' + Piece(typedata, '^', 1) + '^ ' + Piece(typedata, '^', 2) + ' <any>';
 | 
|---|
 | 840 |         Add(typedata);
 | 
|---|
 | 841 |       end;
 | 
|---|
 | 842 |     end
 | 
|---|
 | 843 |     else if filetype ='63MI' then
 | 
|---|
 | 844 |     begin
 | 
|---|
 | 845 |       lstItemsTopSelection.Sorted := false;
 | 
|---|
 | 846 |       for i := 0 to lstSource.Items.Count - 1 do
 | 
|---|
 | 847 |       if copy(lstSource.Items[i], 1, 5) = '63MI;' then
 | 
|---|
 | 848 |       begin
 | 
|---|
 | 849 |         typedata := lstSource.Items[i];
 | 
|---|
 | 850 |         typedata := '0^' + Piece(typedata, '^', 1) + '^ ' + Piece(typedata, '^', 2) + ' <any>';
 | 
|---|
 | 851 |         Add(typedata);
 | 
|---|
 | 852 |       end;
 | 
|---|
 | 853 |     end
 | 
|---|
 | 854 |     else if filetype = '50.605' then
 | 
|---|
 | 855 |     for i := 0 to lstDrugClass.Items.Count - 1 do
 | 
|---|
 | 856 |     begin
 | 
|---|
 | 857 |       itemdata := lstDrugClass.Items[i];
 | 
|---|
 | 858 |       if filetype = Piece(itemdata, '^', 1) then
 | 
|---|
 | 859 |         Add(itemdata);
 | 
|---|
 | 860 |     end
 | 
|---|
 | 861 |     else if copy(filetype, 1, 5) = '63AP;' then
 | 
|---|
 | 862 |     begin
 | 
|---|
 | 863 |       filetype := copy(filetype, 1, 4) + '^A;' + copy(filetype, 6, 1) + ';';
 | 
|---|
 | 864 |       for i := 0 to lstTests.Items.Count - 1 do
 | 
|---|
 | 865 |       begin
 | 
|---|
 | 866 |         itemdata := lstTests.Items[i];
 | 
|---|
 | 867 |         if filetype = UpperCase(copy(itemdata, 1, 9)) then
 | 
|---|
 | 868 |           Add(itemdata);
 | 
|---|
 | 869 |       end;
 | 
|---|
 | 870 |     end
 | 
|---|
 | 871 |     else if copy(filetype, 1, 5) = '63MI;' then
 | 
|---|
 | 872 |     begin
 | 
|---|
 | 873 |       filetype := copy(filetype, 1, 4) + '^M;' + copy(filetype, 6, 1) + ';';
 | 
|---|
 | 874 |       for i := 0 to lstTests.Items.Count - 1 do
 | 
|---|
 | 875 |       begin
 | 
|---|
 | 876 |         itemdata := lstTests.Items[i];
 | 
|---|
 | 877 |         if filetype = UpperCase(copy(itemdata, 1, 9)) then
 | 
|---|
 | 878 |           Add(itemdata);
 | 
|---|
 | 879 |       end;
 | 
|---|
 | 880 |     end
 | 
|---|
 | 881 |     else if filetype <> '405' then
 | 
|---|
 | 882 |     for i := 0 to lstTests.Items.Count - 1 do
 | 
|---|
 | 883 |     begin
 | 
|---|
 | 884 |       itemdata := lstTests.Items[i];
 | 
|---|
 | 885 |       if filetype = UpperCase(Piece(itemdata, '^', 1)) then
 | 
|---|
 | 886 |         Add(itemdata);
 | 
|---|
 | 887 |     end;
 | 
|---|
 | 888 |     cboAllItemsChange(lstItemsTopSelection);
 | 
|---|
 | 889 |   end;
 | 
|---|
 | 890 | end;
 | 
|---|
 | 891 | 
 | 
|---|
 | 892 | procedure TfrmGraphProfiles.lstSourceDblClick(Sender: TObject);
 | 
|---|
 | 893 | begin
 | 
|---|
 | 894 |   if cboAllItems.Visible then
 | 
|---|
 | 895 |   begin
 | 
|---|
 | 896 |     if cboAllItems.Items.Count < 1 then exit;
 | 
|---|
 | 897 |     cboAllItems.ItemIndex := 0;
 | 
|---|
 | 898 |     cboAllItemsClick(cboAllItems);
 | 
|---|
 | 899 |   end
 | 
|---|
 | 900 |   else
 | 
|---|
 | 901 |   begin
 | 
|---|
 | 902 |     if lstItemsTopSelection.Items.Count < 1 then exit;
 | 
|---|
 | 903 |     lstItemsTopSelection.Selected[0] := true;
 | 
|---|
 | 904 |     cboAllItemsClick(lstItemsTopSelection);
 | 
|---|
 | 905 |   end;
 | 
|---|
 | 906 | end;
 | 
|---|
 | 907 | 
 | 
|---|
 | 908 | procedure TfrmGraphProfiles.AddToList(aItem: string; aListBox: TORListBox);
 | 
|---|
 | 909 | var
 | 
|---|
 | 910 |   addtolist: boolean;
 | 
|---|
 | 911 |   checkfile, checkitem: string;
 | 
|---|
 | 912 | begin
 | 
|---|
 | 913 |   aItem := UpperCase(Pieces(aItem, '^', 1, 2)) + '^' + Piece(aItem, '^', 3);
 | 
|---|
 | 914 |   checkfile := Piece(aItem, '^', 1);
 | 
|---|
 | 915 |   checkitem := Piece(aItem, '^', 2);
 | 
|---|
 | 916 |   if checkfile = '0' then
 | 
|---|
 | 917 |   begin
 | 
|---|
 | 918 |     checkfile := checkitem;       // if drug class any - 52,0;55,0
 | 
|---|
 | 919 |     checkitem := '0';           // if drug class item - go thru meds
 | 
|---|
 | 920 |   end;
 | 
|---|
 | 921 |   ArrangeList(checkfile, checkitem, aItem, aListBox, addtolist);
 | 
|---|
 | 922 |   if addtolist then aListBox.Items.Add(aItem);
 | 
|---|
 | 923 |   if (checkfile = '50.605') and (checkitem = '0') then
 | 
|---|
 | 924 |   begin
 | 
|---|
 | 925 |     checkfile := '52';
 | 
|---|
 | 926 |     aItem := '0^52^ Medication,Outpatitent <any>';
 | 
|---|
 | 927 |     ArrangeList(checkfile, checkitem, aItem, aListBox, addtolist);
 | 
|---|
 | 928 |     if addtolist then aListBox.Items.Add(aItem);
 | 
|---|
 | 929 |     checkfile := '55';
 | 
|---|
 | 930 |     aItem := '0^55^ Medication,Inpatitent <any>';
 | 
|---|
 | 931 |     ArrangeList(checkfile, checkitem, aItem, aListBox, addtolist);
 | 
|---|
 | 932 |     if addtolist then aListBox.Items.Add(aItem);
 | 
|---|
 | 933 |     checkfile := '53.79';
 | 
|---|
 | 934 |     aItem := '0^53.79^ Medication,BCMA <any>';
 | 
|---|
 | 935 |     ArrangeList(checkfile, checkitem, aItem, aListBox, addtolist);
 | 
|---|
 | 936 |     if addtolist then aListBox.Items.Add(aItem);
 | 
|---|
 | 937 |     {checkfile := '55NVAE';               // nonvameds as events is not used
 | 
|---|
 | 938 |     aItem := '0^55NVAE^ Medication,Non-VA-Event <any>';
 | 
|---|
 | 939 |     ArrangeList(checkfile, checkitem, aItem, aListBox, addtolist);
 | 
|---|
 | 940 |     if addtolist then aListBox.Items.Add(aItem);}
 | 
|---|
 | 941 |     checkfile := '55NVA';
 | 
|---|
 | 942 |     aItem := '0^55NVA^ Medication,Non-VA <any>';
 | 
|---|
 | 943 |     ArrangeList(checkfile, checkitem, aItem, aListBox, addtolist);
 | 
|---|
 | 944 |     if addtolist then aListBox.Items.Add(aItem);
 | 
|---|
 | 945 |   end;
 | 
|---|
 | 946 | end;
 | 
|---|
 | 947 | 
 | 
|---|
 | 948 | procedure TfrmGraphProfiles.ArrangeList(aCheckFile, aCheckItem, aItem: string;
 | 
|---|
 | 949 |   aListBox: TORListBox; var addtolist: boolean);
 | 
|---|
 | 950 | var
 | 
|---|
 | 951 |   i: integer;
 | 
|---|
 | 952 |   listfile, listitem: string;
 | 
|---|
 | 953 | begin
 | 
|---|
 | 954 |   addtolist := true;
 | 
|---|
 | 955 |   with aListBox do
 | 
|---|
 | 956 |   for i := Items.Count - 1 downto 0 do
 | 
|---|
 | 957 |   begin
 | 
|---|
 | 958 |     listfile := Piece(Items[i], '^', 1);
 | 
|---|
 | 959 |     listitem := Piece(Items[i], '^', 2);
 | 
|---|
 | 960 |     if listfile = '0' then
 | 
|---|
 | 961 |     begin
 | 
|---|
 | 962 |       listfile := listitem;
 | 
|---|
 | 963 |       listitem := '0';
 | 
|---|
 | 964 |     end;
 | 
|---|
 | 965 |     if (aCheckItem = listitem) and (aCheckFile = listfile) then
 | 
|---|
 | 966 |     begin
 | 
|---|
 | 967 |       addtolist := false;
 | 
|---|
 | 968 |       break;
 | 
|---|
 | 969 |     end
 | 
|---|
 | 970 |     else
 | 
|---|
 | 971 |     if (listitem = '0') and (aCheckFile = listfile) then
 | 
|---|
 | 972 |     begin
 | 
|---|
 | 973 |       addtolist := false;
 | 
|---|
 | 974 |       break;
 | 
|---|
 | 975 |     end
 | 
|---|
 | 976 |     else
 | 
|---|
 | 977 |     if listitem = '0' then
 | 
|---|
 | 978 |     begin
 | 
|---|
 | 979 |       if aCheckFile = Piece(listfile, ';', 1) then
 | 
|---|
 | 980 |         if Piece(aCheckItem, ';', 2) = Piece(listfile, ';', 2) then
 | 
|---|
 | 981 |         begin
 | 
|---|
 | 982 |           addtolist := false;
 | 
|---|
 | 983 |           break;
 | 
|---|
 | 984 |         end;
 | 
|---|
 | 985 |     end
 | 
|---|
 | 986 |     else
 | 
|---|
 | 987 |     if (aCheckItem = '0') and (aCheckFile = listfile) then
 | 
|---|
 | 988 |       Items.Delete(i);
 | 
|---|
 | 989 |   end;
 | 
|---|
 | 990 | end;
 | 
|---|
 | 991 | 
 | 
|---|
 | 992 | procedure TfrmGraphProfiles.AssignProfile(aList: TStrings; aProfile: string);
 | 
|---|
 | 993 | var
 | 
|---|
 | 994 |   ext, stop: boolean;
 | 
|---|
 | 995 |   i, j, k: integer;
 | 
|---|
 | 996 |   dfn, itemname, itemnums, itempart, itempart1, itempart2, itemtest, typedata, teststring: string;
 | 
|---|
 | 997 | begin
 | 
|---|
 | 998 |   ext := radSourceAll.Checked;
 | 
|---|
 | 999 |   if ext then
 | 
|---|
 | 1000 |   begin
 | 
|---|
 | 1001 |     if Piece(aProfile, '^', 1) = '-2' then
 | 
|---|
 | 1002 |       FastAssign(rpcGetGraphProfiles(UpperCase(Piece(aProfile, '^', 2)), '1', 1), aList)
 | 
|---|
 | 1003 |     else
 | 
|---|
 | 1004 | 
 | 
|---|
 | 1005 |     if Piece(aProfile, '^', 1) = '-3' then   // current selection on list
 | 
|---|
 | 1006 |     begin
 | 
|---|
 | 1007 |       if radSourcePat.Tag = 0 then
 | 
|---|
 | 1008 |       begin
 | 
|---|
 | 1009 |         dfn := lblClose.Hint;
 | 
|---|
 | 1010 |         FastAssign(rpcGetAllItems(dfn), lstTests.Items);  //*** using a DFN, get all items
 | 
|---|
 | 1011 |         FastAssign(rpcGetItems('50.605', dfn), lstDrugClass.Items);
 | 
|---|
 | 1012 |         radSourcePat.Tag := 1;
 | 
|---|
 | 1013 |       end;
 | 
|---|
 | 1014 |       typedata := '0^-1^ ' + Piece(aProfile, '^', 2);
 | 
|---|
 | 1015 |       aProfile := Piece(aProfile, '^', 3);
 | 
|---|
 | 1016 |       aList.Clear;
 | 
|---|
 | 1017 |       aList.Add(typedata);
 | 
|---|
 | 1018 |       aList.Add('^' + LLS_LINE);
 | 
|---|
 | 1019 |       for i := 1 to BIG_NUMBER do
 | 
|---|
 | 1020 |       begin
 | 
|---|
 | 1021 |         itempart := Piece(aProfile, '|', i);
 | 
|---|
 | 1022 |         if itempart = '' then exit;
 | 
|---|
 | 1023 |         itempart1 := Piece(itempart, '~', 1);
 | 
|---|
 | 1024 |         itempart2 := Piece(itempart, '~', 2);
 | 
|---|
 | 1025 |         itemnums := itempart1 + '^' + itempart2;
 | 
|---|
 | 1026 |         itemname := '';
 | 
|---|
 | 1027 |         for k := 0 to lstTests.Items.Count - 1 do
 | 
|---|
 | 1028 |         begin
 | 
|---|
 | 1029 |           itemtest := UpperCase(Pieces(lstTests.Items[k], '^', 1, 2));
 | 
|---|
 | 1030 |           if itemtest = itemnums then
 | 
|---|
 | 1031 |           begin
 | 
|---|
 | 1032 |             itemname := Piece(lstTests.Items[k], '^', 3);
 | 
|---|
 | 1033 |             itemnums := itemnums + '^' + itemname;
 | 
|---|
 | 1034 |             aList.Add(itemnums);
 | 
|---|
 | 1035 |             break;
 | 
|---|
 | 1036 |           end;
 | 
|---|
 | 1037 |         end;
 | 
|---|
 | 1038 |       end;
 | 
|---|
 | 1039 |     end
 | 
|---|
 | 1040 | 
 | 
|---|
 | 1041 |     else
 | 
|---|
 | 1042 |       FastAssign(rpcGetGraphProfiles(UpperCase(Piece(aProfile, '^', 2)), '0', 1), aList);
 | 
|---|
 | 1043 |     for i := 0 to aList.Count -1 do
 | 
|---|
 | 1044 |     begin
 | 
|---|
 | 1045 |       teststring := aList[i];
 | 
|---|
 | 1046 |       if Piece(teststring, '^', 1) = '0' then
 | 
|---|
 | 1047 |         aList[i] := '0^' + Piece(teststring, '^', 2) + '^_' + Piece(teststring, '^', 3);
 | 
|---|
 | 1048 |     end;
 | 
|---|
 | 1049 |     typedata := '0^' + Piece(aProfile, '^', 1) + '^ ' + Piece(aProfile, '^', 2);
 | 
|---|
 | 1050 |     aList.Insert(0, typedata);
 | 
|---|
 | 1051 |     aList.Insert(1, '^' + LLS_LINE);
 | 
|---|
 | 1052 |     exit;
 | 
|---|
 | 1053 |   end;
 | 
|---|
 | 1054 |   if Piece(aProfile, '^', 1) = '-2' then
 | 
|---|
 | 1055 |   begin
 | 
|---|
 | 1056 |     FastAssign(rpcGetGraphProfiles(UpperCase(Piece(aProfile, '^', 2)), '1', 0), lstScratch.Items);
 | 
|---|
 | 1057 |     typedata := '0^-1^ ' + Piece(aProfile, '^', 2);
 | 
|---|
 | 1058 |   end
 | 
|---|
 | 1059 |   else
 | 
|---|
 | 1060 |   if Piece(aProfile, '^', 1) = '-3' then   // current selection on list
 | 
|---|
 | 1061 |   begin
 | 
|---|
 | 1062 |     lstScratch.Items.Clear;
 | 
|---|
 | 1063 |     lstScratch.Items.Add(Piece(aProfile, '^', 3));
 | 
|---|
 | 1064 |     typedata := '0^-1^ ' + Piece(aProfile, '^', 2);
 | 
|---|
 | 1065 |     aProfile := '-1^' + Piece(aProfile, '^', 2) + '^';
 | 
|---|
 | 1066 |   end
 | 
|---|
 | 1067 |   else
 | 
|---|
 | 1068 |   begin
 | 
|---|
 | 1069 |     FastAssign(rpcGetGraphProfiles(UpperCase(Piece(aProfile, '^', 2)), '0', 0), lstScratch.Items);
 | 
|---|
 | 1070 |     typedata := '0^' + Piece(aProfile, '^', 1) + '^ ' + Piece(aProfile, '^', 2);
 | 
|---|
 | 1071 |   end;
 | 
|---|
 | 1072 |   for i := 0 to lstScratch.Items.Count - 1 do
 | 
|---|
 | 1073 |     aProfile := aProfile + lstScratch.Items[i];
 | 
|---|
 | 1074 |   aProfile := Piece(aProfile, '^', 3);
 | 
|---|
 | 1075 |   aList.Clear;
 | 
|---|
 | 1076 |   aList.Add(typedata);
 | 
|---|
 | 1077 |   aList.Add('^' + LLS_LINE);
 | 
|---|
 | 1078 |   for i := 1 to BIG_NUMBER do
 | 
|---|
 | 1079 |   begin
 | 
|---|
 | 1080 |     itempart := Piece(aProfile, '|', i);
 | 
|---|
 | 1081 |     if itempart = '' then exit;
 | 
|---|
 | 1082 |     itempart1 := Piece(itempart, '~', 1);
 | 
|---|
 | 1083 |     itempart2 := Piece(itempart, '~', 2);
 | 
|---|
 | 1084 |     itemnums := itempart1 + '^' + itempart2;
 | 
|---|
 | 1085 |     itemname := '';
 | 
|---|
 | 1086 |     if itempart1 = '0' then
 | 
|---|
 | 1087 |     begin
 | 
|---|
 | 1088 |       for j := 0 to lstSource.Items.Count - 1 do
 | 
|---|
 | 1089 |         if itempart2 = Piece(lstSource.Items[j], '^', 1) then
 | 
|---|
 | 1090 |         begin
 | 
|---|
 | 1091 |           itemname := Piece(lstSource.Items[j], '^', 2);
 | 
|---|
 | 1092 |           break;
 | 
|---|
 | 1093 |         end;
 | 
|---|
 | 1094 |       typedata := '0^' + itempart2 + '^_' + itemname + ' <any>';
 | 
|---|
 | 1095 |       aList.Add(typedata);
 | 
|---|
 | 1096 |     end
 | 
|---|
 | 1097 |     else
 | 
|---|
 | 1098 |     if (itempart1 <> '0') then    //DRUG CLASS NOT INCLUDED
 | 
|---|
 | 1099 |     begin
 | 
|---|
 | 1100 |       stop := false;
 | 
|---|
 | 1101 |       for k := 0 to lstTests.Items.Count - 1 do
 | 
|---|
 | 1102 |       begin
 | 
|---|
 | 1103 |         itemtest := UpperCase(Pieces(lstTests.Items[k], '^', 1, 2));
 | 
|---|
 | 1104 |         if itemtest = itemnums then
 | 
|---|
 | 1105 |         begin
 | 
|---|
 | 1106 |           itemname := Piece(lstTests.Items[k], '^', 3);
 | 
|---|
 | 1107 |           itemnums := itemnums + '^' + itemname;
 | 
|---|
 | 1108 |           aList.Add(itemnums);
 | 
|---|
 | 1109 |           stop := true;
 | 
|---|
 | 1110 |           break;
 | 
|---|
 | 1111 |         end;
 | 
|---|
 | 1112 |       end;
 | 
|---|
 | 1113 |       if not stop then
 | 
|---|
 | 1114 |       for k := 0 to lstDrugClass.Items.Count - 1 do
 | 
|---|
 | 1115 |       begin
 | 
|---|
 | 1116 |         itemtest := UpperCase(Pieces(lstDrugClass.Items[k], '^', 1, 2));
 | 
|---|
 | 1117 |         if itemtest = itemnums then
 | 
|---|
 | 1118 |         begin
 | 
|---|
 | 1119 |           itemname := Piece(lstDrugClass.Items[k], '^', 3);
 | 
|---|
 | 1120 |           itemnums := itemnums + '^' + itemname;
 | 
|---|
 | 1121 |           aList.Add(itemnums);
 | 
|---|
 | 1122 |           break;
 | 
|---|
 | 1123 |         end;
 | 
|---|
 | 1124 |       end;
 | 
|---|
 | 1125 |     end;
 | 
|---|
 | 1126 |   end;
 | 
|---|
 | 1127 | end;
 | 
|---|
 | 1128 | 
 | 
|---|
 | 1129 | procedure TfrmGraphProfiles.FillSource;
 | 
|---|
 | 1130 | var
 | 
|---|
 | 1131 |   i: integer;
 | 
|---|
 | 1132 |   dfntype, listline: string;
 | 
|---|
 | 1133 | begin
 | 
|---|
 | 1134 |   with lstSource do
 | 
|---|
 | 1135 |   begin
 | 
|---|
 | 1136 |     Sorted := true;
 | 
|---|
 | 1137 |     OnClick := OnChange;     // turn off onchange event when loading
 | 
|---|
 | 1138 |     OnChange := nil;
 | 
|---|
 | 1139 |     FastAssign(rpcGetTypes('0', true), Items);
 | 
|---|
 | 1140 |     for i := 0 to Items.Count - 1 do
 | 
|---|
 | 1141 |     begin
 | 
|---|
 | 1142 |       listline := Items[i];
 | 
|---|
 | 1143 |       dfntype := UpperCase(Piece(listline, '^', 1));
 | 
|---|
 | 1144 |       SetPiece(listline, '^', 1, dfntype);
 | 
|---|
 | 1145 |       Items[i] := listline;
 | 
|---|
 | 1146 |     end;
 | 
|---|
 | 1147 |     //Items.Add('50.605^Drug Class');
 | 
|---|
 | 1148 |     OnChange := OnClick;
 | 
|---|
 | 1149 |     OnClick := nil;
 | 
|---|
 | 1150 |     Sorted := false;
 | 
|---|
 | 1151 |     FastAssign(rpcGetGraphProfiles('1', '0', 0), lstScratch.Items);
 | 
|---|
 | 1152 |     if lstScratch.Items.Count > 0 then
 | 
|---|
 | 1153 |     begin
 | 
|---|
 | 1154 |       Items.Add(LLS_LINE);
 | 
|---|
 | 1155 |       for i := 0 to lstScratch.Items.Count - 1 do
 | 
|---|
 | 1156 |         Items.Add('-1^' + lstScratch.Items[i] + '^');
 | 
|---|
 | 1157 |     end;
 | 
|---|
 | 1158 |     FastAssign(rpcGetGraphProfiles('1', '1', 0), lstScratch.Items);
 | 
|---|
 | 1159 |     if lstScratch.Items.Count > 0 then
 | 
|---|
 | 1160 |     begin
 | 
|---|
 | 1161 |       Items.Add(LLS_LINE);
 | 
|---|
 | 1162 |       for i := 0 to lstScratch.Items.Count - 1 do
 | 
|---|
 | 1163 |         Items.Add('-2^' + lstScratch.Items[i] + '^');
 | 
|---|
 | 1164 |     end;
 | 
|---|
 | 1165 |   end;
 | 
|---|
 | 1166 | end;
 | 
|---|
 | 1167 | 
 | 
|---|
 | 1168 | function TfrmGraphProfiles.ProfileExists(aName: string; aType: integer): boolean;
 | 
|---|
 | 1169 | var
 | 
|---|
 | 1170 |   i, sourcetype: integer;
 | 
|---|
 | 1171 |   info, profilename: string;
 | 
|---|
 | 1172 | begin
 | 
|---|
 | 1173 |   Result := false;
 | 
|---|
 | 1174 |   aName := UpperCase(aName);
 | 
|---|
 | 1175 |   for i := lstSource.Items.Count - 1 downto 0 do
 | 
|---|
 | 1176 |   begin
 | 
|---|
 | 1177 |     info := lstSource.Items[i];
 | 
|---|
 | 1178 |     profilename := Piece(info, '^', 2);
 | 
|---|
 | 1179 |     sourcetype := strtointdef(Piece(info, '^', 1), 0);
 | 
|---|
 | 1180 |     if (UpperCase(profilename) = aName) and (aType = sourcetype) then
 | 
|---|
 | 1181 |     begin
 | 
|---|
 | 1182 |       Result := true;
 | 
|---|
 | 1183 |       break;
 | 
|---|
 | 1184 |     end;
 | 
|---|
 | 1185 |   end;
 | 
|---|
 | 1186 | end;
 | 
|---|
 | 1187 | 
 | 
|---|
 | 1188 | procedure TfrmGraphProfiles.AssignHints;
 | 
|---|
 | 1189 | var
 | 
|---|
 | 1190 |   i: integer;
 | 
|---|
 | 1191 | begin                       // text defined in uGraphs
 | 
|---|
 | 1192 |   for i := 0 to ControlCount - 1 do with Controls[i] do
 | 
|---|
 | 1193 |     Controls[i].ShowHint := true;
 | 
|---|
 | 1194 |   RadSourcePat.Hint := HINT_PAT_SOURCE;
 | 
|---|
 | 1195 |   RadSourceAll.Hint := HINT_ALL_SOURCE;
 | 
|---|
 | 1196 |   lblSelectionInfo.Hint := HINT_SELECTION_INFO;
 | 
|---|
 | 1197 |   lblSource.Hint := HINT_SOURCE;
 | 
|---|
 | 1198 |   lstSource.Hint := HINT_SOURCE;
 | 
|---|
 | 1199 |   lblSelection.Hint := HINT_SELECTION;
 | 
|---|
 | 1200 |   lstItemsTopSelection.Hint := HINT_SELECTION;
 | 
|---|
 | 1201 |   cboAllItems.Hint := HINT_SELECTION;
 | 
|---|
 | 1202 |   lblDisplay.Hint := HINT_DISPLAY;
 | 
|---|
 | 1203 |   lstItemsDisplayed.Hint := HINT_DISPLAY;
 | 
|---|
 | 1204 |   btnAddAll.Hint := HINT_BTN_ADDALL;
 | 
|---|
 | 1205 |   btnAdd.Hint := HINT_BTN_ADD1;
 | 
|---|
 | 1206 |   btnRemoveOne.Hint := HINT_BTN_REMOVE1;
 | 
|---|
 | 1207 |   btnRemoveAll.Hint := HINT_BTN_REMOVEALL;
 | 
|---|
 | 1208 |   btnClear.Hint := HINT_BTN_CLEAR;
 | 
|---|
 | 1209 |   btnDelete.Hint := HINT_BTN_DELETE;
 | 
|---|
 | 1210 |   btnRename.Hint := HINT_BTN_RENAME;
 | 
|---|
 | 1211 |   btnSave.Hint := HINT_BTN_SAVE;
 | 
|---|
 | 1212 |   btnSavePublic.Hint := HINT_BTN_SAVE_PUB;
 | 
|---|
 | 1213 |   pnlApply.Hint := HINT_APPLY;
 | 
|---|
 | 1214 |   btnClose.Hint := HINT_BTN_CLOSE;
 | 
|---|
 | 1215 | end;
 | 
|---|
 | 1216 | 
 | 
|---|
 | 1217 | procedure TfrmGraphProfiles.wmNCLButtonDown(var Msg: TWMNCLButtonDown);
 | 
|---|
 | 1218 | begin            // clicking the ? button will have controls show hints
 | 
|---|
 | 1219 |   if Msg.HitTest = HTHELP then
 | 
|---|
 | 1220 |   begin
 | 
|---|
 | 1221 |     Msg.Result := 0; // ignore biHelp border icon
 | 
|---|
 | 1222 |     AssignHints;
 | 
|---|
 | 1223 |     ShowMessage('Help is now available.' + #13 +
 | 
|---|
 | 1224 |                 'By pausing over a list or control, hints will appear.');
 | 
|---|
 | 1225 |   end
 | 
|---|
 | 1226 |   else
 | 
|---|
 | 1227 |     inherited;
 | 
|---|
 | 1228 | end;
 | 
|---|
 | 1229 | 
 | 
|---|
 | 1230 | procedure TfrmGraphProfiles.FormClose(Sender: TObject;
 | 
|---|
 | 1231 |   var Action: TCloseAction);
 | 
|---|
 | 1232 | begin
 | 
|---|
 | 1233 |   Application.HintHidePause := FHintPauseTime;
 | 
|---|
 | 1234 | end;
 | 
|---|
 | 1235 | 
 | 
|---|
 | 1236 | end.
 | 
|---|