LarsFosdal icon

Attribute driven grid config example

LarsFosdal | PRO | 07/08/16 11:49:16 AM UTC | 0 ⭐ | 10532 👁️ | Never ⏰ | []
Delphi |

4.03 KB

|

None

|

0 👍

/

0 👎

interface
 
type
  TQuerySetXML = class(TQuerySetSQL) // Non visual sql result set
 
    Checked: TQuerySet.TFieldCheckBox;
 
    [UniqueField]
    [DefaultSortField(True)]
    [InitField('Id', 64)]
    Id: TQuerySet.TFieldInteger;
 
    [InitField('TimeStamp', 'Dato og tid', 120)]
    TimeStamp: TQuerySet.TFieldDateTime;
 
    [InitField('ProcessId', 'PID', 64)]
    PID: TQuerySet.TFieldInteger;
 
    [InitField('ThreadId', 'TID', 64)]
    TID: TQuerySet.TFieldInteger;
 
    [InitField('XLevel', 'Nivå', 70)]
    Level: TQuerySet.TFieldEnum<TLogEventLevel>;
 
    [InitField('XCategory', 'Kategori', 70)]
    Category: TQuerySet.TFieldEnum<TLogEventCategory>;
 
    [InitField('AppShortName', 'App', 30)]
    App: TQuerySet.TFieldString;
 
    [InitField('ClientName', 'Client', 140, hcRightJustify)]
    Client: TQuerySet.TFieldString;
 
    [InitField('Title', 'Beskrivelse', 800)]
    Title: TQuerySet.TFieldString;
 
    constructor Create; override;
    function LevelColorizer(const aValue: TLogEventLevel; var FG, BG: TColor): Boolean;
    function AppToIconIndex(const aRow: Integer): Integer;
  End;
 
  TQueryGridXML = class(TQueryGridSQL<TQuerySetXML>); // attaches the non-visual query set to a visual grid
 
 
// Implementation
 
{ TQuerySetXML }
 
constructor TQuerySetXML.Create;
begin
  inherited;
 
  Level.Formatter :=
    function (const Lvl: TLogEventLevel):String
    begin
      Result := LogEventLevelToString(Lvl);
    end;
  Level.SecondaryKeys := [Category, TimeStamp];
  Level.ValueColorizer := LevelColorizer;
 
  Category.Formatter :=
    function (const Cat: TLogEventCategory):String
    begin
      Result := LogEventCategoryToString(Cat);
    end;
 
  Category.SecondaryKeys := [TimeStamp];
 
  App.SecondaryKeys := [Client, TimeStamp];
  App.AddImage(AppToIconIndex, heRight);
 
  Client.SecondaryKeys := [TimeStamp];
  PID.SecondaryKeys := [TimeStamp];
  Title.SecondaryKeys := [TimeStamp];
end;
 
function TQuerySetXML.AppToIconIndex(const aRow:Integer):Integer;
var
  TLA: String;
begin
  TLA := App[aRow];
       if TLA = AppId_Server           then Result := 0
  else if TLA = AppID_DatabaseProc     then Result := 1
  else if TLA = AppId_TINEAdmin        then Result := 2
  else if TLA = AppId_PSDTruckTerm     then Result := 3
  else if TLA = AppId_TMSProdInterface then Result := 4
  else if TLA = AppId_ScannerTool      then Result := 5
  else if TLA = AppId_RouteViewer      then Result := 6
  else if TLA = AppId_SiteManager      then Result := 7
  else if TLA = AppId_PickByVoice      then Result := 8
  else if TLA = AppId_PSDController    then Result := 9
  else if TLA = AppId_UnitTest         then Result := 10
  else if TLA = AppId_Utils            then Result := 11
  else Result := -1;
end;
 
function TQuerySetXML.LevelColorizer(const aValue:TLogEventLevel; var FG, BG: TColor):Boolean;
begin
  Result := True;
  case aValue of
    lelDebug: FG := clDkGray;
//        lelInfo: ;
    lelWarning: FG := clBlue;
    lelError: FG := clRed;
    lelSystem: FG := clGreen;
    lelCritical: begin
      FG := clYellow;
      BG := clMaroon;
    end
    else Result := False;
  end;
end;
 
 
// Setting up the grid
 
procedure TPSDXmlLogViewer3.InitializeViews;
begin
  if Assigned(XMLGrid)
   then EXIT;
 
  XMLQuery := TXMLLogNonPaged.Create('');  //<-- a SQL query builder
  XMLQuery.Reset;
  XMLQuery.Subset := 'Id, TimeStamp, ProcessId, ThreadId, XLevel, XCategory, Title, ClientId';
 
  XMLQuery.PageSize := 100;
  RefreshInterval := 0;
  DaysBack := 2;
  dtpDate.Date := Trunc(Now);
 
  XMLGrid := TQueryGridXML.Create;
  XMLGrid.MultiSelect := True;
  XMLGrid.Grid := sgLog; //<-- Attaching to the TAdvStringGrid from TMS
 
  ...
 
// updating the contents
 
  db := PSD.DatabasePool.Acquire;
  try
    XMLQuery.UpdateCount(db, XMLQuery.Selection);  // a first query to determine number of hits, page count, etc.
    XMLGrid.Update(db, XMLQuery.PaginatedSelection); // refresh the grid data from the SQL query
  finally
    PSD.DatabasePool.Release(db);
  end;

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