mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-14 10:02:10 +08:00
276 lines
6.5 KiB
ObjectPascal
276 lines
6.5 KiB
ObjectPascal
unit PngComponentEditors;
|
|
|
|
{$I compilers.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, SysUtils, Forms, Classes, Controls, PngImageList, TypInfo,
|
|
{$IFDEF COMPILER_6_UP} DesignIntf, DesignEditors, ColnEdit {$ELSE} DsgnIntf {$ENDIF};
|
|
|
|
type
|
|
{$IFNDEF COMPILER_6_UP}
|
|
IProperty = TPropertyEditor;
|
|
IDesignerSelections = TDesignerSelectionList;
|
|
IDesigner = IFormDesigner;
|
|
|
|
TThanyComponentEditor = class(TComponentEditor)
|
|
public
|
|
function GetComponent: TComponent;
|
|
end;
|
|
{$ELSE}
|
|
TThanyComponentEditor = TComponentEditor;
|
|
{$ENDIF}
|
|
|
|
TPngImageListEditor = class(TThanyComponentEditor)
|
|
public
|
|
function GetVerbCount: Integer; override;
|
|
function GetVerb(Index: Integer): string; override;
|
|
procedure ExecuteVerb(Index: Integer); override;
|
|
procedure Edit; override;
|
|
end;
|
|
|
|
TPngImageCollectionEditor = class(TThanyComponentEditor)
|
|
public
|
|
procedure Edit; override;
|
|
function GetVerbCount: Integer; override;
|
|
function GetVerb(Index: Integer): string; override;
|
|
procedure ExecuteVerb(Index: Integer); override;
|
|
end;
|
|
|
|
TPngButtonEditor = class(TThanyComponentEditor)
|
|
public
|
|
function GetVerbCount: Integer; override;
|
|
function GetVerb(Index: Integer): string; override;
|
|
procedure ExecuteVerb(Index: Integer); override;
|
|
procedure Edit; override;
|
|
end;
|
|
|
|
TPngImageListImagesEditor = class(TStringProperty)
|
|
public
|
|
function GetValue: string; override;
|
|
function GetAttributes: TPropertyAttributes; override;
|
|
procedure Edit; override;
|
|
end;
|
|
|
|
TPngImageCollectionItemsEditor = class(TPngImageListImagesEditor)
|
|
public
|
|
procedure Edit; override;
|
|
end;
|
|
|
|
TEditProperty = class
|
|
private
|
|
FPropery: string;
|
|
procedure EnumProperty({$IFDEF COMPILER_6_UP}const{$ENDIF} Prop: IProperty);
|
|
public
|
|
constructor Create(Component: TComponent; const Prop: string; Designer: IDesigner);
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses PngImageListEditor;
|
|
|
|
//This type is neccesary to be able to call CopyPngs without having to make it
|
|
//public in the TPngImageList class.
|
|
type
|
|
TPngImageListAccess = class(TPngImageList)
|
|
public
|
|
procedure CopyPngs; override;
|
|
end;
|
|
|
|
procedure EditProperty(Component: TComponent; const Prop: string; Designer: IDesigner);
|
|
begin
|
|
TEditProperty.Create(Component, Prop, Designer).Free;
|
|
end;
|
|
|
|
{ TPngImageListAccess }
|
|
|
|
procedure TPngImageListAccess.CopyPngs;
|
|
begin
|
|
inherited CopyPngs;
|
|
end;
|
|
|
|
{ TPngImageListEditor }
|
|
|
|
procedure TPngImageListEditor.Edit;
|
|
var
|
|
Component: TPngImageList;
|
|
begin
|
|
Component := GetComponent as TPngImageList;
|
|
EditProperty(Component, 'PngImages', Designer);
|
|
end;
|
|
|
|
procedure TPngImageListEditor.ExecuteVerb(Index: Integer);
|
|
begin
|
|
case Index of
|
|
0: Edit;
|
|
1: begin
|
|
TPngImageListAccess(GetComponent).CopyPngs;
|
|
MessageBox(0, 'The PNG objects have been copied to the internal imagelist.', PChar(string(GetComponent.ClassName)), MB_ICONINFORMATION or MB_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function TPngImageListEditor.GetVerb(Index: Integer): string;
|
|
begin
|
|
case Index of
|
|
0: Result := '&Edit images...';
|
|
1: Result := '&Recreate images...';
|
|
end;
|
|
end;
|
|
|
|
function TPngImageListEditor.GetVerbCount: Integer;
|
|
begin
|
|
Result := 2;
|
|
end;
|
|
|
|
{ TPngImageCollectionEditor }
|
|
|
|
procedure TPngImageCollectionEditor.Edit;
|
|
var
|
|
Component: TPngImageCollection;
|
|
begin
|
|
Component := GetComponent as TPngImageCollection;
|
|
EditProperty(Component, 'Items', Designer);
|
|
end;
|
|
|
|
procedure TPngImageCollectionEditor.ExecuteVerb(Index: Integer);
|
|
begin
|
|
Edit;
|
|
end;
|
|
|
|
function TPngImageCollectionEditor.GetVerb(Index: Integer): string;
|
|
begin
|
|
Result := '&Edit images...';
|
|
end;
|
|
|
|
function TPngImageCollectionEditor.GetVerbCount: Integer;
|
|
begin
|
|
Result := 1;
|
|
end;
|
|
|
|
{ TPngButtonEditor }
|
|
|
|
procedure TPngButtonEditor.ExecuteVerb(Index: Integer);
|
|
begin
|
|
EditProperty(GetComponent, 'PngImage', Designer);
|
|
end;
|
|
|
|
function TPngButtonEditor.GetVerb(Index: Integer): string;
|
|
begin
|
|
Result := '&Edit image...';
|
|
end;
|
|
|
|
function TPngButtonEditor.GetVerbCount: Integer;
|
|
begin
|
|
Result := 1;
|
|
end;
|
|
|
|
procedure TPngButtonEditor.Edit;
|
|
begin
|
|
EditProperty(GetComponent, 'OnClick', Designer);
|
|
end;
|
|
|
|
{ TD5ComponentEditor }
|
|
|
|
{$IFNDEF COMPILER_6_UP}
|
|
|
|
function TThanyComponentEditor.GetComponent: TComponent;
|
|
begin
|
|
Result := Component;
|
|
end;
|
|
|
|
{$ENDIF}
|
|
|
|
{ TEditProperty }
|
|
|
|
{$IFDEF COMPILER_6_UP}
|
|
|
|
constructor TEditProperty.Create(Component: TComponent; const Prop: string; Designer: IDesigner);
|
|
var
|
|
Components: IDesignerSelections;
|
|
begin
|
|
inherited Create;
|
|
FPropery := Prop;
|
|
Components := TDesignerSelections.Create;
|
|
Components.Add(Component);
|
|
GetComponentProperties(Components, tkAny, Designer, EnumProperty);
|
|
end;
|
|
|
|
{$ELSE}
|
|
|
|
constructor TEditProperty.Create(Component: TComponent; const Prop: string; Designer: IDesigner);
|
|
var
|
|
Components: TDesignerSelectionList;
|
|
begin
|
|
inherited Create;
|
|
FPropery := Prop;
|
|
Components := TDesignerSelectionList.Create;
|
|
try
|
|
Components.Add(Component);
|
|
GetComponentProperties(Components, tkAny, Designer, EnumProperty);
|
|
finally
|
|
Components.Free;
|
|
end;
|
|
end;
|
|
|
|
{$ENDIF}
|
|
|
|
procedure TEditProperty.EnumProperty({$IFDEF COMPILER_6_UP}const{$ENDIF} Prop: IProperty);
|
|
begin
|
|
if Prop.GetName = FPropery
|
|
then Prop.Edit;
|
|
end;
|
|
|
|
{ TPngImageListImagesEditor }
|
|
|
|
procedure TPngImageListImagesEditor.Edit;
|
|
var
|
|
ImageList: TPngImageList;
|
|
begin
|
|
with TPngImageListEditorDlg.Create(nil)
|
|
do begin
|
|
ImageList := TPngImageList(Self.GetComponent(0));
|
|
Caption := 'Editing ' + ImageList.Name + '.' + Self.GetName;
|
|
Images.Items.Assign(ImageList.PngImages);
|
|
ImageWidth := ImageList.Width;
|
|
ImageHeight := ImageList.Height;
|
|
if ShowModal = mrOK
|
|
then begin
|
|
ImageList.PngImages.Assign(Images.Items);
|
|
Self.Designer.Modified;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function TPngImageListImagesEditor.GetAttributes: TPropertyAttributes;
|
|
begin
|
|
Result := inherited GetAttributes + [paDialog, paReadOnly];
|
|
end;
|
|
|
|
function TPngImageListImagesEditor.GetValue: string;
|
|
begin
|
|
Result := '(PNG images)';
|
|
end;
|
|
|
|
{ TPngImageCollectionItemsEditor }
|
|
|
|
procedure TPngImageCollectionItemsEditor.Edit;
|
|
var
|
|
Collection: TPngImageCollection;
|
|
begin
|
|
with TPngImageListEditorDlg.Create(nil)
|
|
do begin
|
|
Collection := TPngImageCollection(Self.GetComponent(0));
|
|
Caption := 'Editing ' + Collection.Name + '.' + Self.GetName;
|
|
Images.Items.Assign(Collection.Items);
|
|
if ShowModal = mrOK
|
|
then begin
|
|
Collection.Items.Assign(Images.Items);
|
|
Self.Designer.Modified;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
end.
|