x2cl/Packages/X2CLGLEditors.pas

130 lines
2.9 KiB
ObjectPascal

{
:: Contains the design-time editor for the GraphicList
::
:: Last changed: $Date$
:: Revision: $Rev$
:: Author: $Author$
}
unit X2CLGLEditors;
interface
uses
DesignEditors,
DesignIntf;
type
TX2GraphicContainerEditor = class(TComponentEditor)
protected
procedure Convert();
public
procedure Edit(); override;
procedure ExecuteVerb(Index: Integer); override;
function GetVerb(Index: Integer): String; override;
function GetVerbCount(): Integer; override;
end;
TX2GraphicListEditor = class(TComponentEditor)
public
procedure Edit(); override;
end;
implementation
uses
Classes,
SysUtils,
TypInfo,
X2CLGraphicList,
X2CLGraphicsEditor;
type
TProtectedX2GraphicContainer = class(TX2GraphicContainer);
{ TX2GraphicContainerEditor }
procedure TX2GraphicContainerEditor.Edit();
begin
TGraphicsEditorForm.Execute(Component, Self.Designer);
end;
procedure TX2GraphicContainerEditor.ExecuteVerb(Index: Integer);
begin
case Index of
0: Edit();
1: Convert();
end;
end;
function TX2GraphicContainerEditor.GetVerb(Index: Integer): String;
begin
case Index of
0: Result := 'Graphics Editor...';
1: Result := 'Convert items';
end;
end;
function TX2GraphicContainerEditor.GetVerbCount(): Integer;
begin
Result := 1;
if TProtectedX2GraphicContainer(Component).ConversionRequired then
Inc(Result);
end;
procedure TX2GraphicContainerEditor.Convert();
var
container: TX2GraphicContainer;
tempContainer: TX2GraphicContainer;
graphicIndex: Integer;
graphicItem: TX2GraphicContainerItem;
begin
if not Assigned(Designer) then
exit;
container := TX2GraphicContainer(Component);
tempContainer := TX2GraphicContainer.Create(nil);
try
tempContainer.Assign(container);
container.Clear();
for graphicIndex := 0 to Pred(tempContainer.GraphicCount) do
begin
graphicItem := TX2GraphicContainerItem(Designer.CreateComponent(TX2GraphicContainerItem, nil, 0, 0, 0, 0));
if Assigned(graphicItem) then
begin
graphicItem.Assign(tempContainer.Graphics[graphicIndex]);
graphicItem.Container := container;
end;
end;
TProtectedX2GraphicContainer(container).ConversionRequired := False;
finally
FreeAndNil(tempContainer);
end;
end;
{ TX2GraphicContainerEditor }
procedure TX2GraphicListEditor.Edit;
var
ifEditor: IComponentEditor;
begin
// Instead of showing the default ImageList dialog, check if a Container
// is available and execute it's default action...
if Component is TX2GraphicList then
with TX2GraphicList(Component) do
if Assigned(Container) then
begin
ifEditor := GetComponentEditor(Container, Designer);
if Assigned(ifEditor) then
ifEditor.Edit();
end;
end;
end.