219 lines
6.6 KiB
ObjectPascal

unit spkt_Items;
{$mode delphi}
{.$Define EnhancedRecordSupport}
(*******************************************************************************
* *
* File: spkt_Items.pas *
* Description: The module contains the class of panel elements collection. *
* Copyright: (c) 2009 by Spook. *
* License: Modified LGPL (with linking exception, like Lazarus LCL) *
' See "license.txt" in this installation *
* *
*******************************************************************************)
interface
uses
Classes, Controls, SysUtils, Dialogs,
spkt_Appearance, spkt_Dispatch, spkt_BaseItem, spkt_Types,
spkt_Buttons, spkt_Checkboxes;
type
TSpkItems = class(TSpkCollection)
private
FToolbarDispatch: TSpkBaseToolbarDispatch;
FAppearance: TSpkToolbarAppearance;
FImages: TImageList;
FDisabledImages: TImageList;
FLargeImages: TImageList;
FDisabledLargeImages: TImageList;
FImagesWidth: Integer;
FLargeImagesWidth: Integer;
// *** Getters and setters ***
procedure SetToolbarDispatch(const Value: TSpkBaseToolbarDispatch);
function GetItems(AIndex: integer): TSpkBaseItem; reintroduce;
procedure SetAppearance(const Value: TSpkToolbarAppearance);
procedure SetImages(const Value: TImageList);
procedure SetDisabledImages(const Value: TImageList);
procedure SetLargeImages(const Value: TImageList);
procedure SetDisabledLargeImages(const Value: TImageList);
procedure SetImagesWidth(const Value: Integer);
procedure SetLargeImagesWidth(const Value: Integer);
public
function AddLargeButton: TSpkLargeButton;
function AddSmallButton: TSpkSmallButton;
function AddCheckbox: TSpkCheckbox;
function AddRadioButton: TSpkRadioButton;
// *** Reaction to changes in the list ***
procedure Notify(Item: TComponent; Operation: TOperation); override;
procedure Update; override;
property Items[index: integer]: TSpkBaseItem read GetItems; default;
property ToolbarDispatch: TSpkBaseToolbarDispatch read FToolbarDispatch write SetToolbarDispatch;
property Appearance: TSpkToolbarAppearance read FAppearance write SetAppearance;
property Images: TImageList read FImages write SetImages;
property DisabledImages: TImageList read FDisabledImages write SetDisabledImages;
property LargeImages: TImageList read FLargeImages write SetLargeImages;
property DisabledLargeImages: TImageList read FDisabledLargeImages write SetDisabledLargeImages;
property ImagesWidth: Integer read FImagesWidth write SetImagesWidth;
property LargeImagesWidth: Integer read FLargeImagesWidth write SetLargeImagesWidth;
end;
implementation
{ TSpkItems }
function TSpkItems.AddLargeButton: TSpkLargeButton;
begin
Result := TSpkLargeButton.Create(FRootComponent);
Result.Parent := FRootComponent;
AddItem(Result);
end;
function TSpkItems.AddSmallButton: TSpkSmallButton;
begin
Result := TSpkSmallButton.Create(FRootComponent);
Result.Parent := FRootComponent;
AddItem(Result);
end;
function TSpkItems.AddCheckbox: TSpkCheckbox;
begin
Result := TSpkCheckbox.Create(FRootComponent);
Result.Parent := FRootComponent;
AddItem(Result);
end;
function TSpkItems.AddRadioButton: TSpkRadioButton;
begin
Result := TSpkRadioButton.Create(FRootComponent);
Result.Parent := FRootComponent;
AddItem(Result);
end;
function TSpkItems.GetItems(AIndex: integer): TSpkBaseItem;
begin
Result := TSpkBaseItem(inherited Items[AIndex]);
end;
procedure TSpkItems.Notify(Item: TComponent; Operation: TOperation);
begin
inherited Notify(Item, Operation);
case Operation of
opInsert:
begin
// Setting the dispatcher to nil will cause that during the ownership
// assignment, the Notify method will not be called
TSpkBaseItem(Item).ToolbarDispatch := nil;
TSpkBaseItem(Item).Appearance := FAppearance;
TSpkBaseItem(Item).Images := FImages;
TSpkBaseItem(Item).DisabledImages := FDisabledImages;
TSpkBaseItem(Item).LargeImages := FLargeImages;
TSpkBaseItem(Item).DisabledLargeImages := FDisabledLargeImages;
TSpkBaseItem(Item).ImagesWidth := FImagesWidth;
TSpkBaseItem(Item).LargeImagesWidth := FLargeImagesWidth;
TSpkBaseItem(Item).ToolbarDispatch := FToolbarDispatch;
end;
opRemove:
if not (csDestroying in Item.ComponentState) then
begin
TSpkBaseItem(Item).ToolbarDispatch := nil;
TSpkBaseItem(Item).Appearance := nil;
TSpkBaseItem(Item).Images := nil;
TSpkBaseItem(Item).DisabledImages := nil;
TSpkBaseItem(Item).LargeImages := nil;
TSpkBaseItem(Item).DisabledLargeImages := nil;
// TSpkBaseitem(Item).ImagesWidth := 0;
// TSpkBaseItem(Item).LargeImagesWidth := 0;
end;
end;
end;
procedure TSpkItems.SetAppearance(const Value: TSpkToolbarAppearance);
var
i: Integer;
begin
FAppearance := Value;
for i := 0 to Count - 1 do
Items[i].Appearance := Value;
end;
procedure TSpkItems.SetDisabledImages(const Value: TImageList);
var
i: Integer;
begin
FDisabledImages := Value;
for i := 0 to Count - 1 do
Items[i].DisabledImages := Value;
end;
procedure TSpkItems.SetDisabledLargeImages(const Value: TImageList);
var
i: Integer;
begin
FDisabledLargeImages := Value;
for i := 0 to Count - 1 do
Items[i].DisabledLargeImages := Value;
end;
procedure TSpkItems.SetImages(const Value: TImageList);
var
i: Integer;
begin
FImages := Value;
for i := 0 to Count - 1 do
Items[i].Images := Value;
end;
procedure TSpkItems.SetImagesWidth(const Value: Integer);
var
i: Integer;
begin
FImagesWidth := Value;
for i := 0 to Count - 1 do
Items[i].ImagesWidth := Value;
end;
procedure TSpkItems.SetLargeImages(const Value: TImageList);
var
i: Integer;
begin
FLargeImages := Value;
for i := 0 to Count - 1 do
Items[i].LargeImages := Value;
end;
procedure TSpkItems.SetLargeImagesWidth(const Value: Integer);
var
i: Integer;
begin
FLargeImagesWidth := Value;
for i := 0 to Count - 1 do
Items[i].LargeImagesWidth := Value;
end;
procedure TSpkItems.SetToolbarDispatch(const Value: TSpkBaseToolbarDispatch);
var
i : integer;
begin
FToolbarDispatch := Value;
for i := 0 to Count - 1 do
Items[i].ToolbarDispatch := Value;
end;
procedure TSpkItems.Update;
begin
inherited Update;
if Assigned(FToolbarDispatch) then
FToolbarDispatch.NotifyItemsChanged;
end;
end.