308 lines
8.8 KiB
ObjectPascal
308 lines
8.8 KiB
ObjectPascal
unit bgrasvgimagelistform;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, BCSVGViewer,
|
|
BGRASVGImageList, ComponentEditors, Types, Math, LCLType, ComCtrls;
|
|
|
|
type
|
|
|
|
{ TfrmBGRASVGImageListEditor }
|
|
|
|
TfrmBGRASVGImageListEditor = class(TForm)
|
|
BCSVGViewerPreview: TBCSVGViewer;
|
|
btnAdd: TButton;
|
|
btnRemove: TButton;
|
|
btnUp: TButton;
|
|
btnDown: TButton;
|
|
btnReplace: TButton;
|
|
CheckBox_UseSVGAlignment: TCheckBox;
|
|
ImageList1: TImageList;
|
|
ListBox1: TListBox;
|
|
OpenDialog1: TOpenDialog;
|
|
ToolBar1: TToolBar;
|
|
ToolButton1: TToolButton;
|
|
ToolButton_AlignTop: TToolButton;
|
|
ToolButton_AlignLeft: TToolButton;
|
|
ToolButton_AlignCenter: TToolButton;
|
|
ToolButton_AlignRight: TToolButton;
|
|
ToolButton_AlignVCenter: TToolButton;
|
|
ToolButton_AlignBottom: TToolButton;
|
|
procedure btnAddClick(Sender: TObject);
|
|
procedure btnDownClick(Sender: TObject);
|
|
procedure btnRemoveClick(Sender: TObject);
|
|
procedure btnReplaceClick(Sender: TObject);
|
|
procedure btnUpClick(Sender: TObject);
|
|
procedure CheckBox_UseSVGAlignmentChange(Sender: TObject);
|
|
procedure ListBox1DrawItem(Control: TWinControl; Index: integer;
|
|
ARect: TRect; State: TOwnerDrawState);
|
|
procedure ListBox1SelectionChange(Sender: TObject; User: boolean);
|
|
procedure ToolButton_AlignBottomClick(Sender: TObject);
|
|
procedure ToolButton_AlignCenterClick(Sender: TObject);
|
|
procedure ToolButton_AlignLeftClick(Sender: TObject);
|
|
procedure ToolButton_AlignRightClick(Sender: TObject);
|
|
procedure ToolButton_AlignTopClick(Sender: TObject);
|
|
procedure ToolButton_AlignVCenterClick(Sender: TObject);
|
|
private
|
|
FComponent: TComponent;
|
|
function GetImageList: TBGRASVGImageList;
|
|
procedure UpdateListBox;
|
|
procedure UpdateButtons;
|
|
procedure UpdateToolButtonsAlign;
|
|
public
|
|
constructor {%H-}Create(AComponent: TComponent);
|
|
property ImageList: TBGRASVGImageList read GetImageList;
|
|
end;
|
|
|
|
{ TBGRASVGImageListEditor }
|
|
|
|
TBGRASVGImageListEditor = class(TComponentEditor)
|
|
protected
|
|
procedure DoShowEditor;
|
|
public
|
|
procedure ExecuteVerb(Index: integer); override;
|
|
function GetVerb({%H-}Index: integer): string; override;
|
|
function GetVerbCount: integer; override;
|
|
end;
|
|
|
|
var
|
|
frmBGRASVGImageListEditor: TfrmBGRASVGImageListEditor;
|
|
|
|
implementation
|
|
|
|
{$R *.lfm}
|
|
|
|
{ TBGRASVGImageListEditor }
|
|
|
|
procedure TBGRASVGImageListEditor.DoShowEditor;
|
|
var
|
|
f: TfrmBGRASVGImageListEditor;
|
|
begin
|
|
f := TfrmBGRASVGImageListEditor.Create(Component);
|
|
try
|
|
f.ShowModal;
|
|
Modified;
|
|
finally
|
|
f.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TBGRASVGImageListEditor.ExecuteVerb(Index: integer);
|
|
begin
|
|
case Index of
|
|
0: DoShowEditor;
|
|
end;
|
|
end;
|
|
|
|
function TBGRASVGImageListEditor.GetVerb(Index: integer): string;
|
|
begin
|
|
Result := 'Assign style';
|
|
end;
|
|
|
|
function TBGRASVGImageListEditor.GetVerbCount: integer;
|
|
begin
|
|
Result := 1;
|
|
end;
|
|
|
|
{ TfrmBGRASVGImageListEditor }
|
|
|
|
procedure TfrmBGRASVGImageListEditor.btnAddClick(Sender: TObject);
|
|
var
|
|
s: TStringList;
|
|
begin
|
|
if OpenDialog1.Execute then
|
|
begin
|
|
s := TStringList.Create;
|
|
try
|
|
s.LoadFromFile(OpenDialog1.FileName);
|
|
TBGRASVGImageList(FComponent).Add(s.Text);
|
|
finally
|
|
s.Free;
|
|
UpdateListBox;
|
|
ListBox1.ItemIndex := ListBox1.Count - 1;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmBGRASVGImageListEditor.btnDownClick(Sender: TObject);
|
|
begin
|
|
TBGRASVGImageList(FComponent).Exchange(ListBox1.ItemIndex, ListBox1.ItemIndex + 1);
|
|
UpdateListBox;
|
|
ListBox1.ItemIndex := ListBox1.ItemIndex + 1;
|
|
end;
|
|
|
|
procedure TfrmBGRASVGImageListEditor.btnRemoveClick(Sender: TObject);
|
|
begin
|
|
TBGRASVGImageList(FComponent).Remove(ListBox1.ItemIndex);
|
|
UpdateListBox;
|
|
end;
|
|
|
|
procedure TfrmBGRASVGImageListEditor.btnReplaceClick(Sender: TObject);
|
|
var
|
|
s: TStringList;
|
|
begin
|
|
if OpenDialog1.Execute then
|
|
begin
|
|
s := TStringList.Create;
|
|
try
|
|
s.LoadFromFile(OpenDialog1.FileName);
|
|
TBGRASVGImageList(FComponent).Replace(ListBox1.ItemIndex, s.Text);
|
|
finally
|
|
s.Free;
|
|
UpdateListBox;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmBGRASVGImageListEditor.btnUpClick(Sender: TObject);
|
|
begin
|
|
TBGRASVGImageList(FComponent).Exchange(ListBox1.ItemIndex, ListBox1.ItemIndex - 1);
|
|
UpdateListBox;
|
|
ListBox1.ItemIndex := ListBox1.ItemIndex - 1;
|
|
end;
|
|
|
|
procedure TfrmBGRASVGImageListEditor.CheckBox_UseSVGAlignmentChange(
|
|
Sender: TObject);
|
|
begin
|
|
ImageList.UseSVGAlignment:= CheckBox_UseSVGAlignment.Checked;
|
|
BCSVGViewerPreview.UseSVGAlignment:= ImageList.UseSVGAlignment;
|
|
ListBox1.Invalidate;
|
|
UpdateToolButtonsAlign;
|
|
end;
|
|
|
|
procedure TfrmBGRASVGImageListEditor.ListBox1DrawItem(Control: TWinControl;
|
|
Index: integer; ARect: TRect; State: TOwnerDrawState);
|
|
begin
|
|
ListBox1.Canvas.Brush.Color := clWhite;
|
|
if (odSelected in State) then
|
|
ListBox1.Canvas.Brush.Color := clHighlight;
|
|
ListBox1.Canvas.FillRect(ARect);
|
|
ListBox1.Canvas.TextOut(ARect.Height + ScaleX(4, 96),
|
|
ARect.Top, Index.ToString);
|
|
if (Index <> -1) then
|
|
TBGRASVGImageList(FComponent).Draw(Index, ListBox1, ListBox1.Canvas,
|
|
ARect.Left, ARect.Top, ARect.Height, ARect.Height);
|
|
end;
|
|
|
|
procedure TfrmBGRASVGImageListEditor.ListBox1SelectionChange(Sender: TObject;
|
|
User: boolean);
|
|
begin
|
|
UpdateButtons;
|
|
if ListBox1.ItemIndex <> -1 then
|
|
BCSVGViewerPreview.SVGString :=
|
|
TBGRASVGImageList(FComponent).SVGString[ListBox1.ItemIndex];
|
|
end;
|
|
|
|
procedure TfrmBGRASVGImageListEditor.ToolButton_AlignBottomClick(Sender: TObject
|
|
);
|
|
begin
|
|
ImageList.VerticalAlignment:= tlBottom;
|
|
BCSVGViewerPreview.VertAlign:= ImageList.VerticalAlignment;
|
|
UpdateToolButtonsAlign;
|
|
ListBox1.Invalidate;
|
|
end;
|
|
|
|
procedure TfrmBGRASVGImageListEditor.ToolButton_AlignCenterClick(Sender: TObject
|
|
);
|
|
begin
|
|
ImageList.HorizontalAlignment:= taCenter;
|
|
BCSVGViewerPreview.HorizAlign:= ImageList.HorizontalAlignment;
|
|
UpdateToolButtonsAlign;
|
|
ListBox1.Invalidate;
|
|
end;
|
|
|
|
procedure TfrmBGRASVGImageListEditor.ToolButton_AlignLeftClick(Sender: TObject);
|
|
begin
|
|
ImageList.HorizontalAlignment:= taLeftJustify;
|
|
BCSVGViewerPreview.HorizAlign:= ImageList.HorizontalAlignment;
|
|
UpdateToolButtonsAlign;
|
|
ListBox1.Invalidate;
|
|
end;
|
|
|
|
procedure TfrmBGRASVGImageListEditor.ToolButton_AlignRightClick(Sender: TObject
|
|
);
|
|
begin
|
|
ImageList.HorizontalAlignment:= taRightJustify;
|
|
BCSVGViewerPreview.HorizAlign:= ImageList.HorizontalAlignment;
|
|
UpdateToolButtonsAlign;
|
|
ListBox1.Invalidate;
|
|
end;
|
|
|
|
procedure TfrmBGRASVGImageListEditor.ToolButton_AlignTopClick(Sender: TObject);
|
|
begin
|
|
ImageList.VerticalAlignment:= tlTop;
|
|
BCSVGViewerPreview.VertAlign:= ImageList.VerticalAlignment;
|
|
UpdateToolButtonsAlign;
|
|
ListBox1.Invalidate;
|
|
end;
|
|
|
|
procedure TfrmBGRASVGImageListEditor.ToolButton_AlignVCenterClick(
|
|
Sender: TObject);
|
|
begin
|
|
ImageList.VerticalAlignment:= tlCenter;
|
|
BCSVGViewerPreview.VertAlign:= ImageList.VerticalAlignment;
|
|
UpdateToolButtonsAlign;
|
|
ListBox1.Invalidate;
|
|
end;
|
|
|
|
procedure TfrmBGRASVGImageListEditor.UpdateListBox;
|
|
var
|
|
i: integer;
|
|
index: integer;
|
|
begin
|
|
index := ListBox1.ItemIndex;
|
|
ListBox1.Clear;
|
|
for i := 0 to TBGRASVGImageList(FComponent).Count - 1 do
|
|
ListBox1.Items.Add('Image' + i.ToString);
|
|
if ListBox1.Count > 0 then
|
|
ListBox1.ItemIndex := index;
|
|
UpdateButtons;
|
|
end;
|
|
|
|
function TfrmBGRASVGImageListEditor.GetImageList: TBGRASVGImageList;
|
|
begin
|
|
result := TBGRASVGImageList(FComponent);
|
|
end;
|
|
|
|
procedure TfrmBGRASVGImageListEditor.UpdateButtons;
|
|
begin
|
|
btnUp.Enabled := (ListBox1.Count > 1) and (ListBox1.ItemIndex > 0);
|
|
btnDown.Enabled := (ListBox1.Count > 1) and (ListBox1.ItemIndex < ListBox1.Count - 1);
|
|
btnRemove.Enabled := (ListBox1.Count > 0) and (ListBox1.ItemIndex <> -1);
|
|
btnReplace.Enabled := (ListBox1.Count > 0) and (ListBox1.ItemIndex <> -1);
|
|
end;
|
|
|
|
procedure TfrmBGRASVGImageListEditor.UpdateToolButtonsAlign;
|
|
begin
|
|
ToolButton_AlignLeft.Down := (ImageList.HorizontalAlignment = taLeftJustify);
|
|
ToolButton_AlignCenter.Down := (ImageList.HorizontalAlignment = taCenter);
|
|
ToolButton_AlignRight.Down := (ImageList.HorizontalAlignment = taRightJustify);
|
|
ToolButton_AlignTop.Down := (ImageList.VerticalAlignment = tlTop);
|
|
ToolButton_AlignVCenter.Down := (ImageList.VerticalAlignment = tlCenter);
|
|
ToolButton_AlignBottom.Down := (ImageList.VerticalAlignment = tlBottom);
|
|
ToolBar1.Enabled:= not ImageList.UseSVGAlignment;
|
|
end;
|
|
|
|
constructor TfrmBGRASVGImageListEditor.Create(AComponent: TComponent);
|
|
begin
|
|
inherited Create(Application);
|
|
|
|
FComponent := AComponent;
|
|
ListBox1.ItemHeight := Max(ImageList.Height,
|
|
Max(16, ListBox1.Canvas.TextHeight('0')));
|
|
UpdateListBox;
|
|
CheckBox_UseSVGAlignment.Checked := ImageList.UseSVGAlignment;
|
|
BCSVGViewerPreview.UseSVGAlignment:= ImageList.UseSVGAlignment;
|
|
BCSVGViewerPreview.HorizAlign:= ImageList.HorizontalAlignment;
|
|
BCSVGViewerPreview.VertAlign:= ImageList.VerticalAlignment;
|
|
UpdateToolButtonsAlign;
|
|
end;
|
|
|
|
initialization
|
|
RegisterComponentEditor(TBGRASVGImageList, TBGRASVGImageListEditor);
|
|
|
|
end.
|