{
    fpGUI  -  Free Pascal GUI Toolkit

    Copyright (C) 2006 - 2010 See the file AUTHORS.txt, included in this
    distribution, for details of the copyright.

    See the file COPYING.modifiedLGPL, included in this distribution,
    for details about redistributing fpGUI.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

    Description:
      Setting up of widgets, properties and images.
}

unit vfdwidgets;

{$mode objfpc}{$H+}

interface

uses
  SysUtils,
  Classes,
  contnrs,
  vfdwidgetclass,
  vfdprops,
  typinfo;

procedure RegisterWidgets;
procedure RegisterVFDWidget(awc: TVFDWidgetClass);
function  VFDWidgetCount: integer;
function  VFDWidget(ind: integer): TVFDWidgetClass;
function  VFDFormWidget: TVFDWidgetClass;

var
  VFDOtherWidget: TVFDWidgetClass;

implementation

uses
  fpg_main,
  vfddesigner,
  fpg_widget,
  fpg_form,
  fpg_label,
  fpg_edit,
  fpg_button,
  fpg_listbox,
  fpg_memo,
  fpg_combobox,
  fpg_grid,
  fpg_checkbox,
  fpg_panel,
  fpg_tree,
  fpg_radiobutton,
  fpg_listview,
  fpg_trackbar,
  fpg_menu,
  fpg_progressbar,
  fpg_tab,
  fpg_popupcalendar,
  fpg_gauge,
  fpg_editbtn,
  fpg_ColorWheel,
  fpg_splitter,
  fpg_hyperlink,
  vfdpropeditgrid,
  vfdmain;

type
  TVFDPageControlWidgetClass = class(TVFDWidgetClass)
  private
    FWidget: TfpgPageControl;
    procedure AddTabSClicked(Sender: TObject);
    procedure DeleteTabClicked(Sender: TObject);
  public
    function CreatePopupMenu(AWidget: TfpgWidget): TfpgPopupMenu; override;
  end;

{ TVFDPageControlWidgetClass }

procedure TVFDPageControlWidgetClass.AddTabSClicked(Sender: TObject);
begin
  Exit;
  FWidget.AppendTabSheet('TabSheet' + IntToStr(FWidget.PageCount));
end;

procedure TVFDPageControlWidgetClass.DeleteTabClicked(Sender: TObject);
begin
  Exit;
  FWidget.RemoveTabSheet(FWidget.ActivePage);
end;

function TVFDPageControlWidgetClass.CreatePopupMenu(AWidget: TfpgWidget): TfpgPopupMenu;
begin
  FWidget := TfpgPageControl(AWidget);
  Result := TfpgPopupMenu.Create(nil);
  { TODO : These are disabled for now, because a TabSheet component are used
           instead of a menu item - for adding tabs. }
  Result.AddMenuItem('Add Tab', '', @AddTabSClicked).Enabled := False;
  Result.AddMenuItem('Delete Tab', '', @DeleteTabClicked).Enabled := False;
end;

var
  FVFDFormWidget: TVFDWidgetClass;
  FVFDWidgets: TObjectList;

function VFDFormWidget: TVFDWidgetClass;
begin
  Result := FVFDFormWidget;
end;

function VFDWidgetCount: integer;
begin
  Result := FVFDWidgets.Count;
end;

function VFDWidget(ind: integer): TVFDWidgetClass;
begin
  Result := TVFDWidgetClass(FVFDWidgets[ind]);
end;

procedure RegisterVFDWidget(awc: TVFDWidgetClass);
begin
  FVFDWidgets.Add(awc);
end;

{$I icons.inc}

