Advertisement
LarsFosdal

Attribute driven grid config example

Jul 8th, 2016
296
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 4.03 KB | None | 0 0
  1. interface
  2.  
  3. type
  4.   TQuerySetXML = class(TQuerySetSQL) // Non visual sql result set
  5.  
  6.     Checked: TQuerySet.TFieldCheckBox;
  7.  
  8.     [UniqueField]
  9.     [DefaultSortField(True)]
  10.     [InitField('Id', 64)]
  11.     Id: TQuerySet.TFieldInteger;
  12.  
  13.     [InitField('TimeStamp', 'Dato og tid', 120)]
  14.     TimeStamp: TQuerySet.TFieldDateTime;
  15.  
  16.     [InitField('ProcessId', 'PID', 64)]
  17.     PID: TQuerySet.TFieldInteger;
  18.  
  19.     [InitField('ThreadId', 'TID', 64)]
  20.     TID: TQuerySet.TFieldInteger;
  21.  
  22.     [InitField('XLevel', 'Nivå', 70)]
  23.     Level: TQuerySet.TFieldEnum<TLogEventLevel>;
  24.  
  25.     [InitField('XCategory', 'Kategori', 70)]
  26.     Category: TQuerySet.TFieldEnum<TLogEventCategory>;
  27.  
  28.     [InitField('AppShortName', 'App', 30)]
  29.     App: TQuerySet.TFieldString;
  30.  
  31.     [InitField('ClientName', 'Client', 140, hcRightJustify)]
  32.     Client: TQuerySet.TFieldString;
  33.  
  34.     [InitField('Title', 'Beskrivelse', 800)]
  35.     Title: TQuerySet.TFieldString;
  36.  
  37.     constructor Create; override;
  38.     function LevelColorizer(const aValue: TLogEventLevel; var FG, BG: TColor): Boolean;
  39.     function AppToIconIndex(const aRow: Integer): Integer;
  40.   End;
  41.  
  42.   TQueryGridXML = class(TQueryGridSQL<TQuerySetXML>); // attaches the non-visual query set to a visual grid
  43.  
  44.  
  45. // Implementation
  46.  
  47. { TQuerySetXML }
  48.  
  49. constructor TQuerySetXML.Create;
  50. begin
  51.   inherited;
  52.  
  53.   Level.Formatter :=
  54.     function (const Lvl: TLogEventLevel):String
  55.     begin
  56.       Result := LogEventLevelToString(Lvl);
  57.     end;
  58.   Level.SecondaryKeys := [Category, TimeStamp];
  59.   Level.ValueColorizer := LevelColorizer;
  60.  
  61.   Category.Formatter :=
  62.     function (const Cat: TLogEventCategory):String
  63.     begin
  64.       Result := LogEventCategoryToString(Cat);
  65.     end;
  66.  
  67.   Category.SecondaryKeys := [TimeStamp];
  68.  
  69.   App.SecondaryKeys := [Client, TimeStamp];
  70.   App.AddImage(AppToIconIndex, heRight);
  71.  
  72.   Client.SecondaryKeys := [TimeStamp];
  73.   PID.SecondaryKeys := [TimeStamp];
  74.   Title.SecondaryKeys := [TimeStamp];
  75. end;
  76.  
  77. function TQuerySetXML.AppToIconIndex(const aRow:Integer):Integer;
  78. var
  79.   TLA: String;
  80. begin
  81.   TLA := App[aRow];
  82.        if TLA = AppId_Server           then Result := 0
  83.   else if TLA = AppID_DatabaseProc     then Result := 1
  84.   else if TLA = AppId_TINEAdmin        then Result := 2
  85.   else if TLA = AppId_PSDTruckTerm     then Result := 3
  86.   else if TLA = AppId_TMSProdInterface then Result := 4
  87.   else if TLA = AppId_ScannerTool      then Result := 5
  88.   else if TLA = AppId_RouteViewer      then Result := 6
  89.   else if TLA = AppId_SiteManager      then Result := 7
  90.   else if TLA = AppId_PickByVoice      then Result := 8
  91.   else if TLA = AppId_PSDController    then Result := 9
  92.   else if TLA = AppId_UnitTest         then Result := 10
  93.   else if TLA = AppId_Utils            then Result := 11
  94.   else Result := -1;
  95. end;
  96.  
  97. function TQuerySetXML.LevelColorizer(const aValue:TLogEventLevel; var FG, BG: TColor):Boolean;
  98. begin
  99.   Result := True;
  100.   case aValue of
  101.     lelDebug: FG := clDkGray;
  102. //        lelInfo: ;
  103.     lelWarning: FG := clBlue;
  104.     lelError: FG := clRed;
  105.     lelSystem: FG := clGreen;
  106.     lelCritical: begin
  107.       FG := clYellow;
  108.       BG := clMaroon;
  109.     end
  110.     else Result := False;
  111.   end;
  112. end;
  113.  
  114.  
  115. // Setting up the grid
  116.  
  117. procedure TPSDXmlLogViewer3.InitializeViews;
  118. begin
  119.   if Assigned(XMLGrid)
  120.    then EXIT;
  121.  
  122.   XMLQuery := TXMLLogNonPaged.Create('');  //<-- a SQL query builder
  123.   XMLQuery.Reset;
  124.   XMLQuery.Subset := 'Id, TimeStamp, ProcessId, ThreadId, XLevel, XCategory, Title, ClientId';
  125.  
  126.   XMLQuery.PageSize := 100;
  127.   RefreshInterval := 0;
  128.   DaysBack := 2;
  129.   dtpDate.Date := Trunc(Now);
  130.  
  131.   XMLGrid := TQueryGridXML.Create;
  132.   XMLGrid.MultiSelect := True;
  133.   XMLGrid.Grid := sgLog; //<-- Attaching to the TAdvStringGrid from TMS
  134.  
  135.   ...
  136.  
  137. // updating the contents
  138.  
  139.   db := PSD.DatabasePool.Acquire;
  140.   try
  141.     XMLQuery.UpdateCount(db, XMLQuery.Selection);  // a first query to determine number of hits, page count, etc.
  142.     XMLGrid.Update(db, XMLQuery.PaginatedSelection); // refresh the grid data from the SQL query
  143.   finally
  144.     PSD.DatabasePool.Release(db);
  145.   end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement