Firefly Object Visualization Mapping

Zur Vorstellung von Komponenten und Units für Lazarus
Antworten
CCRDudeLaz
Beiträge: 54
Registriert: Do 25. Jan 2024, 08:33
OS, Lazarus, FPC: Win/macOS (L trunk FPC trunk)
CPU-Target: 32+64

Firefly Object Visualization Mapping

Beitrag von CCRDudeLaz »

Wo ich jetzt hier mehr herumhänge, stelle ich hier vielleicht auch mal ein paar Sachen vor, und fange an mit dem Code, den ich seit etwa einem Jahr in Open Source umwandle.

Entstanden daraus, dass ich genervt war, für jede TCollection oder TObjectList den gleichen Kram zur Darstellung tippen zu müssen, habe ich mithilfe von RTTI und Custom Attributes einige class helper gebaut, die die Anzeige von Listen von Informationen auf eine Zeile Code beschränken, also beispielsweise:

Code: Alles auswählen

ListView1.DisplayItems(MeineCollection);
ListView1.DisplayItems<MeinObjectListItemClass>(MeineGenerischeObjectList);
Alle Published-Felder werden dann als Spalten in das Listview übertragen. Die Namen der Properties werden übernommen, PascalCase und camelCase werden mit Leerzeichen getrennt, und dann kommen Custom Attributes in's Spiel, die es erlauben, andere Namen zu definieren, Felder zu überspringen, Feldbreiten und -ausrichtung festzulegen, &c.

Code: Alles auswählen

published
      [ATreeViewDisplayText()]
      property Title: string read FTitle;
      property SubText: string read FSubText;
      [ATreeViewParentObjectField()]
      property Parent: TreeViewDemoData read FParent;
      [AOVMImageIndex()]
      property ImageIndex: integer read GetImageIndex;
      [AOVMButton()]
      property Action: string read FAction;
      property OnExecute: TNotifyEvent read FOnExecute;
   end;
Neben TListView werden TComboBox, TComboBoxEx, TTreeView unterstützt, in separater Unit auf TVirtualStringTree (und weitere noch nicht veröffentlichte eigene Controls). Bei Bäumen entweder mit IDs oder direkten Verweisen auf Elter-Einträge, über Custom Attributes verlinkt.

Alternativ lässt sich TListView auch zur Anzeige aller Published-Felder eines Objektes anzeigen.

Das Repository enthält ein Demo, dort lässt sich die Verwendung in der Demo-Form schnell anschauen. Screenshot folgt noch.

Parallel hat es einen class helper, um group view in TListView unter Windows zu ermöglichen.

Nachteil 1: Custom Attributes sind erst seit FPC 3.3.1 verfügbar.
Nachteil 2: Feldnamen, die im Custom Attribute vergeben werden, fallen nicht automatisch in's i18n.

Firefly ist meine "Gruppierung" für meinen Pascal-Code, den ich als Open Source freigebe.

Antworten