procedure LoadIcons;
begin
  fpgImages.AddMaskedBMP(
    'vfd.arrow', @stdimg_vfd_arrow,
    sizeof(stdimg_vfd_arrow),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.label', @stdimg_vfd_label,
    sizeof(stdimg_vfd_label),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.edit', @stdimg_vfd_edit,
    sizeof(stdimg_vfd_edit),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.memo', @stdimg_vfd_memo,
    sizeof(stdimg_vfd_memo),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.button', @stdimg_vfd_button,
    sizeof(stdimg_vfd_button),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.checkbox', @stdimg_vfd_checkbox,
    sizeof(stdimg_vfd_checkbox),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.listbox', @stdimg_vfd_listbox,
    sizeof(stdimg_vfd_listbox),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.colorlistbox', @stdimg_vfd_colorlistbox,
    sizeof(stdimg_vfd_colorlistbox),
    0, 0);


  fpgImages.AddMaskedBMP(
    'vfd.combobox', @stdimg_vfd_combobox,
    sizeof(stdimg_vfd_combobox),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.panel', @stdimg_vfd_panel,
    sizeof(stdimg_vfd_panel),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.other', @stdimg_vfd_other,
    sizeof(stdimg_vfd_other),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.dbgrid', @stdimg_vfd_dbgrid,
    sizeof(stdimg_vfd_dbgrid),
    15,0 );

  fpgImages.AddMaskedBMP(
    'vfd.progressbar', @stdimg_vfd_progressbar,
    sizeof(stdimg_vfd_progressbar),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.trackbar', @stdimg_vfd_trackbar,
    sizeof(stdimg_vfd_trackbar),
    0, 0);
    
  fpgImages.AddMaskedBMP(
    'vfd.gauge', @stdimg_vfd_gauge,
    sizeof(stdimg_vfd_gauge),
    0, 0);
    
  fpgImages.AddMaskedBMP(
    'vfd.menubar', @stdimg_vfd_menubar,
    sizeof(stdimg_vfd_menubar),
    0, 0);
    
  fpgImages.AddMaskedBMP(
    'vfd.listview', @stdimg_vfd_listview,
    sizeof(stdimg_vfd_listview),
    0, 0);
    
  fpgImages.AddMaskedBMP(
    'vfd.stringgrid', @stdimg_vfd_stringgrid,
    sizeof(stdimg_vfd_stringgrid),
    0, 0);
    
  fpgImages.AddMaskedBMP(
    'vfd.radiobutton', @stdimg_vfd_radiobutton,
    sizeof(stdimg_vfd_radiobutton),
    0, 0);
    
  fpgImages.AddMaskedBMP(
    'vfd.pagecontrol', @stdimg_vfd_pagecontrol,
    sizeof(stdimg_vfd_pagecontrol),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.treeview', @stdimg_vfd_treeview,
    sizeof(stdimg_vfd_treeview),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.newform', @stdimg_vfd_newform,
    sizeof(stdimg_vfd_newform),
    0, 0);
    
  fpgImages.AddMaskedBMP(
    'vfd.combodateedit', @stdimg_vfd_dateedit,
    sizeof(stdimg_vfd_dateedit),
    0, 0);
    
  fpgImages.AddMaskedBMP(
    'vfd.bevel', @stdimg_vfd_bevel,
    sizeof(stdimg_vfd_bevel),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.tabsheet', @stdimg_vfd_tabsheet,
    sizeof(stdimg_vfd_tabsheet),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.editinteger', @stdimg_vfd_editinteger,
    sizeof(stdimg_vfd_editinteger),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.editfloat', @stdimg_vfd_editfloat,
    sizeof(stdimg_vfd_editfloat),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.editcurrency', @stdimg_vfd_editcurrency,
    sizeof(stdimg_vfd_editcurrency),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.groupbox', @stdimg_vfd_groupbox,
    sizeof(stdimg_vfd_groupbox),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.combodatecheckedit', @stdimg_vfd_combodatecheckedit,
    sizeof(stdimg_vfd_combodatecheckedit),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.editfilename', @stdimg_vfd_editfilename,
    sizeof(stdimg_vfd_editfilename),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.editdirectory', @stdimg_vfd_editdirectory,
    sizeof(stdimg_vfd_editdirectory),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.editfont', @stdimg_vfd_editfont,
    sizeof(stdimg_vfd_editfont),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.editbutton', @stdimg_vfd_editbutton,
    sizeof(stdimg_vfd_editbutton),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.colorwheel', @stdimg_vfd_colorwheel,
    sizeof(stdimg_vfd_colorwheel),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.valuebar', @stdimg_vfd_valuebar,
    sizeof(stdimg_vfd_valuebar),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.splitter', @stdimg_vfd_splitter,
    sizeof(stdimg_vfd_splitter),
    0, 0);

  fpgImages.AddMaskedBMP(
    'vfd.hyperlink', @stdimg_vfd_hyperlink,
    sizeof(stdimg_vfd_hyperlink),
    0, 0);
end;

procedure AddWidgetPosProps(wgc: TVFDWidgetClass);
begin
  wgc.AddProperty('Left', TPropertyInteger, '');
  wgc.AddProperty('Top', TPropertyInteger, '');
  wgc.AddProperty('Width', TPropertyInteger, '');
  wgc.AddProperty('Height', TPropertyInteger, '');
end;

procedure RegisterWidgets;
var
  wc: TVFDWidgetClass;
begin
  LoadIcons;

  wc          := TVFDWidgetClass.Create(TfpgForm);
  wc.NameBase := 'frm';
  wc.AddProperty('WindowTitle', TPropertyString, '');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.AddProperty('Sizeable', TPropertyBoolean, 'Can the form be resized at runtime');
  //wc.AddProperty('BackgroundColor', TPropertyColor, '');
  //wc.AddProperty('TextColor', TPropertyColor, '');
  //wc.AddProperty('MaxHeight', TPropertyInteger, '');
  //wc.AddProperty('MaxWidth', TPropertyInteger, '');
  //wc.AddProperty('MinHeight', TPropertyInteger, '');
  //wc.AddProperty('MinWidth', TPropertyInteger, '');
  //wc.AddProperty('FullScreen', TPropertyBoolean, '');
  //wc.AddProperty('WindowPosition', TPropertyEnum, '');
  FVFDFormWidget := wc;

  // Label
  wc          := TVFDWidgetClass.Create(TfpgLabel);
  wc.NameBase := 'Label';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('Alignment', TPropertyEnum, 'Horizontal text alignment');
  wc.AddProperty('BackgroundColor', TPropertyColor, '');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the label text');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('Layout', TPropertyEnum, 'Vertical text layout');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.AddProperty('Text', TPropertyString, 'Label text');
  wc.AddProperty('TextColor', TPropertyColor, '');
  wc.AddProperty('WrapText', TPropertyBoolean, 'If True text will wrap when it doesn''t fit the width');
  wc.WidgetIconName := 'vfd.label';
  RegisterVFDWidget(wc);

  // Edit
  wc          := TVFDWidgetClass.Create(TfpgEdit);
  wc.NameBase := 'Edit';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('AutoSelect', TPropertyBoolean, 'On receiving focus, auto select text');
  wc.AddProperty('AutoSize', TPropertyBoolean, 'Change Height based on FontDesc being set');
  wc.AddProperty('BackgroundColor', TPropertyColor, '');
  wc.AddProperty('BorderStyle', TPropertyEnum, '');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('ExtraHint', TPropertyString, '');
  wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('IgnoreMouseCursor', TPropertyBoolean, 'If True, then mouse pointer doesn''t change');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('PasswordMode', TPropertyBoolean, 'When enabled, it masks the text input');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
  wc.AddProperty('Text', TPropertyString, 'Initial text');
  wc.AddProperty('TextColor', TPropertyColor, '');
  wc.WidgetIconName := 'vfd.edit';
  RegisterVFDWidget(wc);

  // Memo
  wc          := TVFDWidgetClass.Create(TfpgMemo);
  wc.NameBase := 'Memo';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('BackgroundColor', TPropertyColor, '');
  wc.AddProperty('BorderStyle', TPropertyEnum, '');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('Lines', TPropertyStringList, '');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
  wc.AddProperty('TextColor', TPropertyColor, '');
  wc.WidgetIconName := 'vfd.memo';
  RegisterVFDWidget(wc);

  // Button
  wc          := TVFDWidgetClass.Create(TfpgButton);
  wc.NameBase := 'Button';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('Text', TPropertyString, 'Initial text');
  wc.AddProperty('AllowAllUp', TPropertyBoolean, '');
  wc.AddProperty('BackgroundColor', TPropertyColor, '');
  wc.AddProperty('Down', TPropertyBoolean, 'Only valid when in group mode');
  wc.AddProperty('Embedded', TPropertyBoolean, 'No focus rectangle will be drawn. eg: Toolbar buttons');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('Flat', TPropertyBoolean, 'Only draw button borders when mouse hovers over button');
  wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
  wc.AddProperty('GroupIndex', TPropertyInteger, '');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('ImageLayout', TPropertyEnum, 'Which side of the button contains the image');
  wc.AddProperty('ImageMargin', TPropertyInteger, 'Space between image and border, -1 centers image/text');
  wc.AddProperty('ImageName', TPropertyString, '');
  wc.AddProperty('ImageSpacing', TPropertyInteger, 'Space between image and text, -1 centers text');
  wc.AddProperty('ModalResult', TPropertyEnum, 'Modal Result returned and overrides the OnClick event handler');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.AddProperty('ShowImage', TPropertyBoolean, 'Boolean value');
  wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
  wc.AddProperty('TextColor', TPropertyColor, '');
  wc.WidgetIconName := 'vfd.button';
  RegisterVFDWidget(wc);

  // CheckBox
  wc          := TVFDWidgetClass.Create(TfpgCheckBox);
  wc.NameBase := 'CheckBox';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('BackgroundColor', TPropertyColor, '');
  wc.AddProperty('BoxLayout', TPropertyEnum, 'Is checkbox image on left or right');
  wc.AddProperty('Checked', TPropertyBoolean, 'Boolean value');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
  wc.AddProperty('Text', TPropertyString, 'Initial text');
  wc.AddProperty('TextColor', TPropertyColor, '');
  wc.WidgetIconName := 'vfd.checkbox';
  RegisterVFDWidget(wc);

  // RadioButton
  wc          := TVFDWidgetClass.Create(TfpgRadioButton);
  wc.NameBase := 'RadioButton';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('BackgroundColor', TPropertyColor, '');
  wc.AddProperty('BoxLayout', TPropertyEnum, 'Is radiobutton image on left or right');
  wc.AddProperty('Checked', TPropertyBoolean, 'Boolean value');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
  wc.AddProperty('GroupIndex', TPropertyInteger, '');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
  wc.AddProperty('Text', TPropertyString, 'Initial text');
  wc.AddProperty('TextColor', TPropertyColor, '');
  wc.WidgetIconName := 'vfd.radiobutton';
  RegisterVFDWidget(wc);

  // ComboBox
  wc          := TVFDWidgetClass.Create(TfpgComboBox);
  wc.NameBase := 'ComboBox';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('AutoSize', TPropertyBoolean, 'Change Height based on FontDesc being set');
  wc.AddProperty('BackgroundColor', TPropertyColor, '');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('ExtraHint', TPropertyString, 'Extra hint that appears inside component while no item is selected');
  wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('Items', TPropertyStringList, '');
  wc.AddProperty('FocusItem', TPropertyInteger, 'Currently selected item');  // must be after 'Items' property for UI Designer!
  wc.AddProperty('Margin', TPropertyInteger, '');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
  wc.AddProperty('TextColor', TPropertyColor, '');
  wc.WidgetIconName := 'vfd.combobox';
  RegisterVFDWidget(wc);

  // Calendar ComboBox
  wc          := TVFDWidgetClass.Create(TfpgCalendarCombo);
  wc.NameBase := 'CalendarCombo';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('BackgroundColor', TPropertyColor, '');
  wc.AddProperty('DateFormat', TPropertyString, 'Standard RTL date formatting applies');
  wc.AddProperty('DayColor', TPropertyColor, '');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('HolidayColor', TPropertyColor, '');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('SelectedColor', TPropertyColor, '');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.Addproperty('SingleClickSelect', TPropertyBoolean, 'Close calendar on date select');
  wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
  wc.AddProperty('WeekStartDay', TPropertyInteger, '0 = Sun, 1 = Mon, etc.');
  wc.WidgetIconName := 'vfd.combodateedit';
  RegisterVFDWidget(wc);

  // Calendar ComboBox Checkbox
  wc          := TVFDWidgetClass.Create(TfpgCalendarCheckCombo);
  wc.NameBase := 'CalendarCombo';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('BackgroundColor', TPropertyColor, '');
  wc.AddProperty('Checked', TPropertyBoolean, 'Boolean value');
  wc.AddProperty('DateFormat', TPropertyString, 'Standard RTL date formatting applies');
  wc.AddProperty('DayColor', TPropertyColor, '');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('HolidayColor', TPropertyColor, '');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('SelectedColor', TPropertyColor, '');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.Addproperty('SingleClickSelect', TPropertyBoolean, 'Close calendar on date select');
  wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
  wc.AddProperty('WeekStartDay', TPropertyInteger, '0 = Sun, 1 = Mon, etc.');
  wc.WidgetIconName := 'vfd.combodatecheckedit';
  RegisterVFDWidget(wc);

  // ListBox
  wc          := TVFDWidgetClass.Create(TfpgListBox);
  wc.NameBase := 'ListBox';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('AutoHeight', TPropertyBoolean, '');
  wc.AddProperty('BackgroundColor', TPropertyColor, '');
  wc.Addproperty('DragToReorder', TPropertyBoolean, '');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('HotTrack', TPropertyBoolean, '');
  wc.AddProperty('Items', TPropertyStringList, '');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('PopupFrame', TPropertyBoolean, '');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
  wc.WidgetIconName := 'vfd.listbox';
  RegisterVFDWidget(wc);

  // Color ListBox
  wc          := TVFDWidgetClass.Create(TfpgColorListBox);
  wc.NameBase := 'ColorListBox';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('AutoHeight', TPropertyBoolean, '');
  wc.AddProperty('BackgroundColor', TPropertyColor, '');
  wc.AddProperty('Color', TPropertyColor, 'The currently selected color');
  wc.AddProperty('ColorPalette', TPropertyEnum, '');
  wc.Addproperty('DragToReorder', TPropertyBoolean, '');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('HotTrack', TPropertyBoolean, '');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('PopupFrame', TPropertyBoolean, '');
  wc.AddProperty('ShowColorNames', TPropertyBoolean, '');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
  wc.WidgetIconName := 'vfd.colorlistbox';
  RegisterVFDWidget(wc);

  // StringGrid
  wc := TVFDWidgetClass.Create(TfpgStringGrid);
  wc.NameBase := 'Grid';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('AlternateBGColor', TPropertyColor, 'The color of every alternative row. Dependent on grid Options property.');
  wc.AddProperty('BackgroundColor', TPropertyColor, '');
  wc.AddProperty('BorderStyle', TPropertyEnum, '');
  wc.AddProperty('Columns', TPropertyDBColumns, 'Defines the various columns for a grid. At least one column must exist.');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
  wc.AddProperty('HeaderFontDesc', TPropertyFontDesc, '');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('RowCount', TPropertyInteger, 'Default number of rows in the grid');
  wc.AddProperty('RowSelect', TPropertyBoolean, 'If enabled, a whole row is selected, not just a cell');
  wc.AddProperty('ScrollbarStyle', TPropertyEnum, '');
  wc.AddProperty('ShowGrid', TPropertyBoolean, 'Must the grid lines be shown');
  wc.AddProperty('ShowHeader', TPropertyBoolean, 'Must the grid header be visible');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
  wc.WidgetIconName := 'vfd.stringgrid';
  RegisterVFDWidget(wc);

  // Bevel
  wc           := TVFDWidgetClass.Create(TfpgBevel);
  wc.NameBase  := 'Bevel';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('BackgroundColor', TPropertyColor, '');
  wc.AddProperty('BorderStyle', TPropertyEnum, 'Single or Double');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('ParentBackgroundColor', TPropertyBoolean, '');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('Shape', TPropertyEnum, 'Box, Frame, TopLine, Spacer etc..');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.AddProperty('Style', TPropertyEnum, 'Raised or Lower look');
  wc.WidgetIconName := 'vfd.bevel';
  wc.Container := True;
  RegisterVFDWidget(wc);

  // Panel
  wc           := TVFDWidgetClass.Create(TfpgPanel);
  wc.NameBase  := 'Panel';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('Alignment', TPropertyEnum, 'Text alignment');
  wc.AddProperty('BackgroundColor', TPropertyColor, '');
  wc.AddProperty('BorderStyle', TPropertyEnum, 'Single or Double');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('Layout', TPropertyEnum, 'Layout of the caption');
  wc.AddProperty('LineSpace', TPropertyInteger, 'Line spacing between wrapped caption');
  wc.AddProperty('Margin', TPropertyInteger, 'Margin width around the borders that the text should not paint in.');
  wc.AddProperty('ParentBackgroundColor', TPropertyBoolean, 'Should the color of the parent be used instead.');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.AddProperty('Style', TPropertyEnum, 'Raised or Lower look');
  wc.AddProperty('Text', TPropertyString, 'The panel caption');
  wc.AddProperty('TextColor', TPropertyColor, '');
  wc.AddProperty('WrapText', TPropertyBoolean, 'Should the panel text be wrapped');
  wc.WidgetIconName := 'vfd.panel';
  wc.Container := True;
  RegisterVFDWidget(wc);

  // GroupBox
  wc           := TVFDWidgetClass.Create(TfpgGroupBox);
  wc.NameBase  := 'GroupBox';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('Alignment', TPropertyEnum, 'Text alignment');
  wc.AddProperty('BackgroundColor', TPropertyColor, '');
  wc.AddProperty('BorderStyle', TPropertyEnum, 'Single or Double');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('Margin', TPropertyInteger, 'Margin width around the borders that the text should not paint in.');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.AddProperty('Style', TPropertyEnum, 'Raised or Lower look');
  wc.AddProperty('Text', TPropertyString, 'The panel caption');
  wc.AddProperty('TextColor', TPropertyColor, '');
  wc.WidgetIconName := 'vfd.groupbox';
  wc.Container := True;
  RegisterVFDWidget(wc);

  // ProgressBar
  wc          := TVFDWidgetClass.Create(TfpgProgressBar);
  wc.NameBase := 'ProgressBar';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('BackgroundColor', TPropertyColor, '');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('Max', TPropertyInteger, '');
  wc.AddProperty('Min', TPropertyInteger, '');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('Position', TPropertyInteger, '');
  wc.AddProperty('ShowCaption', TPropertyBoolean, '');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.AddProperty('TextColor', TPropertyColor, '');
  wc.WidgetIconName := 'vfd.progressbar';
  RegisterVFDWidget(wc);

  // TrackBar
  wc          := TVFDWidgetClass.Create(TfpgTrackBar);
  wc.NameBase := 'TrackBar';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('BackgroundColor', TPropertyColor, '');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('Max', TPropertyInteger, '');
  wc.AddProperty('Min', TPropertyInteger, '');
  wc.AddProperty('Orientation', TPropertyEnum, '');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('Position', TPropertyInteger, '');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.AddProperty('ShowPosition', TPropertyBoolean, '');
  wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
  wc.AddProperty('TextColor', TPropertyColor, '');
  wc.WidgetIconName := 'vfd.trackbar';
  RegisterVFDWidget(wc);

  // ListView
  wc := TVFDWidgetClass.Create(TfpgListView);
  wc.NameBase := 'ListView';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('MultiSelect', TPropertyBoolean, '');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('ShowHeaders', TPropertyBoolean, '');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
  wc.WidgetIconName := 'vfd.listview';
  RegisterVFDWidget(wc);

  // Treeview
  wc := TVFDWidgetClass.Create(TfpgTreeView);
  wc.NameBase := 'TreeView';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('BackgroundColor', TPropertyColor, '');
  wc.AddProperty('DefaultColumnWidth',TPropertyInteger, '');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('FontDesc',TPropertyFontDesc, '');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('ScrollWheelDelta', TPropertyInteger, 'Scroll amount with mouse wheel');
  wc.AddProperty('ShowColumns',TPropertyBoolean, 'Boolean value');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.AddProperty('ShowImages',TPropertyBoolean, 'Boolean value');
  wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
  wc.AddProperty('TreeLineColor', TPropertyColor, '');
  wc.AddProperty('TreeLineStyle', TPropertyEnum, '');
  wc.WidgetIconName := 'vfd.treeview';
  RegisterVFDWidget(wc);
  
  // PageControl
  wc          := TVFDPageControlWidgetClass.Create(TfpgPageControl);
  wc.NameBase := 'PageControl';
  wc.AddProperty('ActivePageIndex', TPropertyInteger, '');
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('BackgroundColor', TPropertyColor, '');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('FixedTabWidth', TPropertyInteger, '');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.AddProperty('SortPages', TPropertyBoolean, 'Boolean value');
  wc.AddProperty('Style', TPropertyEnum, '');
  wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
  wc.AddProperty('TabPosition', TPropertyEnum, '');
  wc.AddProperty('TextColor', TPropertyColor, '');
  wc.WidgetIconName := 'vfd.pagecontrol';
  wc.Container := True;
  wc.BlockMouseMsg := False;
  RegisterVFDWidget(wc);

  // TabSheet
  wc          := TVFDWidgetClass.Create(TfpgTabSheet);
  wc.NameBase := 'TabSheet';
  wc.AddProperty('BackgroundColor', TPropertyColor, '');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('Text', TPropertyString, 'The tab title');
  wc.WidgetIconName := 'vfd.tabsheet';
  wc.Container := True;
  RegisterVFDWidget(wc);

  // Gauge
  wc          := TVFDWidgetClass.Create(TfpgGauge);
  wc.NameBase := 'Gauge';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('Color', TPropertyColor, '');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('FirstColor', TPropertyColor, '');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('Kind', TPropertyEnum, '');
  wc.AddProperty('MaxValue', TPropertyInteger, '');
  wc.AddProperty('MinValue', TPropertyInteger, '');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('Progress', TPropertyInteger, '');
  wc.AddProperty('SecondColor', TPropertyColor, '');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.AddProperty('ShowText', TPropertyBoolean, 'Boolean value');
  wc.WidgetIconName := 'vfd.gauge';
  RegisterVFDWidget(wc);


  // Integer Edit
  wc          := TVFDWidgetClass.Create(TfpgEditInteger);
  wc.NameBase := 'EditInteger';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('NegativeColor', TPropertyColor, 'Color used for negative values');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('ReadOnly', TPropertyBoolean, '');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.AddProperty('ShowThousand', TPropertyBoolean, 'Show thousand separator');
  wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
  wc.AddProperty('TextColor', TPropertyColor, '');
  wc.AddProperty('Value', TPropertyInteger, 'Initial value');
//  wc.AddProperty('CustomThousandSeparator', TPropertyString, 'Thousand separator character');
  wc.WidgetIconName := 'vfd.editinteger';
  RegisterVFDWidget(wc);

  // Float Edit
  wc          := TVFDWidgetClass.Create(TfpgEditFloat);
  wc.NameBase := 'EditFloat';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.Addproperty('Decimals', TPropertyInteger, '');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('FixedDecimals', TPropertyBoolean, '');
  wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('NegativeColor', TPropertyColor, 'Color used for negative values');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('ReadOnly', TPropertyBoolean, '');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.AddProperty('ShowThousand', TPropertyBoolean, 'Show thousand separator');
  wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
  wc.AddProperty('TextColor', TPropertyColor, '');
  wc.AddProperty('Value', TPropertyFloat, 'Initial value');
//  wc.AddProperty('CustomDecimalSeparator', TPropertyString, 'Decimal separator character');
//  wc.AddProperty('CustomThousandSeparator', TPropertyString, 'Thousand separator character');
  wc.WidgetIconName := 'vfd.editfloat';
  RegisterVFDWidget(wc);

  // Currency Edit
  wc          := TVFDWidgetClass.Create(TfpgEditCurrency);
  wc.NameBase := 'EditCurrency';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.Addproperty('Decimals', TPropertyInteger, '');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('NegativeColor', TPropertyColor, 'Color used for negative values');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('ReadOnly', TPropertyBoolean, '');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.AddProperty('ShowThousand', TPropertyBoolean, 'Show thousand separator');
  wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
  wc.AddProperty('TextColor', TPropertyColor, '');
  wc.AddProperty('Value', TPropertyFloat, 'Initial value');
