381 lines
9.2 KiB
ObjectPascal

unit SpkToolbarEditor;
{$mode Delphi}
interface
uses Forms, Controls, Classes, ComponentEditors, PropEdits, LazarusPackageIntf, LazIdeIntf, TypInfo, Dialogs,
SysUtils, ImgList, GraphPropEdits,
spkToolbar, spkt_Tab, spkt_Buttons,
spkte_EditWindow, spkte_AppearanceEditor;
const PROPERTY_CONTENTS_NAME = 'Contents';
PROPERTY_CONTENTS_VALUE = 'Open editor...';
//type
//
// TAddContentsFilter = class(TSelectionEditor, ISelectionPropertyFilter)
// public
// procedure FilterProperties(const ASelection: IDesignerSelections; const ASelectionProperties: IInterfaceList);
// end;
//
//TSpkToolbarContentsEditor = class(TBasePropertyEditor, IProperty, IPropertyKind)
// private
// protected
// FPropList : PInstPropList;
// FPropCount : integer;
// FDesigner : IDesigner;
// FToolbar : TSpkToolbar;
//
// procedure SetPropEntry(Index: Integer; AInstance: TPersistent;
// APropInfo: PPropInfo); override;
// procedure Initialize; override;
// public
// constructor Create(const ADesigner: IDesigner; APropCount: Integer); override;
// destructor Destroy; override;
//
// procedure Activate;
// function AllEqual: Boolean;
// function AutoFill: Boolean;
// procedure Edit;
// function HasInstance(Instance: TPersistent): Boolean;
// function GetAttributes: TPropertyAttributes;
// function GetEditLimit: Integer;
// function GetEditValue(out Value: string): Boolean;
// function GetName: string;
// procedure GetProperties(Proc: TGetPropProc);
// function GetPropInfo: PPropInfo;
// function GetPropType: PTypeInfo;
// function GetValue: string;
// procedure GetValues(Proc: TGetStrProc);
// procedure Revert;
// procedure SetValue(const Value: string);
// function ValueAvailable: Boolean;
//
// function GetKind: TTypeKind;
//
// property PropCount : integer read FPropCount;
// property Designer : IDesigner read FDesigner;
// property Toolbar : TSpkToolbar read FToolbar write FToolbar;
// end;
type TSpkToolbarCaptionEditor = class(TStringProperty)
private
protected
public
procedure SetValue(const Value: string); override;
end;
type TSpkToolbarAppearanceEditor = class(TClassProperty)
private
protected
public
function GetAttributes: TPropertyAttributes; override;
procedure Edit; override;
end;
type TSpkToolbarEditor = class(TComponentEditor)
protected
procedure DoOpenContentsEditor;
public
procedure Edit; override;
procedure ExecuteVerb(Index: Integer); override;
function GetVerb(Index: Integer): string; override;
function GetVerbCount: Integer; override;
end;
type TSpkImageIndexPropertyEditor = class(TImageIndexPropertyEditor)
protected
function GetImageList: TCustomImageList; override;
end;
var EditWindow : TfrmEditWindow;
implementation
{ TSpkToolbarEditor }
//procedure TSpkToolbarContentsEditor.Activate;
//begin
////
//end;
//
//function TSpkToolbarContentsEditor.AllEqual: Boolean;
//begin
//result:=FPropCount = 1;
//end;
//
//function TSpkToolbarContentsEditor.AutoFill: Boolean;
//begin
//result:=false;
//end;
//
//constructor TSpkToolbarContentsEditor.Create(const ADesigner: IDesigner;
// APropCount: Integer);
//begin
// inherited Create(ADesigner, APropCount);
// FDesigner:=ADesigner;
// FPropCount:=APropCount;
// FToolbar:=nil;
// GetMem(FPropList, APropCount * SizeOf(TInstProp));
// FillChar(FPropList^, APropCount * SizeOf(TInstProp), 0);
//end;
//
//destructor TSpkToolbarContentsEditor.Destroy;
//begin
// if FPropList <> nil then
// FreeMem(FPropList, FPropCount * SizeOf(TInstProp));
// inherited;
//end;
//
//procedure TSpkToolbarContentsEditor.Edit;
//begin
// EditWindow.SetData(FToolbar,self.Designer);
// EditWindow.Show;
//end;
//
//function TSpkToolbarContentsEditor.GetAttributes: TPropertyAttributes;
//begin
//result:=[paDialog, paReadOnly];
//end;
//
//function TSpkToolbarContentsEditor.GetEditLimit: Integer;
//begin
//result:=0;
//end;
//
//function TSpkToolbarContentsEditor.GetEditValue(out Value: string): Boolean;
//begin
//Value:=GetValue;
//result:=true;
//end;
//
//function TSpkToolbarContentsEditor.GetKind: TTypeKind;
//begin
//result:=tkClass;
//end;
//
//function TSpkToolbarContentsEditor.GetName: string;
//begin
//result:=PROPERTY_CONTENTS_NAME;
//end;
//
//procedure TSpkToolbarContentsEditor.GetProperties(Proc: TGetPropProc);
//begin
////
//end;
//
//function TSpkToolbarContentsEditor.GetPropInfo: PPropInfo;
//begin
//Result:=nil;
//end;
//
//function TSpkToolbarContentsEditor.GetPropType: PTypeInfo;
//begin
//Result:=nil;
//end;
//
//function TSpkToolbarContentsEditor.GetValue: string;
//begin
//result:=PROPERTY_CONTENTS_VALUE;
//end;
//
//procedure TSpkToolbarContentsEditor.GetValues(Proc: TGetStrProc);
//begin
////
//end;
//
//function TSpkToolbarContentsEditor.HasInstance(Instance: TPersistent): Boolean;
//begin
// result:=EditWindow.Toolbar = Instance;
//end;
//
//procedure TSpkToolbarContentsEditor.Initialize;
//begin
// inherited;
//end;
//
//procedure TSpkToolbarContentsEditor.Revert;
//begin
////
//end;
//
//procedure TSpkToolbarContentsEditor.SetPropEntry(Index: Integer; AInstance: TPersistent;
// APropInfo: PPropInfo);
//begin
//with FPropList^[Index] do
// begin
// Instance := AInstance;
// PropInfo := APropInfo;
// end;
//end;
//
//procedure TSpkToolbarContentsEditor.SetValue(const Value: string);
//begin
////
//end;
//
//function TSpkToolbarContentsEditor.ValueAvailable: Boolean;
//begin
//result:=true;
//end;
{ TSelectionFilter }
//procedure TAddContentsFilter.FilterProperties(
// const ASelection: IDesignerSelections;
// const ASelectionProperties: IInterfaceList);
//
//var ContentsEditor : TSpkToolbarContentsEditor;
// Prop : IProperty;
// i : integer;
// Added : boolean;
//
//begin
//if ASelection.Count<>1 then
// exit;
//
//if ASelection[0] is TSpkToolbar then
// begin
// ContentsEditor:=TSpkToolbarContentsEditor.Create(inherited Designer, 1);
// ContentsEditor.Toolbar:=ASelection[0] as TSpkToolbar;
//
// i:=0;
// Added:=false;
// while (i<ASelectionProperties.Count) and not Added do
// begin
// ASelectionProperties.Items[i].QueryInterface(IProperty, Prop);
// if (assigned(Prop)) and (Prop.GetName>PROPERTY_CONTENTS_NAME) then
// begin
// ASelectionProperties.Insert(i, ContentsEditor);
// Added:=true;
// end;
// inc(i);
// end;
//
// if not(Added) then
// ASelectionProperties.Add(ContentsEditor as IProperty);
// end;
//end;
{ TSpkToolbarEditor }
procedure TSpkToolbarEditor.DoOpenContentsEditor;
var
Component: TComponent;
begin
Component:=self.GetComponent;
if not(Component is TSpkToolbar) then
exit;
if EditWindow = nil then
EditWindow := TfrmEditWindow.Create(nil);
EditWindow.SetData(TSpkToolbar(Component),Self.GetDesigner);
EditWindow.Show;
end;
procedure TSpkToolbarEditor.Edit;
begin
DoOpenContentsEditor;
end;
procedure TSpkToolbarEditor.ExecuteVerb(Index: Integer);
begin
case Index of
0 : DoOpenContentsEditor;
end;
end;
function TSpkToolbarEditor.GetVerb(Index: Integer): string;
begin
case Index of
0 : result:='Contents editor...';
end;
end;
function TSpkToolbarEditor.GetVerbCount: Integer;
begin
Result := 1;
end;
{ TSpkToolbarCaptionEditor }
procedure TSpkToolbarCaptionEditor.SetValue(const Value: string);
begin
inherited;
EditWindow.RefreshNames;
end;
{ TSpkImageIndexPropertyEditor }
function TSpkImageIndexPropertyEditor.GetImagelist: TCustomImageList;
var
Instance: TPersistent;
begin
Result := nil;
Instance := GetComponent(0);
if (Instance is TSpkLargeButton) then
Result := TSpkLargeButton(Instance).Images
else if (Instance is TSpkSmallButton) then
Result := TSpkSmallButton(Instance).Images;
end;
{ TSpkToolbarAppearanceEditor }
procedure TSpkToolbarAppearanceEditor.Edit;
var
Obj: TObject;
Toolbar: TSpkToolbar;
Tab: TSpkTab;
AppearanceEditor: tfrmAppearanceEditWindow;
begin
Obj:=GetComponent(0);
if Obj is TSpkToolbar then
begin
Toolbar := TSpkToolbar(Obj);
AppearanceEditor:=TfrmAppearanceEditWindow.Create(nil);
try
AppearanceEditor.Appearance.Assign(Toolbar.Appearance);
if AppearanceEditor.ShowModal = mrOK then
begin
Toolbar.Appearance.Assign(AppearanceEditor.Appearance);
Modified;
end;
finally
AppearanceEditor.Free;
end;
end else
if Obj is TSpkTab then
begin
Tab:=TSpkTab(Obj);
AppearanceEditor:=TfrmAppearanceEditWindow.Create(nil);
try
AppearanceEditor.Appearance.Assign(Tab.CustomAppearance);
if AppearanceEditor.ShowModal = mrOK then
begin
Tab.CustomAppearance.Assign(AppearanceEditor.Appearance);
Modified;
end;
finally
AppearanceEditor.Free;
end;
end;
end;
function TSpkToolbarAppearanceEditor.GetAttributes: TPropertyAttributes;
begin
result:=inherited GetAttributes + [paDialog] - [paMultiSelect];
end;
initialization
//EditWindow:=TfrmEditWindow.create(nil);
finalization
EditWindow.Free;
end.