//  wc.AddProperty('CustomDecimalSeparator', TPropertyString, 'Decimal separator character');
//  wc.AddProperty('CustomThousandSeparator', TPropertyString, 'Thousand separator character');
  wc.WidgetIconName := 'vfd.editcurrency';
  RegisterVFDWidget(wc);

  { TODO : UI Designer still has problems with components that have child components. }
  // Spin Edit
  //wc          := TVFDWidgetClass.Create(TfpgSpinEdit);
  //wc.NameBase := 'SpinEdit';
  //wc.AddProperty('ButtonWidth', TPropertyInteger, 'Spin button width');
  //wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
  //wc.Addproperty('Hint', TPropertyString, '');
  //wc.AddProperty('Increment', TPropertyInteger, 'Increment value on short press');
  //wc.AddProperty('LargeIncrement', TPropertyInteger, 'Large increment value on long press');
  //wc.AddProperty('MaxValue', TPropertyInteger, 'Maximum value');
  //wc.AddProperty('MinValue', TPropertyInteger, 'Minimum value');
  //wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  //wc.AddProperty('ShowHint', TPropertyBoolean, '');
  //wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
  //wc.AddProperty('Value', TPropertyInteger, 'Initial value');
  //wc.WidgetIconName := 'vfd.editinteger';
  //RegisterVFDWidget(wc);

  // Spin Edit Float
  //wc          := TVFDWidgetClass.Create(TfpgSpinEditFloat);
  //wc.NameBase := 'SpinEditFloat';
  //wc.AddProperty('ButtonWidth', TPropertyInteger, 'Spin button width');
  //wc.Addproperty('Decimals', TPropertyInteger, '');
  //wc.Addproperty('FixedDecimals', TPropertyBoolean, '');
  //wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the text');
  //wc.Addproperty('Hint', TPropertyString, '');
  //wc.AddProperty('Increment', TPropertyFloat, 'Increment value on short press');
  //wc.AddProperty('LargeIncrement', TPropertyFloat, 'Large increment value on long press');
  //wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
  //wc.AddProperty('MaxValue', TPropertyFloat, 'Maximum value');
  //wc.AddProperty('MinValue', TPropertyFloat, 'Minimum value');
  //wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  //wc.AddProperty('ShowHint', TPropertyBoolean, '');
  //wc.AddProperty('Value', TPropertyFloat, 'Initial value');
  //wc.WidgetIconName := 'vfd.editfloat';
  //RegisterVFDWidget(wc);

  // Filename Edit
  wc          := TVFDWidgetClass.Create(TfpgFileNameEdit);
  wc.NameBase := 'FilenameEdit';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('ExtraHint', TPropertyString, '');
  wc.AddProperty('FileName', TPropertyString, 'Preset filename in edit component');
  wc.AddProperty('Filter', TPropertyString, 'Filename filters used in the dialog');
  wc.AddProperty('InitialDir', TPropertyString, 'Initial starting directory of the dialog');
  wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
  wc.WidgetIconName := 'vfd.editfilename';
  RegisterVFDWidget(wc);

  // Directory Edit
  wc          := TVFDWidgetClass.Create(TfpgDirectoryEdit);
  wc.NameBase := 'DirectoryEdit';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('Directory', TPropertyString, 'Preset directory name in edit component');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('ExtraHint', TPropertyString, '');
  wc.AddProperty('RootDirectory', TPropertyString, 'Initial starting directory of the dialog');
  wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
  wc.WidgetIconName := 'vfd.editdirectory';
  RegisterVFDWidget(wc);

  // Font Edit
  wc          := TVFDWidgetClass.Create(TfpgFontEdit);
  wc.NameBase := 'DirectoryEdit';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('ExtraHint', TPropertyString, '');
  wc.AddProperty('FontDesc', TPropertyString, 'Specify a preset font description');
  wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
  wc.WidgetIconName := 'vfd.editfont';
  RegisterVFDWidget(wc);

  // Edit Button
  wc          := TVFDWidgetClass.Create(TfpgEditButton);
  wc.NameBase := 'EditButton';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('ExtraHint', TPropertyString, '');
  wc.AddProperty('TabOrder', TPropertyInteger, 'The tab order');
  wc.AddProperty('Text', TPropertyString, 'Specify the initial text value');
  wc.WidgetIconName := 'vfd.editbutton';
  RegisterVFDWidget(wc);

  // Color wheel
  wc          := TVFDWidgetClass.Create(TfpgColorWheel);
  wc.NameBase := 'ColorWheel';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('BackgroundColor', TPropertyColor, '');
  wc.AddProperty('CursorSize', TPropertyInteger, 'Size of cross-hair in color wheel');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('MarginWidth', TPropertyInteger, 'The margin that will not be painted on four sides of widget');
  wc.AddProperty('WhiteAreaPercent', TPropertyInteger, 'The percentage of the centre of the wheel which is white');
  wc.WidgetIconName := 'vfd.colorwheel';
  RegisterVFDWidget(wc);

  // Value Bar - works in accordance with color wheel
  wc          := TVFDWidgetClass.Create(TfpgValueBar);
  wc.NameBase := 'ValueBar';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('BackgroundColor', TPropertyColor, '');
  wc.AddProperty('CursorHeight', TPropertyInteger, 'Size of selection cursor');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('MarginWidth', TPropertyInteger, 'The margin that will not be painted on four sides of widget');
  wc.AddProperty('Value', TPropertyFloat, '');
  wc.WidgetIconName := 'vfd.valuebar';
  RegisterVFDWidget(wc);

  // Splitter - works in accordance with color wheel
  wc          := TVFDWidgetClass.Create(TfpgSplitter);
  wc.NameBase := 'Splitter';
  wc.AddProperty('Align', TPropertyEnum, '');
  wc.AddProperty('ColorGrabBar', TPropertyColor, '');
  wc.AddProperty('AutoSnap', TPropertyBoolean, '');
  wc.WidgetIconName := 'vfd.splitter';
  RegisterVFDWidget(wc);

  // Hyperlink
  wc          := TVFDWidgetClass.Create(TfpgHyperlink);
  wc.NameBase := 'Hyperlink';
  wc.AddProperty('Align', TPropertyEnum, 'Component alignment');
  wc.AddProperty('Alignment', TPropertyEnum, 'Horizontal text alignment');
  wc.AddProperty('BackgroundColor', TPropertyColor, '');
  wc.AddProperty('Enabled', TPropertyBoolean, '');
  wc.AddProperty('FontDesc', TPropertyFontDesc, 'The font used for displaying the label text');
  wc.AddProperty('Hint', TPropertyString, 'Tooltip hint');
  wc.AddProperty('HotTrackColor', TPropertyColor, 'The color that the text must appear in when the mouse is over the widget.');
  wc.AddProperty('HotTrackFont', TPropertyFontDesc, 'The font that the text must use, when the mouse is over the widget.');
  wc.AddProperty('Layout', TPropertyEnum, 'Vertical text layout');
  wc.AddProperty('ParentShowHint', TPropertyBoolean, '');
  wc.AddProperty('ShowHint', TPropertyBoolean, '');
  wc.AddProperty('Text', TPropertyString, 'Label text');
  wc.AddProperty('TextColor', TPropertyColor, '');
  wc.AddProperty('URL', TPropertyString, 'The URL that must be opened in the default web browser. If OnClick is specified, then the URL has no affect.');
  wc.AddProperty('WrapText', TPropertyBoolean, 'If True text will wrap when it doesn''t fit the width');
  wc.WidgetIconName := 'vfd.hyperlink';
  RegisterVFDWidget(wc);

  // Other - do not delete!!! this should be the last...
  wc          := TVFDWidgetClass.Create(TOtherWidget);
  wc.NameBase := 'Custom';
  wc.WidgetIconName := 'vfd.other';
  wc.Container := True;
  RegisterVFDWidget(wc);
  VFDOtherWidget := wc;
end;


initialization
    FVFDWidgets := TObjectList.Create;

finalization
    FVFDWidgets.Free;
    FVFDFormWidget.Free;
    
end.